diff --git a/drone_simulation/CMakeLists.txt b/drone_simulation/CMakeLists.txt index e802d90..5456da2 100644 --- a/drone_simulation/CMakeLists.txt +++ b/drone_simulation/CMakeLists.txt @@ -4,10 +4,16 @@ project(drone_simulation CXX) add_library(drone_simulation_lib src/simulation.cpp src/solvers/analytical_solver.cpp + src/solvers/table_solver.cpp src/providers/json_target_provider.cpp src/config_loaders/file_config_loader.cpp src/config_loaders/factory.cpp src/mission_processor.cpp + src/drone_states/state_stopped.cpp + src/drone_states/state_accelerating.cpp + src/drone_states/state_decelerating.cpp + src/drone_states/state_turning.cpp + src/drone_states/state_moving.cpp ) target_include_directories(drone_simulation_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) target_compile_options(drone_simulation_lib PRIVATE -Wall -Wextra -pedantic) diff --git a/drone_simulation/data/ammo.json b/drone_simulation/data/ammo.json index f1fc59d..a1c485b 100644 --- a/drone_simulation/data/ammo.json +++ b/drone_simulation/data/ammo.json @@ -2,31 +2,31 @@ { "name": "VOG-17", "mass": 0.35, - "drag": 0.07, + "drag": 0.004, "lift": 0 }, { "name": "M67", "mass": 0.6, - "drag": 0.1, + "drag": 0.005, "lift": 0 }, { "name": "RKG-3", "mass": 1.2, - "drag": 0.1, + "drag": 0.007, "lift": 0 }, { "name": "GLIDING-VOG", "mass": 0.45, - "drag": 0.1, - "lift": 1 + "drag": 0.005, + "lift": 0.005 }, { "name": "GLIDING-RKG", "mass": 1.4, - "drag": 0.1, - "lift": 1 + "drag": 0.007, + "lift": 0.005 } ] \ No newline at end of file diff --git a/drone_simulation/data/ballistic_table.txt b/drone_simulation/data/ballistic_table.txt new file mode 100644 index 0000000..57cd781 --- /dev/null +++ b/drone_simulation/data/ballistic_table.txt @@ -0,0 +1,3306 @@ +11 10 5 3 2 +50. 60. 70. 80. 90. 100. 110. 120. 130. 140. 150. +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. +0.35 0.45 0.6 1.2 1.4 +0.004 0.005 0.007 +0. 0.005 +3.5045080212366058 2.8938155146905893 +3.6201084533913095 14.596626942484109 +3.5838661492081623 2.8231231700671886 +3.699868100734687 14.211657158007464 +3.7431679856267204 2.6873984271417486 +3.8586643789492037 13.466257312622519 +3.434299419039064 2.958124778467509 +3.5057865423231194 12.054688393980792 +3.4957122792461197 2.901780310727317 +3.567722186976936 11.823864656286617 +3.6192238760294444 2.792294557180691 +3.691746897656515 11.369252603859444 +3.373217574322246 3.015461112081073 +3.4158069139739107 9.849975552679414 +3.418994857073471 2.9723683150270346 +3.461922419838276 9.715163696317177 +3.5111080873957388 2.887856088525701 +3.5545292376780524 9.447386390106308 +3.2823890485031724 3.103183050768454 +3.29621753747683 6.545379353297966 +3.30499485751573 3.081069618549535 +3.31889350510648 6.502233114091517 +3.350413352446452 3.0372049441187245 +3.3644377383844164 6.416124020523711 +3.2695046818165725 3.1158714772391387 +3.2805028894888673 6.07086025714968 +3.288840417769944 3.096852954496167 +3.299886876792528 6.036553354701744 +3.327671035659814 3.059075667594949 +3.338805489799236 5.96807204860553 +3.5067468293498383 5.765119833790019 +3.653123867982994 17.76421385861027 +3.586569569938885 5.61906406734092 +3.732742337036709 17.268540638041436 +3.746693699828885 5.339306831394281 +3.890940663856774 16.320514058289717 +3.4360937077508926 5.898199667368929 +3.5304393612441345 15.209419498191588 +3.4978971628219844 5.781590873807161 +3.5925651422181604 14.899721243720753 +3.6221220594329635 5.555444578941792 +3.7167670023557733 14.29564316715318 +3.374598078828289 6.017022994352121 +3.4336947181038253 13.000544633644015 +3.4206878814769124 5.927702459199835 +3.4800772460516227 12.810378478128392 +3.513387033888586 5.752797882590855 +3.5731149185388724 12.435418498191614 +3.283105188510465 6.199140404412416 +3.3047769621150334 9.705326236146131 +3.3058819798238988 6.153193962710674 +3.3276326232411995 9.636559059493788 +3.351632673545713 6.062128125438335 +3.373518130528189 9.499795858087904 +3.270121653562058 6.22551536609908 +3.2877982247306563 9.233920429146137 +3.289605745891789 6.185985393143057 +3.3073387590228083 9.17784006080078 +3.328725892580271 6.107520794217627 +3.346558071602352 9.06622021575093 +3.510215374434465 8.602953291674265 +3.690408196440236 20.989123238576802 +3.5907386689712655 8.374805884507674 +3.7698247503260056 20.363895988801147 +3.752081234680552 7.939293651994592 +3.9272871430727956 19.182761795843444 +3.438885002325029 8.81130807406083 +3.5582772525050306 18.411650560707738 +3.5012839003712237 8.628716144956165 +3.6206559178553186 18.010081236681586 +3.626582353375272 8.275596517151532 +3.7451199878875734 17.23398182252289 +3.376753364514925 8.997733267378202 +3.4538756402504416 16.188624500958046 +3.423324006429023 8.857561162642932 +3.500629639883226 15.934427379107984 +3.5169164064616396 8.583684709654335 +3.5942766635544654 15.436473237422963 +3.284229201897865 9.284190746255323 +3.3144080032046093 12.885548146724743 +3.307272536639881 9.211836383874243 +3.337527858403358 12.787584300450991 +3.3535388623825826 9.06859772635649 +3.3839153090577834 12.593285340195392 +3.271090747562447 9.325750609274928 +3.296002720264084 12.41456231822149 +3.2908065076399233 9.26346901180043 +3.3157754345344017 12.33373375217687 +3.330377174853081 9.13996868350277 +3.355440618926201 12.173214136414801 +3.5147251286397743 11.400914259625143 +3.7322073975497823 24.263710644091898 +3.596131535415094 11.08295500018713 +3.811216064816327 23.487156479350194 +3.758980468109193 10.478555366927889 +3.9675558734774237 22.03895382726952 +3.442530875536972 11.692114989184134 +3.589521098200983 21.65594557765714 +3.5056898083124834 11.436877921714666 +3.6521264274385623 21.147285317496895 +3.632338913860988 10.944981871227755 +3.7767700391095365 20.173408054678525 +3.379579895141287 11.953346126741296 +3.4765282702095446 19.41033754798965 +3.426770670035081 11.756867518821256 +3.5237058237476777 19.081851789969924 +3.52150328179288 11.374024161454425 +3.6180362984671737 18.442523252714498 +3.2857122240435808 12.356017937748097 +3.3252060229880938 16.08413781190225 +3.309104465733921 12.254163403156914 +3.3486570988416053 15.95269345631721 +3.356042502975262 12.052815972345435 +3.395671172429519 15.692671139931674 +3.272370472734567 12.414567506076052 +3.3051986583433357 15.611145115724675 +3.2923901082063045 12.326837420338821 +3.3252650905560643 15.501996840586935 +3.3325492979805196 12.153092156043025 +3.3654922945669443 15.285700076845876 +3.520110876563541 14.15506612986139 +3.778698182165511 27.583363725423176 +3.602537178285896 13.73915888734922 +3.8569473173437814 26.63115808652755 +3.7670895848548795 12.952390538378907 +4.011547048316258 24.879483369703127 +3.446906251564902 14.537218597785548 +3.6243381316403775 24.939507197240044 +3.510954734474191 14.202197496083798 +3.687054823867036 24.306573986836625 +3.639160297620886 13.559118298044751 +3.811635499634857 23.106674849454304 +3.3829865966661576 14.88107057394149 +3.501788823033367 22.663963993308453 +3.4309114261029583 14.622359510526586 +3.549390486933331 22.249561593371197 +3.526978640424285 14.119837806970278 +3.644378724011017 21.448425000355716 +3.2875113289101634 15.41303423141529 +3.337241951412992 19.30040194270388 +3.3113232250110465 15.278252387519347 +3.3610749456584323 19.130621189027732 +3.359064939071429 15.012259153786507 +3.408806873994907 18.795667010976715 +3.2739243978569994 15.490580405265744 +3.315446862854939 18.823084833167123 +3.2943103344163474 15.374404769127848 +3.335855499080458 18.68157031413461 +3.3351757854250255 15.14465656527266 +3.376734092809495 18.401754468924086 +3.5262290623025736 16.863029345628213 +3.8300156981287996 30.945280935412768 +3.6097734800378687 16.34097458900805 +3.9070068519614694 29.79076306668333 +3.776152600891512 15.358632851082998 +4.059036182770933 27.697493309725907 +3.451901847277813 17.344442174093786 +3.6628661285193154 28.26122476946717 +3.516939419066485 16.922312577925833 +3.7254885855586974 27.48498576983798 +3.6468475179153597 16.11558305615513 +3.849611095374843 26.028772263765195 +3.386893706576454 17.77904195706544 +3.5297705542316007 25.949221452633687 +3.43564442611278 17.451925728814526 +3.5777454196850815 25.435991419407312 +3.5331957047485356 16.818734566265448 +3.67326956913794 24.45084502372131 +3.289588748448124 18.454114159271715 +3.3505725793875154 22.53448116287608 +3.3138808516154015 18.282759160056422 +3.3748227132754796 22.321006871514196 +3.362537212802299 17.94521514056876 +3.4233323402751052 21.901049987870618 +3.2757204768034254 18.552799966986658 +3.3267955747199993 22.05052590461981 +3.296526531177881 18.404980687873135 +3.3475826558120008 21.87218869490093 +3.338198311721946 18.113123356043182 +3.3891770634133884 21.520389050712545 +3.5329556249676157 19.52347321510996 +3.8862662520406728 34.34771575310235 +3.6176845655775702 18.887231619763345 +3.961353023777712 32.96204431114094 +3.785954779654295 17.696757082965547 +4.109787510611806 30.487913219676322 +3.457422548825947 20.112440992440174 +3.705225841364755 31.621095169218002 +3.5235233998142363 19.595883509716966 +3.767456056970196 30.68069993432647 +3.655230970479857 18.61331674374025 +3.8905788627159343 28.936130728685363 +3.391231384109772 20.646025326073012 +3.5605742634314064 29.26683331864365 +3.440880893040886 20.244237365062475 +3.608819299798506 28.640598656395575 +3.5400277207417203 19.469391720234437 +3.7046641106403255 27.44763430110869 +3.2919112980135177 21.47845014312187 +3.3652462485731958 25.787130065530352 +3.316735249796701 21.266736908225766 +3.389933912156009 25.524137642873676 +3.3663988449095075 20.85052400739873 +3.4392513700393836 25.008331826818445 +3.277730474510072 21.600507693363284 +3.339285351362415 25.294150782006476 +3.2990029880792675 21.417715441943738 +3.3604755172025587 25.074158501014416 +3.3415656377060907 21.057427868063524 +3.4028267413797075 24.64126742291323 +3.5401838140516992 22.135796283961923 +3.9475326034491984 37.78944893432588 +3.626137655493897 21.377629622715578 +4.019920275468374 36.14175474360307 +3.7963172788490613 19.967317165996324 +4.163561095087207 33.2468629860779 +3.4633858049120705 22.840455884301548 +3.7515277022325475 35.01982670502658 +3.53060290922092 22.222282802014146 +3.812972460130008 33.892599403649776 +3.664166877873724 21.05218518944945 +3.93441385744752 31.8261171788374 +3.3959385867751823 23.481233378618228 +3.594294557395917 32.618241269618515 +3.446543660655215 22.99851759739426 +3.642653276273755 31.86353183844659 +3.5473657109141166 22.071228412470557 +3.7385120562034166 30.437424200866122 +3.294449692457209 24.485459985069692 +3.381306408438773 29.05957164983131 +3.3198493552687784 24.22952048546074 +3.406437596821611 28.740779005035712 +3.370596839371626 23.727419517989897 +3.4565645994349232 28.117544195753574 +3.2799295409675446 24.633180340262122 +3.352952134227205 28.555053709212434 +3.3017082206334667 24.41200086560262 +3.3745589018540696 28.288211517252822 +3.3452327650164313 23.976844190872683 +3.417685744958581 27.764519641186478 +3.547821974077613 24.699912963805367 +4.013874989245117 41.26939579383717 +3.635020016548729 23.812470613943702 +4.082621533387855 39.32696402075077 +3.8070920085148012 22.171576814957557 +4.220116661748274 35.97126815458086 +3.4697200706357934 25.528148354047335 +3.801875173921213 38.45854419245037 +3.5380887432869033 24.801387833075367 +3.8620427430908046 37.1199629517378 +3.673533828918087 23.432687948651694 +3.9809870914563383 34.696700066496064 +3.40096203998483 26.28420457406495 +3.6310237207851688 36.00539918098016 +3.4525656989879425 25.714387642262825 +3.6792842073992205 35.10539571640187 +3.5551161946497833 24.624187727489105 +3.7747601332841327 33.41935352892785 +3.2971781360213805 27.47472883893429 +3.398793997093393 32.35339705753316 +3.323190536045166 27.17065282500284 +3.4243605439567384 31.972057390052054 +3.375084836486246 26.575423075174726 +3.4752713250549263 31.229091122785825 +3.282295708457743 27.650436879576738 +3.36782930552637 31.83465437296379 +3.3046144616875304 27.387407586262924 +3.389855396364403 31.51540398500446 +3.349160239438487 26.87089478386639 +3.4337553935375524 30.890614752183936 +3.5557915213387767 27.216105674129118 +4.085329233789193 44.7862947059312 +3.6442362467494807 26.192475320298165 +4.149348917880401 42.51480951562357 +3.8181568868287337 24.311258444313953 +4.279216002578427 38.65861160778006 +3.476363393153908 28.17548668062333 +3.8563659663706424 41.93855988339305 +3.545904319173826 27.33343716452539 +3.914662698791794 40.36223873562271 +3.683229656246209 25.755759012026232 +4.030166882722197 37.54622212661048 +3.406255216916015 29.054718139694113 +3.67085407695035 39.43061789566807 +3.458888855471709 28.39175969625551 +3.718746351485621 38.36707776649961 +3.563199103450531 27.128585713875136 +3.8133533597449003 36.39287514676418 +3.3000738288235274 30.445966983778607 +3.417749112939028 35.67049441970666 +3.3267301031997714 30.08983274169358 +3.44372873137072 35.21937606703246 +3.379822229052759 29.394269563099797 +3.4953706394630073 34.34364328560998 +3.284809534847917 30.652004192485897 +3.383949135538648 35.1346360675346 +3.307697260350026 30.343640605794324 +3.406386656967392 34.757044194891485 +3.3533134032413416 29.739287111624655 +3.451036740078834 34.020269579070956 +3.908348809084388 3.108865081786397 +4.087623979074932 19.972715929308997 +4.0129286034579845 3.0183247434276317 +4.191712242055722 19.29682948275467 +4.22230185029211 2.846535341595973 +4.397566842350057 18.01680837327316 +3.815747100231518 3.1917679584031857 +3.9238400483475946 16.269483849649273 +3.8967504801924164 3.1191063945494863 +4.005430495904181 15.879478376105006 +4.059474550624719 2.979055722018851 +4.168220355215863 15.118964935907846 +3.735169984455348 3.2660574002055056 +3.797854827319173 13.07889362940012 +3.7955571691975973 3.2101919912641126 +3.858755785091927 12.859310538669927 +3.917051109008274 3.101207430440057 +3.980892240525699 12.424723704605197 +3.6154275290534974 3.380289101370381 +3.6346046510064807 8.321271943882834 +3.6452142504186793 3.3514352316479816 +3.6645091427636416 8.255709453478648 +3.705093466793151 3.29431254847308 +3.724594579013718 8.124853533297568 +3.598456616238231 3.396860831333663 +3.6135225261188593 7.639181514464687 +3.62392687171158 3.3720258798386626 +3.6390737965129434 7.587731329460091 +3.675105561113093 3.322774066843759 +3.6903976376306282 7.48501203988716 +3.9107598038365285 6.192814589984866 +4.128129546180026 23.45108217305045 +4.015819836809277 6.006759994845302 +4.231456521404573 22.619800196702336 +4.226021516510759 5.654545164658551 +4.435476739841719 21.066349392940413 +3.8176911501937862 6.363442041173031 +3.953777489316252 19.725786415648475 +3.8991052047110113 6.213878826248435 +4.035354409872738 19.227864493738835 +4.062564553211628 5.926156902114098 +4.197834918000654 18.267127399855625 +3.7366733899889004 6.516563828643661 +3.819392081093939 16.525165452385796 +3.7973938910736336 6.401396929481101 +3.8805162939031814 16.231391817280652 +3.9195039182367633 6.177066951262556 +4.002944176093328 15.654695403687526 +3.616213073292278 6.75243421151873 +3.6447994811828646 11.775222733824421 +3.646185653070788 6.692806596947189 +3.674899026426295 11.676101145189532 +3.70642381938181 6.574858231198056 +3.7353474960114266 11.4790821067385 +3.599134034880724 6.7866954077041415 +3.622200580890714 11.0969037191217 +3.62476595905099 6.735354553693086 +3.64792343630427 11.016998637214206 +3.6762585782693087 6.6336101363388895 +3.6995720965022874 10.858025205468778 +3.9145067919674905 9.239480105544644 +4.173410781869977 26.996030161773476 +4.02029105534928 8.950728824417583 +4.275773302629496 25.985163731150834 +4.231717876748634 8.405907718746347 +4.4776131512331 24.121840713743435 +3.8207257208686296 9.504890765229623 +3.987263354769999 23.238228954042857 +3.902766751303129 9.272214017787578 +4.068834269687722 22.615914972863205 +4.067332702647032 8.825842726182112 +4.230989232566196 21.427548295183186 +3.739029169089512 9.743573174328816 +3.8434661428263137 20.016216208703522 +3.800263672267992 9.564009266531997 +3.904903708960635 19.63745139515347 +3.9233143222912528 9.21501394819729 +4.027767981832495 18.89943752500969 +3.6174509964671384 10.11219181060971 +3.6561634873725355 15.253682229702402 +3.6477143352385113 10.018895575016629 +3.686548303490367 15.116704713458162 +3.708511415931483 9.834567751926159 +3.747529518229783 14.845318901012057 +3.6002024294176396 10.165832534976305 +3.63186834938662 14.575919271757984 +3.626087725120883 10.085460486446639 +3.657844413680754 14.4640055458721 +3.67807048212982 9.926347927044375 +3.7099732776310224 14.241939470037575 +3.9193917628456068 12.241527710250839 +4.223684002771788 30.59740426691235 +4.026088449103636 11.841835305076502 +4.32470653174159 29.379547326051362 +4.23902543268306 11.090799033404062 +4.523751433601403 27.1667158324246 +3.8247013579559246 12.609954447986356 +4.024514834650609 26.799738847175167 +3.9075432490380613 12.286912424383763 +4.105981555840409 26.033978007510953 +4.073500295579001 11.669326039113024 +4.267605289374589 24.587183443155624 +3.7421288729304005 12.942150411557773 +3.8702606315354413 23.54706513260259 +3.8040274895379826 12.692157413910927 +3.9320407189432682 23.070645488700166 +3.928279695270797 12.207615954078797 +4.055367586136677 22.149218930784897 +3.6190904188513553 13.456843635000357 +3.668797981464017 18.754215795340134 +3.649735548637444 13.32638460343704 +3.6995390201787717 18.574248847855937 +3.7112626974989187 13.069015996388602 +3.7611830204980974 18.2187694102002 +3.601618645894879 13.531910432473461 +3.642613522264506 18.074132394798077 +3.6278373752469553 13.41945102278048 +3.668909017481626 17.925951289075684 +3.680462295161089 13.197101203693641 +3.7216417273045965 17.63264894178473 +3.925239234077175 15.194391507611073 +4.2790892266406235 34.24818080311649 +4.032988233461706 14.675080728462124 +4.3782260983981285 32.79323439239293 +4.247626327372278 13.70392396816517 +4.573619764523993 30.189348335330596 +3.8294852131362167 15.674652950106992 +4.065692595364379 30.40601929072115 +3.9132645794698195 15.253470373201996 +4.14685103550682 29.475501786877945 +4.080822159995202 14.451481613427902 +4.307559032234808 27.73695698288964 +3.7458759284938994 16.10900565691275 +3.8999155161984955 27.115034747789316 +3.8085616638534923 15.782017621064895 +3.9620068223478135 26.52667561797914 +3.934220528528495 15.150262357964511 +4.08570868442893 25.397456123412393 +3.6210861139360877 16.78449786720532 +3.68277927234978 22.275708820127605 +3.6521917094441188 16.61298886872555 +3.713929237086624 22.046933800277067 +3.7145943565612227 16.275219944059273 +3.7763287523070024 21.596431593957625 +3.603344351120787 16.88327565464486 +3.654501807724441 21.59059978408365 +3.629966189151337 16.735318955102304 +3.6811685065810447 21.401323179581624 +3.683363711090234 16.44322147305203 +3.7345990478505935 21.027618286617873 +3.9318951667531374 18.09527907976583 +4.339715826297882 37.94316430488797 +4.040795496120281 17.447628690023276 +4.436254051901326 36.21872151137393 +4.257249041795247 16.24281909662586 +4.626926375460785 33.181274310661394 +3.8349599702334713 18.696407692892418 +4.110923933980328 34.05452804552028 +3.919781290177452 18.169112430051822 +4.19146312075943 32.93586369044839 +4.089085677024361 17.169509707059497 +4.350702462633306 30.870307362718812 +3.7501848433368945 19.241912091493752 +3.932546154740056 30.718978819850214 +3.8137568911596937 18.83108357791831 +3.994856608626713 30.002886269570773 +3.94097934747859 18.04014971017948 +4.118736261023241 28.639570076749433 +3.6233978573027863 20.093794602904712 +3.6981689599643763 25.817958710391466 +3.6550316249119583 19.87708885733769 +3.729763041046811 25.53395288940476 +3.7184325653741848 19.451128857593204 +3.792975403573859 24.97648004599785 +3.605345468921928 20.2187307992604 +3.667585829950713 25.125176816235548 +3.632430839622556 20.03162713636777 +3.6946617716810883 24.889481963315927 +3.686712367648728 19.662860329432352 +3.748856186391246 24.42534907393265 +3.939225303186537 20.942607688783383 +4.405613822565727 41.67818211454025 +4.049342134857602 20.1581003719255 +4.498677424293217 39.649874004480395 +4.2676645069374075 18.706871393315748 +4.683373483295972 36.13617269740024 +3.8410225902436816 21.673604597866742 +4.160314422799155 37.743849779545364 +3.926962983847434 21.032243389966514 +4.239815050771396 36.411671320270706 +4.098108314316902 19.82216712557904 +4.396874857203324 33.98234404324404 +3.754980015010811 22.339375225135623 +3.9682535316078287 34.35881492567049 +3.819517005163479 21.83775701585827 +4.030629359322677 33.497725143422976 +3.9484190086207227 20.87570607240398 +4.154383590241057 31.872317921648484 +3.6259899517759853 23.38374483002503 +3.715019665426319 29.381437742744737 +3.6582099117022664 23.117528394646246 +3.7470760715507523 29.03521459815085 +3.722711912462859 22.595334636073705 +3.811124785009546 28.35791015474931 +3.6075916598128264 23.53739447555538 +3.6819100728909184 28.67831277159513 +3.6351928861062093 23.307335779489016 +3.709420126350104 28.390422053834573 +3.6904529257666594 22.85472163062361 +3.76441794274195 27.825072222818914 +3.9471132392037966 23.735644929015645 +4.4767982226879495 45.44952826690014 +4.058484015028822 22.80612358359776 +4.565354960610788 43.081385013224384 +4.278681064316986 21.096693619213227 +4.742665132026967 39.04922794847668 +3.8475828578480384 24.60531626586318 +4.213953890916272 41.47326249774689 +3.9346964673026523 23.84209915781836 +4.291886739351129 39.90029800586018 +4.107734387673601 22.409276869154148 +4.4459089158337655 37.06931203547723 +3.760194773117916 25.400427713010988 +4.0071302770356825 38.03520848800799 +3.8257576541865235 24.80108786789467 +4.069354499343646 37.01038376603931 +3.9564207152441555 23.656224038256532 +4.192577171756838 35.093359372670875 +3.628830590221926 26.65362572329798 +3.7333786287095903 32.96713448700653 +3.661686229986943 26.333483926766057 +3.7658989144799104 32.55115747373037 +3.7273745610895834 25.706893631190294 +3.830774870170644 31.740303488748822 +3.610055983206388 26.838616135220928 +3.6975139940147774 32.2509138384679 +3.6382181101226982 26.561690398742382 +3.7254702611653436 31.90461156014455 +3.694536332982547 26.01790893577716 +3.7812856419288456 31.226545077646133 +3.9554583667004457 26.4742658286521 +4.553249584019849 49.25356102042953 +4.06809806839755 25.392028696086335 +4.636120637985482 46.50841800117637 +4.290139451363941 23.413709183921608 +4.804511679300002 41.91671176973302 +3.854562008951723 27.49111426315316 +4.271919078799495 45.24241219828861 +3.9428837752726325 26.59851068559316 +4.347643616498462 43.39955759081595 +4.117831768792764 24.931397870146764 +4.4976342283594395 40.12823579736331 +3.7657704395272957 28.424490398515005 +4.049264278575017 41.74934232566381 +3.8324050325350263 27.720598524700048 +4.111054708754402 40.540540394670984 +3.96488189546363 26.38161268298664 +4.233239507758765 38.300962561413066 +3.6318915010755894 29.9029146189136 +3.7532901286594202 36.57644351445416 +3.6654247421260955 29.52438054999584 +3.786259324227151 36.082620705052776 +3.7323694757641785 28.785205208773593 +3.8519216857244345 35.12366506556005 +3.6127143918163 30.12191513637958 +3.7144341243432506 35.84424751001923 +3.6414760611887926 29.794150335316054 +3.742836198607223 35.43288123483258 +3.698919196172059 29.151822429772988 +3.799458819207397 34.629910715120936 +3.964173910165963 29.158782310815166 +4.634912241956944 53.08640155923203 +4.078079672274095 27.916637896735867 +4.710785906849352 49.926373655896874 +4.301908009413771 25.6598672953671 +4.868632724008338 44.73570525331599 +3.8618913644070556 30.33093745996967 +4.334274216497257 49.0510601109722 +3.9514402891131195 29.30173820267394 +4.407037872022774 46.9074695129167 +4.128288782280359 27.389596613619133 +4.551879167278277 43.15667664232815 +3.7716553696256327 31.41127422814225 +4.094740749875088 45.502739736952094 +3.8393946328149213 30.59616071209191 +4.155747514128309 44.08817012791144 +3.973714176909244 29.05222348457007 +4.276290577049268 41.49379575186964 +3.6351474801160117 33.131240299790946 +3.774797184805354 40.21108504841036 +3.6693936783488605 32.68983201376275 +3.8081837359252235 39.630750021743644 +3.7376515961152053 31.82992630594246 +3.8745605030803456 38.508305733815526 +3.6155454238517963 33.38694157407758 +3.732705554083098 39.45987351278162 +3.644939693514959 33.004337533159266 +3.7615406302356313 38.97634310948755 +3.703563085965852 32.256085873455525 +3.818936305619468 38.03559613615616 +4.296625019079373 3.293271335258404 +4.5612575105855635 26.30768999722597 +4.42855651399023 3.182216821934386 +4.68990929341998 25.188990530282908 +4.6917802622904095 2.9741783358302945 +4.942627549732541 23.134561042909784 +4.179646490089138 3.395681002962341 +4.335731020465086 21.193727856587167 +4.281979956888662 3.305887028147534 +4.438335353982103 20.570791296192223 +4.487191232717542 3.134335876875431 +4.642079116798669 19.37339959083259 +4.077801573755593 3.487957411912323 +4.166237752607801 16.819016601529768 +4.1541299673135414 3.4185241198787164 +4.243237608760101 16.480030910255397 +4.307611802603276 3.28384516706776 +4.397337088132671 15.812846073344028 +3.9264954869184865 3.6306166287805826 +3.952207414313577 10.337519133403795 +3.9641193061800575 3.594505282722959 +3.990013700728414 10.242429516183005 +4.039785989204787 3.523164301453667 +4.065991439131656 10.05266041742153 +3.905066242342837 3.6513773324305787 +3.9250512426296207 9.410498795319468 +3.9372296199345453 3.6202701878508803 +3.9573406431692937 9.336747021211977 +4.001887364060823 3.5586839731410285 +4.022219793479401 9.189488346364381 +4.299180055690194 6.559520240248411 +4.609782254575881 30.077486746226203 +4.43159949492609 6.332225339586545 +4.736642892261911 28.748065083223125 +4.695644594492346 5.907356566833625 +4.985734162906847 26.341032875851223 +4.181719311164899 6.769442878918336 +4.371244138568331 24.931466268641948 +4.284477275568951 6.585363374436852 +4.473480267277712 24.16573839327129 +4.490433658379738 6.234335672772711 +4.676156260153624 22.710414458071707 +4.079412948296973 6.958865919086213 +4.191558704625648 20.53883839076312 +4.156090937238276 6.8163103812072 +4.268688892220993 20.103842825771167 +4.310209655903305 6.540213866679509 +4.422834250834291 19.25517455898017 +3.9273436443210983 7.252238862953807 +3.9640557386327093 14.060809446094892 +3.9651662834983488 7.177915964294165 +4.00206810656324 13.923399101422934 +4.041214583739266 7.031207509396402 +4.078419455808144 13.650453765342895 +3.9057983756770014 7.294986741352777 +3.9351230583392263 13.138027041566403 +3.9381351360130448 7.230939959368254 +3.967596350015263 13.028483561746569 +4.003127829844909 7.104231371671823 +4.032817330522436 12.810634731155238 +4.303160058685162 9.785129864310884 +4.663561763113921 33.921619680609446 +4.43631487868625 9.434098582472322 +4.7882389345271985 32.35154051028514 +4.7015712990579175 8.780023843880393 +5.0331315136221875 29.55037588172244 +4.184963191098231 10.110055990898282 +4.410662164179316 28.733422637244328 +4.2883696350426685 9.825092826822676 +4.5124587992570895 27.804554143057487 +4.495446488044076 9.283163026964132 +4.713923648874847 26.05909391054723 +4.081944952554306 10.403866670097585 +4.219655360996911 24.310487242631833 +4.1591628995868035 10.182696446480877 +4.296981786107067 23.766341167662866 +4.314254591876748 9.755282020740646 +4.451268589845716 22.713463577925616 +3.928684427547246 10.860095400271206 +3.977166280486536 17.812819381066333 +3.966818929493996 10.744376678628045 +4.015478860063378 17.62803422256553 +4.043462805164146 10.516231308022208 +4.09237883160462 17.2623449518536 +3.9069567364626043 10.926695578632398 +3.9462609631667265 16.89055180090038 +3.9395659809228416 10.826923926445605 +3.9790044006708594 16.741060475756836 +4.005082950467711 10.629744722992353 +4.044729966089375 16.444677953261948 +4.308359167602159 12.96193323759639 +4.722762258387981 37.82718196876783 +4.442439251377028 12.478567042838407 +4.844668976532122 35.98326299550995 +4.709183393605422 11.581513360199862 +5.084519784150298 32.74394274200884 +4.189222716668599 13.410608320584435 +4.4541903076461065 32.59082204143865 +4.293457535427924 13.017050363258042 +4.555353372702086 31.475597279668516 +4.501940793562052 12.271153128641673 +4.755257063864418 29.404420865819958 +4.08528496199541 13.817385160390144 +4.250712578165823 28.12788474000985 +4.1632012790888515 13.511082652449604 +4.328231177684741 27.45932019300212 +4.31953597090209 12.920778862875919 +4.482622568191037 26.176384053113114 +3.9304652374976032 14.451086259247003 +3.9916450530083654 21.590609023905532 +3.969010198094315 14.290112850342625 +4.030330898334061 21.35243365446402 +4.046433557958165 13.973224939243893 +4.107911183354786 20.882707000719847 +3.9084967587189126 14.543806846088152 +3.9585570144994673 20.665542064890833 +3.9414654816381334 14.404925427230907 +3.99164015237632 20.47113700368933 +4.007670834617597 14.130812903828792 +4.057998638327622 20.08679420442106 +4.314593289311213 16.08479865907844 +4.787465986317709 41.7844708431645 +4.449738445558055 15.460066057018551 +4.9058284539343475 39.631006707538816 +4.718150918141123 14.306038276746019 +5.139560392624135 35.90850467988292 +4.194358408782314 16.666588263149766 +4.501974165566619 36.497765470411906 +4.299562477274956 16.15616881545891 +4.602187290916054 35.17050592603495 +4.509660416184819 15.192624441166839 +4.799987867251818 32.73568262134517 +4.089331675366897 17.195664769050456 +4.284870414459436 31.98737291341701 +4.168076262955337 16.797126614294193 +4.362507379081623 31.17726951000329 +4.325865504639117 16.031526579584913 +4.516839858919601 29.63599342253976 +3.9326388713011657 18.023028182534322 +4.007572657336246 25.392649781415052 +3.9716798826241693 17.81249450724931 +4.046684651799673 25.094273285217596 +4.050039519296111 17.398772966547458 +4.125035844333549 24.50784381317646 +3.910378481007197 18.14440959093246 +3.9720809142520923 24.4617018907903 +3.943782760942437 17.962629741241745 +4.005557470777624 24.21675577093361 +4.010817866631688 17.604395343632152 +4.072644756059316 23.73385404426318 +4.321699598469063 19.150560751320775 +4.857695093974208 45.78562578187266 +4.458007140206941 18.375413635669645 +4.971562617170429 43.284986993282764 +4.728190657278289 16.950889529102664 +5.197902856582163 39.03439410813861 +4.200246074169866 19.875045593280998 +4.5541217472395115 40.450148872229896 +4.306526439443518 19.23929840243234 +4.652946405635797 38.88297177512342 +4.518381834098764 18.0444504040082 +4.84792495273516 36.04495343457679 +4.093994615263853 20.536137246103173 +4.322242688918609 35.88689592573789 +4.173672121133249 20.03795502085618 +4.399853989699975 34.91642220678195 +4.3330767736166 19.08435005085733 +4.553842675562211 33.08653491827151 +3.9351629809011572 21.574334560096187 +4.025014548994394 29.218392274029743 +3.9747739894760534 21.309637491441173 +4.064586026755489 28.852298372869424 +4.054202619181402 20.79050319574479 +4.143759423919959 28.135336096057976 +3.9125660741608184 21.727104587064968 +3.9868888958817577 28.278595523905857 +3.946472178536453 21.498361487455167 +4.020797389607336 27.976902606531315 +4.014458185475754 21.04834783202135 +4.088678501932496 27.38385474758361 +4.329535244712697 22.157408327086788 +4.933422152642755 49.82379897682418 +4.467067246280898 21.223047987618894 +5.04168007938442 46.93700490653154 +4.739062727332439 19.515382841231915 +5.259198795388077 42.11442973709318 +4.206775850808865 23.034115832672793 +4.610714301750667 44.44499604445461 +4.31421062830084 22.264611537231826 +4.707590076121611 42.608011804026255 +4.527912114446981 20.825228789349424 +4.898866198670978 39.326212283738975 +4.099193167997394 23.837061748985416 +4.362926884422728 39.82550132689772 +4.179886304053361 23.231717801394495 +4.44029728259132 38.6741838696082 +4.341023899996514 22.077452027125233 +4.593540837086557 36.52373496110398 +3.9379996819794485 25.103839329770985 +4.044026772252479 33.06801409125024 +3.9782442636156374 24.780182615429407 +4.084071943511152 32.62602759150899 +4.058853152509948 24.146770517112582 +4.16408103017694 31.763662153383848 +3.91502737896167 25.290850909814093 +4.003028688518715 32.11642945155017 +3.949492913450399 25.010895741919803 +4.037392922153376 31.751250861322422 +4.018532866176226 24.461151128736695 +4.106103388073143 31.0355920070504 +4.3379756718174205 25.10449016694941 +5.014574421940767 53.89260211386381 +4.476765341739159 24.00253454078868 +5.115960767150345 50.579908803984864 +4.7505658054290425 22.00018229644259 +5.323109897501271 45.143233784614196 +4.21385090755111 26.14271433719897 +4.671811614908573 48.479997040453185 +4.322493864906903 25.23121967869293 +4.766057041030193 46.34148728996411 +4.538085995994649 23.534746686196883 +4.952604993078196 42.57478016051697 +4.104855746011179 27.097298976797802 +4.407009871636436 43.80299976330104 +4.186628237413981 26.37730192129916 +4.483851509566779 42.448751129838925 +4.349579814887432 25.010010619380825 +4.635836854282417 39.944346171474635 +3.941114960929954 28.610681302073804 +4.064659573078912 36.942249885908225 +3.9820474914318176 28.223151564744022 +4.105173746818253 36.41555444634886 +4.063929037015564 27.46646018890997 +4.185995360180586 35.39194636975163 +3.917733624046415 28.834872219165515 +4.020542655345416 35.97590562392116 +3.9528083555173827 28.49933437580822 +4.0553720450507935 35.53998990269578 +4.022989296948752 27.841743433160314 +4.124918976920377 34.68844201752419 +4.346912691614069 27.991645849477145 +5.101035156353174 57.98572516983114 +4.486969896104842 26.714230173922473 +5.194161081301802 54.20725009880993 +4.762532197616514 24.40684701876963 +5.389312398800658 48.11677322918954 +4.221386221529217 29.20032821285695 +4.737454119353828 52.55316346762366 +4.331270741817563 28.13891166583226 +4.8282684813969325 50.079770902397954 +4.548762709735426 26.173616700147527 +5.008934140149667 45.78694401186605 +4.1109189228863565 30.31615654535758 +4.454571223219718 47.81971374996585 +4.193818209256498 29.4741364746727 +4.530521915317156 46.23883809144059 +4.358634268246252 27.881904517917704 +4.6806288973386545 43.3458362015043 +3.944478367104196 32.09423078196513 +4.086959834246699 40.84227173018523 +3.986145010778272 31.637853319908942 +4.127919448551489 40.22140740023779 +4.069375114290699 30.74885319462562 +4.20949463541207 39.019783580287566 +3.9206589389697264 32.358588638434746 +4.039469917112389 39.85811820246798 +3.956385686979039 31.963026410808308 +4.074759677981428 39.343704696199126 +4.027780609774816 31.189405327614836 +4.145122610398154 38.342209320491946 +4.356252575254212 30.819214872336946 +5.192643394105068 62.09667738489361 +4.497568732097182 29.35904869432017 +5.276017996669405 57.81306697981264 +4.7748230334671575 26.737518021418918 +5.457499838983739 51.03204528887613 +4.229307268200338 32.206868446478566 +4.80766309478213 56.662564351701874 +4.340449796027706 30.9879680938694 +4.894129680472645 53.819512387916156 +4.559822934380409 28.743023160206185 +5.067648180045466 48.95969828825686 +4.1173265330468665 33.49327877227826 +4.505684980656787 51.87628301455961 +4.201386170660928 32.52205436463562 +4.580306275275861 50.04347459044055 +4.36809185855169 30.693518190115327 +4.727812498396633 46.72616793971989 +3.9480625661428976 35.55403484589976 +4.110972790235917 44.76960147933402 +3.990502313387137 35.02381686650323 +4.15233525144288 44.0444468052939 +4.075142384423624 33.99353002072068 +4.234569832812026 42.64711131314697 +3.923780076301686 35.86157297697184 +4.05984786075657 43.76447840832543 +3.9601955626878804 35.40151070510793 +4.095579046221573 43.16328723332317 +4.03286502972696 34.503677854130736 +4.166710533066029 41.997015827369815 +4.673732119629226 3.4530151016608976 +5.049539232584255 33.63696183559573 +4.834885143362421 3.3210978099690216 +5.201039426506809 31.869249867019203 +5.155106239550652 3.077303013093649 +5.497447059913667 28.749536642281427 +4.530588937093372 3.5755926575018986 +4.747999032893874 26.849499741640017 +4.655822458688125 3.4680697766641715 +4.872375251253572 25.89649423630904 +4.90638033805947 3.2645823966737053 +5.118011320707646 24.099713332197293 +4.405850288382115 3.6866976221728076 +4.526521989505727 21.081670736849837 +4.499343219737954 3.6030428161809263 +4.620743925972105 20.579489948141887 +4.687165576693484 3.441775367434582 +4.8087762917353585 19.59878178109411 +4.22051994468607 3.859462957416747 +4.254081967152926 12.598895374101671 +4.266592127790016 3.815631800808383 +4.300419595203669 12.465866713351463 +4.3592789051292415 3.729231591712585 +4.393544872247024 12.200480476287487 +4.194285862114022 3.8846883755461246 +4.220129837539757 11.389440356778458 +4.233662952294935 3.8468985200334034 +4.259691654718055 11.287344915552703 +4.312852354248535 3.7722153500056255 +4.33919847784346 11.083501373077327 +4.676408386942586 6.8771510337908115 +5.1065846651255935 37.68109700751374 +4.838051135876946 6.607991808288936 +5.254731449457154 35.63587800013423 +5.159078187516001 6.111583110064739 +5.5451680777171415 32.079219143809716 +4.532773375456567 7.127625550816569 +4.789402597378159 30.85350486661281 +4.658440260221136 6.907894034327297 +4.912854089538677 29.716151003973813 +4.909744130963029 6.492801713029063 +5.156349172261012 27.59720805654695 +4.407557426327994 7.354978211100013 +4.555777070795552 25.05837964682093 +4.501412556818073 7.183767575468734 +4.649972240173506 24.43503528541024 +4.689885144836241 6.854202008666799 +4.837676742587276 23.22894509036776 +4.221425229584399 7.7091378525562115 +4.267605344555467 16.57223559253033 +4.26770762015223 7.619211927939285 +4.314155059260014 16.387293819697263 +4.3607953248323845 7.442098158722161 +4.40765170772895 16.02023596920383 +4.195068089272858 7.76091467989913 +4.231609029931678 15.36725226667 +4.234628969261465 7.683354884162702 +4.271364011713206 15.221378576154843 +4.31417156438044 7.530187066787409 +4.351221774344455 14.931420266058215 +4.680584554387812 10.2576811196785 +5.169313880984121 41.8052222196605 +4.842964480922546 9.84358425234943 +5.31348697104094 39.446842098734514 +5.165176256673213 9.0821875169875 +5.597168621220117 35.4080675654123 +4.536198789762039 10.643872535680485 +4.835059049299893 34.92908048872113 +4.6625276931014366 10.305037592669377 +4.957410486584925 33.58280005763233 +4.914951792845729 9.66664228567783 +5.198475319171212 31.10497016405907 +4.410245833231266 10.995140635213223 +4.5880438936040395 29.093702751696842 +4.504660920970115 10.730548821832834 +4.682243439437657 28.33348556992944 +4.694126935499567 10.222338446662862 +4.86965148768014 26.875696403972317 +4.222859927178192 11.543755349117676 +4.282480901058191 20.578471095289192 +4.269472727419045 11.404287260245988 +4.329339073350974 20.335763799646625 +4.363187213087692 11.129931821251905 +4.423383985546395 19.85605561785317 +4.196308876696229 11.62410955224816 +4.24422776138501 19.373743715230518 +4.236159229967505 11.5037561948792 +4.2842655710630355 19.179306065394048 +4.316255713686457 11.266329583027375 +4.36464185381003 18.794151590794222 +4.686048172301919 13.58569319349137 +5.237819636646127 45.99340115241294 +4.849353964256772 13.017844057126656 +5.377192921594614 43.2833131503818 +5.17301484524348 11.977753985485082 +5.653081002995299 38.71581331047192 +4.540704622250692 14.116733990599815 +4.885152779630951 39.06564920550227 +4.66787883489252 13.65073496815126 +5.00608969212658 37.482813492352776 +4.921706260440702 12.775683282508089 +5.244217781250487 34.60623746879117 +4.413799210909703 14.60101572826436 +4.623505051160422 33.18045427701426 +4.508938971875946 14.23611846184816 +4.717660695328199 32.265286068878744 +4.699673600393109 13.537165590450565 +4.9046587801205765 30.52621354784599 +4.224769935711618 15.359852080836294 +4.298818372556628 24.614175245359558 +4.271818386261256 15.166650495484022 +4.346058447108332 24.306767675395047 +4.366354363386839 14.787173923686337 +4.440781549984434 23.701516236912138 +4.197962427748194 15.4712558956445 +4.258081651190338 23.405965487750795 +4.238195415554204 15.304421776982787 +4.2984739381820765 23.157266662594978 +4.319020370804453 14.97573761852897 +4.379499241518605 22.666184210289753 +4.6926078868303875 16.855547131121103 +5.312103182982508 50.23298573651199 +4.856976951804374 16.124711479240005 +5.445661407084718 47.130706349239915 +5.182254959975293 14.792089555008205 +5.712509824886578 41.98804824524939 +4.546145669736183 17.541209895661122 +4.939805173453007 43.25558448167982 +4.674308094782732 16.939411180516004 +5.058876129091678 41.40601701366585 +4.929742576308229 15.8137625509991 +5.293363524975639 38.08887555547149 +4.418112119519092 18.16841003587037 +4.662297194349358 37.31396343012832 +4.514111554404675 17.69565525871503 +4.756281423737992 36.22370935050143 +4.706329469636074 16.792997058491352 +4.94261822969022 34.17128343243087 +4.227106314709713 19.154965213977786 +4.316701785474545 28.677412950228263 +4.274682080656199 18.90334250276618 +4.364375084813331 28.29746673497208 +4.370205958373554 18.410001596355702 +4.459861470709673 27.552249387798412 +4.199987353307907 19.30019494368338 +4.273243687538506 27.462276366906696 +4.240684752009647 19.08274239890773 +4.3140448760403185 27.15286762531637 +4.3223890113503325 18.65499891688232 +4.395814484093129 26.543812191959127 +4.7000934453070915 20.06374136377688 +5.392097159533051 54.51322502410207 +4.865619644442993 19.16070180576205 +5.518655878685656 50.977165977739226 +5.192604603859601 17.522282544446057 +5.775057893133097 45.214290040942856 +4.552391782708476 20.91400694030914 +4.999095492931612 47.493078920003015 +4.681650183272974 20.167577971960224 +5.11571449516163 45.34442101508327 +4.938828440527271 18.777470845390337 +5.345680167637851 41.543804818653534 +4.42308972454572 21.694433869874416 +4.704529058808039 41.491215026417905 +4.5200573570822975 21.105945388758947 +4.798134710036161 40.20386090641164 +4.713920580816752 19.9863234757471 +4.983427914007613 37.80405260454898 +4.229824841331023 22.927289145653678 +4.336199667559668 32.76728666792146 +4.278007337735609 22.612225010169553 +4.384335910427735 32.30615859727246 +4.374660167673016 21.995737999451208 +4.4806275523485155 31.40525330001218 +4.202346278385919 23.109331827978824 +4.289773089250127 31.54194932513142 +4.243579554548501 22.836812939045785 +4.331020935539747 31.164720955678913 +4.326292661590831 22.30168691300246 +4.413596437308512 30.424536974395334 +4.708354715891608 23.208258410767584 +5.477676375977656 58.824442628826276 +4.875095770571782 22.124093102520476 +5.5959058590203625 54.81270695260358 +5.203815778570509 20.167590895300435 +5.840339676519533 48.38685013059463 +4.559327158240996 24.233028603865453 +5.063070951891199 51.77344684539552 +4.6897591649545864 23.33319720758961 +5.176520691119292 49.29147288257197 +4.9487625730929565 21.66526886039081 +5.400927569348124 44.96408325205119 +4.428646972798589 25.177113336995323 +4.750290981202875 45.71032301364301 +4.52666824415266 24.464904229808603 +4.843230476531731 44.20208224414831 +4.722293675102667 23.11514464133431 +5.026973497535074 41.41929603992597 +4.232885687009276 26.67548554862983 +4.3573707706148666 36.88367083181346 +4.2817433548602795 26.291742688953278 +4.405978393935513 36.331965286571 +4.379643479146347 25.54251204122984 +4.5030755825460025 35.2584935519493 +4.205005431733529 26.897469917476627 +4.307720270206512 35.644941932693925 +4.246836888131049 26.56522869366105 +4.349436272832188 35.192173768067676 +4.330669220170007 25.914068543138026 +4.432846845841756 34.30672085924883 +4.717260214965987 26.2881398659431 +5.568663389379966 63.157517020111946 +4.885244305123327 25.01439695002987 +5.677116358690629 58.62868017923167 +5.215679901956297 22.72872284917528 +5.90798871063697 51.50010085028639 +4.566849205112066 27.497044165398695 +5.131751509930848 56.09264583240812 +4.698507051887562 26.435267634440947 +5.241187942492418 53.241568351151 +4.959372022416832 24.476913841373506 +5.4588645801345965 48.344317239130966 +4.434707931372787 28.615145728723594 +4.799660307385905 49.970168997971086 +4.5338482015064425 27.77126641516701 +4.891564668020985 48.2155524691351 +4.731314673718275 26.17853570547558 +5.073133467462567 45.01294086553337 +4.2362528729676185 30.398557811888697 +4.38026767853874 41.02703181675265 +4.285844347084193 29.940766631736388 +4.429333963019667 40.374622845799564 +4.385090037701072 29.04904520904644 +4.527196446821204 39.11063676846229 +4.207934412607682 30.663709213353673 +4.327129986198721 39.77174087005314 +4.250418006335939 30.26695117642434 +4.369319643580019 39.23512647886992 +4.335462902409953 29.490922160103302 +4.453563094652249 38.18935597108936 +4.726695304678029 29.30319379902419 +5.664831988234559 67.50355022938776 +4.895926769693169 27.831994836340616 +5.761974755984846 62.417436653703284 +5.228022958262762 25.20735196094682 +5.977661423746748 54.5499721593961 +4.574867427496815 30.705462094404048 +5.205131703832796 60.44692430137483 +4.707782079431145 29.473540335115043 +5.309590326039908 57.18971789233107 +4.970509024823244 27.213066288542105 +5.519253218633604 51.68026447519619 +4.4412049190709695 32.00773047042714 +4.852704393388253 54.27013377455462 +4.541512325474122 31.024373574579297 +4.943122213360518 52.24200297935672 +4.74086681248618 29.176348564451853 +5.121782287298018 48.581740738030206 +4.239893996141359 34.09577073743648 +4.404939239742134 45.19830010018509 +4.290269122273011 33.55849229163019 +4.454430248168218 44.43433217022588 +4.390941009365836 32.51450434801963 +4.552978096182867 42.96086391752958 +4.211105721784263 34.40737167842729 +4.348043470618732 43.92325194008115 +4.254287973731771 33.94122092313502 +4.3906963956539276 43.293904326848036 +4.340623726406517 33.031412231725234 +4.475739969413595 42.07190211487484 +4.736560340531015 32.25378555352571 +5.765910009367956 71.85367399836173 +4.907024801206264 30.577882914188503 +5.850156540732119 66.17211647108549 +5.2407006763920325 27.60578030515503 +6.049039154325536 57.53359735098646 +4.583302182635626 33.85816745936055 +5.283180832439727 64.83255890287252 +4.7174869407563325 32.44831515644625 +5.381585085175357 61.131318649324484 +4.9820481509742285 29.875015047983464 +5.581861184939495 54.968556284497176 +4.448077771227765 35.35444794049514 +4.909482100991036 58.6098888956438 +4.549585690152567 34.22402215065331 +4.997878572523095 56.27950762916024 +4.75084872556279 32.10899845881136 +5.172792327390342 52.12304628262677 +4.2437798064524905 37.76659029035518 +4.431432282208308 49.3987756669704 +4.29498070866978 37.144365155246966 +4.4812926060930245 48.51164815260367 +4.397143846941279 35.938396009696895 +4.580406809476543 46.80873390177448 +4.214494504044055 38.12795302032991 +4.3704999506702285 48.10071874569099 +4.258415375415756 37.58749450062663 +4.413589844139106 47.369162181210584 +4.346106910126444 36.53499894558234 +4.499370807200539 45.954167872788446 +5.042612481753301 3.5923887484119437 +5.55966209713504 41.98678809203002 +5.234624259239879 3.439529496231852 +5.7296436030247175 39.30092524941374 +5.614441339985734 3.161001354836032 +6.063445018273508 34.78421616768239 +4.871691120230137 3.7355767879381143 +5.165862159260733 33.259162082989036 +5.021243871616503 3.6099183330222666 +5.311960616833712 31.850525118999116 +5.319637425670498 3.374479799495841 +5.598974896447084 29.259368000614007 +4.7225605844442615 3.866185095474462 +4.882832830848435 25.878372184061078 +4.834347674769884 3.767777951866454 +4.995175007001321 25.158368777618932 +5.0586368488050715 3.5793121224068503 +5.218588852566084 23.766671144287958 +4.500903517105464 4.070531640762237 +4.543760267488788 15.108930743163958 +4.555998498718202 4.0185642280187395 +4.59922191819947 14.92813578178452 +4.666859354733204 3.9163654346547263 +4.710666168315661 14.56770826732679 +4.469538649630857 4.100472620261524 +4.5022692007952525 13.57927755603757 +4.516619086412296 4.055627230001664 +4.549607688308489 13.441846675043193 +4.6113279637816085 3.967166727086067 +4.644748853509312 13.167516594753156 +5.045391113008557 7.15425567494232 +5.625606133148065 46.286473772789236 +5.237890046020143 6.8431327837493034 +5.7900481137673605 43.24565523187864 +5.618492985261896 6.277323998105751 +6.1150889495789 38.20742435652209 +4.873972859495433 7.446112303758144 +5.213479663664344 37.51702836133804 +5.023963832922081 7.1899635778978865 +5.357837500478731 35.87504875380965 +5.323097814545246 6.710866803247254 +5.641297890626531 32.892005961689264 +4.7243532421175525 7.712697052009535 +4.9161862114435655 30.099034784651373 +4.836512041586625 7.5118047744840934 +5.028262383330979 29.228982983862704 +5.061458862756775 7.127622435137217 +5.25082468218436 27.563488632860214 +4.501861359460369 8.130530179667721 +4.558983194566306 19.316794973931437 +4.557176610598458 8.024183005830732 +4.614657018037813 19.073643977547178 +4.668454851581532 7.815217053500032 +4.726455612459774 18.591570997689775 +4.470367129328447 8.191829672565088 +4.515171502204685 17.79158345628619 +4.517640661094812 8.100023295097559 +4.562708959049257 17.601734029313924 +4.612718632706399 7.919061636868084 +4.65820123198007 17.224592027693852 +5.04973294268895 10.669885475941866 +5.697577438689202 50.66897713339635 +5.24296399821203 10.192695602956839 +5.855616108816578 47.23260345628276 +5.624717954290957 9.327376587002481 +6.170947241640462 41.62592195379034 +4.877556536284087 11.118473586346305 +5.265684063380468 41.85287260708051 +5.028216698104986 10.724718906524023 +5.407996648436072 39.94849649711203 +5.328460558274293 9.990133494883656 +5.687459611835674 36.53286762059353 +4.7271813634202715 11.529054945644626 +4.95278516806364 34.38478973034262 +4.839915183706477 11.219574723398326 +5.064580313333964 33.34617929876421 +5.065866372153742 10.628996156005364 +5.286245136211107 31.37697711496819 +4.503382509686748 12.174254474033969 +4.575646129947554 23.561686805223545 +4.559044546660886 12.009840050320681 +4.631629132760244 23.24948396201041 +4.670976145770175 11.687170151176495 +4.743957630725897 22.633326319716883 +4.471684065693054 12.269086833403561 +4.529284698855879 22.03622418791163 +4.5192622681720325 12.127076340187763 +4.57711305546527 21.78851071900912 +4.614919918861467 11.847454365033109 +4.673126495376003 21.298301633309855 +5.055419963392195 14.129698964415267 +5.775570195938042 55.11508419883419 +5.249568551424798 13.477522991913428 +5.926143415484363 51.240497207720544 +5.632724253413689 12.29922395956546 +6.230595709545263 45.01826196733309 +4.882277151134824 14.744431772329792 +5.322629100678156 46.254185097440526 +5.0337911073062935 14.204754161534364 +5.462438721654581 44.055271940555485 +5.335422082263237 13.20120802476918 +5.737241187169714 40.163689383245504 +4.7309254262394465 15.308535532462681 +4.992806560279497 38.7273186837646 +4.844403583055944 14.883205153851387 +5.104216538716912 37.4990602304493 +5.071636384413329 14.073745810046818 +5.324782297608378 35.19292879948919 +4.505411523568309 16.19789436167802 +4.5938617339474686 27.839708336693334 +4.561531454958039 15.970917379616674 +4.650226090836833 27.450557677674656 +4.674320297781258 15.526152266252115 +4.763209439893795 26.685787545436302 +4.473442568613942 16.328920600694623 +4.544707321484448 26.309846928071586 +4.521424118944219 16.132739767021935 +4.59289915585857 25.99781337729891 +4.617845118083539 15.746973578567959 +4.6895640782368515 25.38247428057733 +5.062254677066698 17.527599396919705 +5.859481555947673 59.609018987265124 +5.257454209429687 16.691122744527885 +6.001356657066176 55.25268055239741 +5.642166153156423 15.186338255491854 +6.293594668740433 48.3692438190014 +4.8879845186746325 18.318537957269683 +5.3844018635236655 50.71146851907804 +5.040495447542853 17.624036934912688 +5.521102820268699 48.18341409342723 +5.343710396792351 16.337513557624508 +5.790387578648017 43.77114532835466 +4.735476321869133 19.046536273656393 +5.036380105957116 43.12089576852673 +4.849837410978275 18.497432605225534 +5.147212063549512 41.679676043188984 +5.078566998772577 17.455729286810584 +5.366330435204318 39.00095656401291 +4.507897910088897 20.19871858256391 +4.613716735183193 32.14852449451442 +4.564572754724435 19.90414162027304 +4.6705105047953746 31.67352065789145 +4.67839333005802 19.327956567903176 +4.784225107963174 30.743934557996987 +4.4755999753639255 20.368933486284455 +4.561515066678203 30.610472185504737 +4.5240717442970055 20.114122051920535 +4.610124323803158 30.22682258702704 +4.621415135171362 19.61385434437507 +4.707533096210304 29.472844681211352 +5.070060524365141 20.859782597529385 +5.949134807340454 64.13705547957447 +5.266400202403102 19.829745274008108 +6.080939880415307 59.255575395341296 +5.6527451137730385 17.985640978904673 +6.359513341077132 51.66790404630075 +4.894543290789729 21.8371824637159 +5.451042610671938 55.21706533824221 +5.048158233843317 20.97877336039872 +5.583887201944051 52.32329550429155 +5.353086173860762 19.395396894448307 +5.8466288982624794 47.345223275864875 +4.740735332830583 22.73986518795917 +5.083605829168903 47.56149041765331 +4.856090460360498 22.058727673194646 +5.193578144665138 45.88199362523777 +5.086477858508346 20.771137030030644 +5.410762872848514 42.79320219753345 +4.510795762856551 24.174710037604264 +4.635282070291262 36.48688900601826 +4.568109744450976 23.80713059234159 +4.692529617061295 35.916224184539644 +4.683110099495511 23.089617590846686 +4.807005012682314 34.804196398745084 +4.478117525901765 24.38734104046393 +4.579769615790187 34.93708246984647 +4.527155623658013 24.069096584294222 +4.628832093403087 34.47377865899272 +4.625558198100686 23.445400858414402 +4.727040585991371 33.566428027802004 +5.0786811815916115 24.124045262395093 +6.044291854330868 68.68673139327908 +5.2762135828424785 22.891528879285126 +6.164550512105538 63.237815562013616 +5.664207079695767 20.696343150055508 +6.427942179006728 54.906326753118634 +4.901832470479976 25.298054223115784 +5.522554282278688 59.76444077256277 +5.056627434023422 24.266735009236736 +5.650660386507368 56.46686294432384 +5.36334143240669 22.373200767379398 +5.905691954522837 50.87827331615739 +4.746613455427376 26.386328320178542 +5.134563178694721 52.04621671549102 +4.863049682747277 25.56478766938752 +5.243305259612673 50.10127829910979 +5.095209469491383 24.017786531758702 +5.4579411584494935 46.563580833988624 +4.514063506908594 28.12436317794095 +4.658618578089628 40.85436671541857 +4.572089325883425 27.67813987456314 +4.7163208013137865 40.17738916564327 +4.688393666622191 26.80904929881932 +4.831541077955187 38.86403324293586 +4.480959999962153 28.382794931724018 +4.599523590300031 39.28938229458405 +4.53063092188312 27.99608446849267 +4.649057277138384 38.73769943929649 +4.630209347299749 27.23967509006978 +4.748086103451089 37.66115766468291 +5.087979260218067 27.319332603357136 +6.144661579837696 73.24638553595408 +5.286727100706682 25.87593874939765 +6.251829995614694 67.1897065904853 +5.676338060332687 23.31919059415466 +6.498499162359927 58.07886021168022 +4.909744408411691 28.69978728336521 +5.5989071058594115 64.34769969086639 +5.065769238080356 27.486818889712605 +5.721267748116195 60.60714687910058 +5.374297035236377 25.27065750226946 +5.9673070243157476 54.364391516101335 +4.753030862801816 29.984468210195743 +5.189316089208498 56.572953703338825 +4.870614264676554 29.014205369918443 +5.296368225388282 54.33368294687755 +5.1046217895363455 27.194660625896365 +5.507720427347832 50.307287429983866 +4.517663382149387 32.04654915154942 +4.683780590520658 45.25114437488361 +4.576463393665444 31.515894632458778 +4.7419149601593675 44.456385134788135 +4.6941747919778605 30.484816797164378 +4.857819909385076 42.921657565797986 +4.4840955224722725 32.35427394170847 +4.620823696538416 43.66763483454232 +4.534456956381929 31.893910381335374 +4.670828961026172 43.018189276322886 +4.635309940270503 30.995301729684712 +4.77066448860684 41.75564225146118 +5.097834644119621 30.445424880560555 +6.249906760095835 77.80489043858427 +5.297796599876029 28.783379071063944 +6.342411885467098 71.10288174605598 +5.688959327065734 25.855952708402672 +6.57083251067301 61.18156948742607 +4.918183804793554 32.0417172876252 +5.68004054511642 68.96123927283836 +5.07546644285965 30.638742422151044 +5.7955356883417135 64.73793104616259 +5.385799636838932 28.08847044753578 +6.031212048003808 57.79899899416192 +4.759916081735295 33.53338135852578 +5.247915733172577 61.140063708923606 +4.878694718368583 32.40624084501974 +5.352729171159108 58.575954800476225 +5.114592524633682 30.30158774883558 +5.559952724662382 54.02045839516638 +4.5215612142541906 35.94042922712588 +4.710818353516321 49.67789548812779 +4.581188459027125 35.31947956307129 +4.769338762388507 48.753072822268834 +4.700391322550736 34.11597758204601 +4.885824784588097 46.975837738915665 +4.4874951198779485 36.301003378688506 +4.643712861265388 48.072545748190386 +4.538596872421009 35.76170873021177 +4.694172500859399 47.3153033282347 +4.640807176197426 34.71133296294132 +4.794767648374482 45.84899486568745 +5.108142622873195 33.50271165100861 +6.3596508061003565 82.35152480116909 +5.309298648584484 31.61491960402189 +6.435928480590757 74.97007677493421 +5.701922585656445 28.309065989171756 +6.644621618349742 64.2118441749145 +4.9270665142637355 35.32370551237252 +5.765863937598826 73.59950114067223 +5.085616731205672 33.72282373168372 +5.87327476861706 68.85353235751367 +5.397718875301129 30.828020261340516 +6.097155093953286 61.178542591671196 +4.767205336854856 37.03258725310013 +5.310401742318907 65.74617337091865 +4.887211802233849 35.74065659888136 +5.412339163285445 62.825221197000026 +5.125015226873074 33.33901178911564 +5.614489133709104 57.69993242010654 +4.525726012312202 39.805389432724084 +4.739779725692727 54.13567925760768 +4.586225309004975 39.088258480002025 +4.798616160556264 53.06768652732749 +4.706987513655924 37.70196684405113 +4.91553694036566 51.02575408041819 +4.4911324767498675 40.22240259950035 +4.668231748577706 52.50517660324102 +4.54301736984926 39.59885502691146 +4.719110899638165 51.62944644646137 +4.646653549512475 38.387150425705684 +4.820385727925158 49.94070710893096 +5.40531957176294 3.7146235772942324 +6.097623813952628 51.362718402481356 +5.629617861163018 3.5409711691538406 +6.2784373572920495 47.425102696811386 +6.071158038917842 3.2291340726885 +6.640522345445429 41.15841308508025 +5.205164749537758 3.878673378207228 +5.5937589924678885 40.44384808098184 +5.380319007358236 3.734639141878251 +5.760460672338562 38.42048326531987 +5.72870531791776 3.4675869507391592 +6.086724424104033 34.808994275892445 +5.030258652785904 4.029312226914656 +5.238434367189688 31.2210988042393 +5.161385665494709 3.9157305666107116 +5.369517452130821 30.215908874109434 +5.424062801609332 3.699705498794582 +5.62916828051928 28.29809307073399 +4.770109111385462 4.266537279738735 +4.82383594346378 17.87049898571484 +4.834770135326843 4.206056753268668 +4.888981505816101 17.630570683414764 +4.964891099564678 4.0874088069104255 +5.019838991791197 17.152770586842852 +4.7333047583966685 4.30142336092554 +4.774037233364231 15.982518914911504 +4.788552163934553 4.249181922051259 +4.829630868984269 15.80174062478353 +4.899713017463396 4.146335021901777 +4.941354886374946 15.441052510360361 +5.408184768834356 7.397268199122454 +6.172579658959372 55.89367071289331 +5.632964540021106 7.044526641520346 +6.3450456421589845 51.51659092516331 +6.075268399489758 6.412233194425149 +6.6953467297750215 44.64965420920644 +5.207531584039901 7.730963164020344 +5.647899693392787 44.94417635689913 +5.383125741495747 7.43795749285415 +5.811726950442294 42.63060053206229 +5.732242447632447 6.895602748965816 +6.1326879698349215 38.553765353819614 +5.032128050995383 8.037793545289311 +5.2760610257656495 35.67534658907088 +5.163633725794547 7.806405835849813 +5.40653588204892 34.48707350602949 +5.426971160841319 7.3669458207949035 +5.664642101077935 32.242683800122926 +4.771115615403666 8.521838905744827 +4.8407855259650185 22.300121294274174 +4.8360058275274485 8.398329765984617 +4.906136355327344 21.986513539174137 +4.966558176146588 8.156238521245372 +5.037314144311528 21.365607241199914 +4.734176221524511 8.593113112189979 +4.788380215649777 20.416265945532928 +4.7896250798504285 8.48638975654655 +4.844174611217117 20.173763518174912 +4.901168896653719 8.276439230025067 +4.956239744845796 19.692398648299058 +5.412666707964139 11.031336748101282 +6.253775874696591 60.50674624225321 +5.638168673920587 10.491669023821917 +6.4168134836635025 55.64641991909838 +6.08158685834187 9.526935005268188 +6.7542897838280656 48.13254317516726 +5.211253695033585 11.542909566440748 +5.706937753116001 49.52766172697398 +5.38751914257526 11.093660157006711 +5.867434497599345 46.89030363815246 +5.737728409382623 10.264151490633742 +6.182499608179052 42.30426752575033 +5.035081579129258 12.01423924801792 +5.317164504281887 40.20079452709602 +5.167173175776032 11.658713705821457 +5.44695779200098 38.80790454863507 +5.431518355634367 10.98490208862704 +5.7033852366539985 36.20352222679113 +4.77271684585521 12.759715370564301 +4.859261469250553 26.77085463546818 +4.837968352289288 12.569270410275374 +4.924913624255154 26.37597965246567 +4.96919664170284 12.196434913395496 +5.056582867579011 25.5980175732188 +4.735563958939737 12.869689383714508 +4.804003933897817 24.885970276186647 +4.791331135416341 12.705038280558187 +4.860092192496826 24.575605640614985 +4.903477110769129 12.381476381457015 +4.9726687633162685 23.962097381559353 +5.418542676289974 14.606652812842798 +6.3410854548013456 65.17935795117197 +5.644947576539755 13.871125017142916 +6.493447179954796 59.79125179504734 +6.0897166994015866 12.560832906461867 +6.8168839154215295 51.584842282517926 +5.21616221273173 15.305707365732296 +5.770985274111867 54.179713118040624 +5.393283226746309 14.69172010861936 +5.927533160377962 51.18207801444491 +5.744854417472381 13.561601000196562 +6.235896637705328 46.04098828889923 +5.038996845845236 15.951409123121056 +5.3619123182016075 44.7879523697274 +5.1718468575450744 15.464205954853904 +5.490851925377399 43.166165119685175 +5.43747663241539 14.543289704830684 +5.745302432361167 40.165127480599814 +4.7748561490693096 16.976024921601464 +4.879378681660423 31.278342458918026 +4.840585235553523 16.713870427622826 +4.94540141971665 30.793297589866185 +4.972701105072861 16.20144301769422 +5.077679003847507 29.842080719318783 +4.737420092402399 17.127534765368836 +4.821009289660325 29.387887951428823 +4.7936092187669495 16.900731538494085 +4.87746378906909 29.002415881141303 +4.906548935743679 16.45563462467179 +4.990679707519907 28.24334248905079 +5.4256099661602315 18.116709763908464 +6.434283839602999 69.89263442572603 +5.65304611297038 17.176024755665434 +6.574593986044349 63.93278316528012 +6.099307208989737 15.507123313124602 +6.88265794001302 54.990875935803665 +5.222102588425582 19.013495091310983 +5.840084027373324 58.888814218594085 +5.400221251270594 18.225693084767716 +5.991911806109069 55.49224369072195 +5.753342882403174 16.781017112080747 +6.292586246820628 49.74964413878482 +5.043761468339764 19.84431737004508 +5.410423548100963 49.429986397110575 +5.177510826026082 19.217210676646545 +5.538239533614634 47.552680409736 +5.4446388125741505 18.035558369110625 +5.790262102870538 44.11604279673671 +4.777481628419259 21.167778286235983 +4.9012259715490565 35.81985497443594 +4.843790044065324 20.82855614340211 +4.967662386623867 35.23462465280309 +4.976974774040514 20.16669376883905 +5.100612981033882 34.09214526234501 +4.739700808994218 21.364021593618837 +4.839474198232253 33.9197073392044 +4.796403327048967 21.070307104146096 +4.896347249243509 33.45095599027796 +4.910302912344466 20.49481432625097 +5.010289754963334 32.53132516290766 +5.4336866453229415 21.557431329035296 +6.533073808665931 74.63006032972393 +5.662237858939349 20.402387440451392 +6.659869018405209 68.05617618077467 +6.110055000959019 18.36259055865486 +6.951159551298322 58.33945178491771 +5.228934916466946 22.662371561837688 +5.914224438697813 63.645321545333914 +5.408156432304543 21.691509561761517 +6.060418881097242 59.80963047333835 +5.762948860285796 19.918536381187558 +6.352266255529927 53.419508338118575 +5.049273253641034 23.689487805899386 +5.462785685286159 54.12178791810657 +5.184034560614357 22.913906174813008 +5.589110951897097 51.96027483531375 +5.4528191606078185 21.457629388446414 +5.83811293976286 48.04750631957062 +4.7805458492339055 25.332754158178403 +4.924876102105794 40.39379656804165 +4.847522061811419 24.910711324585264 +4.9917434612490865 39.69736742570399 +4.981929501225888 24.08894847353616 +5.125381196414007 38.34408474823024 +4.742366092297682 25.577181711043174 +4.8594623555081915 38.480121605089664 +4.799662269915258 25.2114248971415 +4.916786620185815 37.919097006322026 +4.914664778219958 24.49606290490104 +5.031503698579355 36.82258503569051 +5.442611147403595 24.926447165626627 +6.637100938218191 79.37674177708988 +5.672324413406562 23.54822950384987 +6.748871835939272 72.14916935271448 +6.121701533543858 21.126407515778684 +7.021966167925618 61.622618343918774 +5.236533648422419 26.24982767598035 +5.993354876361504 68.4407403769167 +5.416931552433497 25.08676947061128 +6.132873806744431 64.12480743625416 +5.773459009239012 22.97240017325301 +6.414636385912537 57.04242478673059 +5.055439655384148 27.484518981662173 +5.519063342413414 58.85940142449951 +5.191300677646432 26.55178735735417 +5.643434410040458 56.38313673576978 +5.461852846436603 24.807156609992084 +5.88869310877802 51.95267353513271 +4.784005647953538 29.46928476733781 +4.950391446588104 44.99941700617678 +4.85172608535728 28.95840928194179 +5.017681332633525 44.17984236352207 +4.987485263861938 27.965916852612395 +5.151971233938768 42.594863443123515 +4.7453794031881165 29.76551912315022 +4.881028174059209 43.068579154567324 +4.803339484409232 29.322337294195115 +4.938816937835925 42.405525699412536 +4.919566966735047 28.45724620755291 +5.054318527180992 41.11463237107193 +5.452241049510178 28.22261600002229 +6.745965668467853 84.11900237685698 +5.68313344159652 26.61297619717585 +6.841197622469988 76.20151522262246 +6.134028809537141 23.799351695462622 +7.094689805813457 64.83483487503561 +5.244786675502179 29.774372530558505 +6.077386504999734 73.26724995064525 +5.426407805633968 28.410278161149584 +6.209074271064757 68.42959748115166 +5.784689244504036 25.942320019537448 +6.479404826413142 60.61216340732492 +5.062177336427664 31.227807132936068 +5.579303005195829 63.63963054977928 +5.199204103924237 30.12931517823964 +5.701161150765 60.816398790945954 +5.4715947819764335 28.083040332434486 +5.941835715154914 55.826108168771036 +4.787821638047968 33.57611247199678 +4.977827552344405 49.63661380818807 +4.856351895879005 32.97023401183038 +5.045505821344933 48.68104558442697 +4.993569748669145 31.796015051859488 +5.180365011666593 46.84224623092923 +4.748707521849586 33.927894056190816 +4.9042199171521 47.685113083192384 +4.80739252172176 33.40173618470954 +4.962467213470825 46.909545134162045 +4.924948241344658 32.37684137712305 +5.078726207680056 45.40569531163265 +5.462451536117142 31.445693598804404 +6.859233936654338 88.84416545374937 +5.69451615153407 29.597052448017934 +6.936445501796758 80.20460706981918 +6.146854611757738 26.383272333703403 +7.168978501871392 67.97238529559664 +5.253594466938471 33.235274588671 +6.1661958585057794 78.11737405773722 +5.436463335686519 31.661723174375414 +6.288801078223178 72.71674761203657 +5.796481755109693 28.829037198825684 +6.546292185922228 64.12397330735504 +5.069411414977458 34.91835129651593 +5.643535555911107 68.45974621730218 +5.20765129142393 33.64567391796485 +5.762228482486566 65.25584031369523 +5.48191797166977 31.285088551159003 +5.9973722418801625 59.66343101795505 +4.791958022498085 37.65229726241779 +5.00723553881365 54.30579034186424 +4.861353909526693 36.94516277819571 +5.075242100041862 53.200487893915636 +5.000117803887793 35.57819603393911 +5.2105407857338735 51.08459363870018 +4.752320121435002 38.0634368749494 +4.9290818299520565 52.33021940588878 +4.811782765940829 37.44865211799642 +4.987762425941428 51.43093247249463 +4.930753227312354 36.25379242491507 +5.1047154815198175 49.69454109035187 +5.473133596151182 34.59609211709822 +6.976447420776252 93.54046255579787 +5.706344971657927 32.501593526767344 +7.034225009395864 84.1512195295729 +6.160027671435566 28.880717630661152 +7.244516078474531 71.03295369854861 +5.262868904383343 36.63237341620287 +6.259626479189064 82.98375993218173 +5.446991521099336 34.8414398545113 +6.371822134936697 76.97971498664457 +5.808702234229715 31.63401277657849 +6.61503367253218 67.57426004254684 +5.0770748530470975 38.5556131676051 +5.711777322190925 73.31726219242083 +5.216559167438322 37.100594696043 +5.826561562425359 69.69767132078147 +5.492711653941011 34.41377169889321 +6.055134835231709 63.461071302628675 +4.796382209369787 41.697146607357816 +5.038663775791195 59.00774895911328 +4.866690855175867 40.8824797171333 +5.106912198169992 57.73807111180867 +5.0070707746943155 39.31182662018656 +5.242474461237735 55.32071135926759 +4.756189548373147 42.171491649456776 +4.955655648130594 57.00476563399894 +4.816475186746907 41.4623812351279 +5.014724898356249 55.969832575824675 +4.936931930986174 40.08740510878043 +5.132273052085095 53.98034395089525 +5.763330753371242 3.822241563728355 +6.667831639668449 61.733966027851324 +6.021154598155061 3.6281357753750147 +6.848316942662843 56.15889011442123 +6.526144081570459 3.284703402152532 +7.227586691400637 47.79480587568346 +5.5326321966744585 4.007236345543238 +6.035597276896144 48.420741508242585 +5.734544711184266 3.8447326613175563 +6.220416698205366 45.58571981667929 +6.134783672500834 3.5466957286958936 +6.582117586258762 40.70166020331399 +5.330671490752402 4.178300792269278 +5.596049401998094 37.12219790816294 +5.4821077410078445 4.049219851640181 +5.746146936207253 35.74962845480973 +5.784905954467674 3.8054936364209797 +6.04222061939877 33.172246939625495 +5.029984881509164 4.449543289325959 +5.096290127561509 20.886139017683405 +5.104728092614175 4.380207686808572 +5.171648870252468 20.574034315515373 +5.255134985041334 4.244539150564389 +5.322939681491013 19.95343179650299 +4.987447173098309 4.489585375205344 +5.03738530794593 18.6012376714887 +5.051302760967626 4.429635677134402 +5.101689546398496 18.36800396908278 +5.179799611679206 4.311856520508971 +5.230891360147082 17.903000257975812 +5.76626917866581 7.611209196162064 +6.751475878399966 66.46319184879806 +6.024566734415567 7.217566234466962 +6.920351132006714 60.36431932687649 +6.5302974649474335 6.522260702441946 +7.284863660905813 51.33309117254839 +5.535073610950787 7.986869864859246 +6.096522143688071 53.15152372075448 +5.737425192272414 7.656854322047576 +6.276966713875185 49.961751643620126 +6.1383816062836924 7.052555586831271 +6.631321128834335 44.53765097384491 +5.332609964708101 8.334700308150675 +5.638131147933513 41.801375350817494 +5.484429677105168 8.07219441765131 +5.787151886167336 40.20813201309286 +5.787887098006908 7.577224333075541 +6.080803708473719 37.247389903680755 +5.031036666525214 8.887186027860542 +5.114995860631194 25.52684913776503 +5.1060169852629755 8.745842627472449 +5.190544733660328 25.128822596907824 +5.256867109675461 8.46950823326494 +5.342102363967641 24.342150104225603 +4.988358786220376 8.968850491873653 +5.053188200670226 23.24545218112275 +5.052423358089595 8.846595292166993 +5.117690335447576 22.940505587563766 +5.181315258419522 8.606584770471342 +5.247211751380543 22.335789402160124 +5.770869646543805 11.349518591324824 +6.841401664537855 71.2699996337065 +6.029876230554922 10.748526681763337 +6.997449217003748 64.60304544821085 +6.536684426517073 9.68967653003647 +7.346154285839723 54.859902103374296 +5.538917057048469 11.924185784889985 +6.162617381770606 57.9690746240628 +5.74193803876167 11.419283958439717 +6.338065373814716 54.38674386585662 +6.143965189076176 10.496938347177933 +6.6843493528801545 48.37664773475804 +5.335676442440857 12.457320783162515 +5.683916985124734 46.55741187507062 +5.488089460845313 12.054871833847573 +5.831716671047779 44.7187433896079 +5.792552047066779 11.297585718217336 +6.122716479564793 41.33790761061643 +5.0327124392059694 13.306311584104446 +5.135313298380732 30.212700827709895 +5.108066915444644 13.088851890488666 +5.211145818000615 29.72022096032479 +5.259612079112473 12.664226350193058 +5.363134031954841 28.75196955724029 +4.989812683785582 13.43203747074018 +5.070340573269568 27.92921006972937 +5.054207863913448 13.243843239333284 +5.135133807336545 27.54568494969599 +5.183721501622094 12.874777890685962 +5.265143287077249 26.788539902032337 +5.776905448588826 15.026458540244246 +6.937348455093762 76.12864656812505 +6.036796200527783 14.20923996020243 +7.079238309231529 68.85016557275453 +6.54490478365576 12.774156754419701 +7.410960158110885 58.352517610419824 +5.543990281096257 15.80985064507518 +6.233941531707707 62.8565741217486 +5.747863322221688 15.121458466337916 +6.403607369422544 58.84136241639069 +6.1512215171242275 13.867730019820746 +6.740900534326966 52.198138771732694 +5.339745937055458 16.538439119903774 +5.733561206811688 51.379592827394006 +5.492926727111958 15.988282983026098 +5.879887629852011 49.2678911581415 +5.798669016276541 14.95575968799342 +6.167835966028221 45.42716444364527 +5.034954441169015 17.702460678483877 +5.1573590049977875 34.93888869432332 +5.110803957649615 17.403855490245796 +5.233539850336074 34.3419977099457 +5.26326229373309 16.821684839581593 +5.386064496133763 33.174262103192554 +4.991760087615983 17.875246521297267 +5.088945234920386 32.64838678790002 +5.05659395902708 17.616649689601303 +5.1541006326170145 32.17821591571383 +5.186927780993488 17.11020717316805 +5.284721546468267 31.253832669543755 +5.7841694816304265 18.63515473913757 +7.038965875315073 81.01755324782346 +6.045066962832963 17.592506968864388 +7.16530024637022 73.08623931423332 +6.554604156618936 15.768671072826729 +7.478789741984909 61.79501892099078 +5.550134917714343 19.637623823259347 +6.310479581509469 67.80035808768253 +5.754999955143221 18.756562999073115 +6.473428665826792 63.31033185127685 +6.159868535235225 17.1576888019216 +6.800649592657966 55.987107281770996 +5.3447031277625605 20.572710308924457 +5.787168274155847 56.2599143451963 +5.498793902581459 19.86637867864728 +5.931663136824198 53.84517871352604 +5.806026411219294 18.54483070952885 +6.216004963323584 49.50274513594105 +5.037709499934332 22.072395723145654 +5.181223317451316 39.70229236911646 +5.114159957000319 21.686992789887675 +5.2577888943785585 38.98981813895119 +5.267718418833221 20.936972777535598 +5.41089997947117 37.60276459140956 +4.994156131945747 22.295627798316893 +5.1090818949175985 37.400343776239836 +5.059524248487111 21.96159197011239 +5.174648987503574 36.834448338008606 +5.190850511209861 21.308454923685154 +5.3059613296833605 35.726331073047504 +5.792475254841489 22.17128655178426 +7.1458412612925155 85.9179752548573 +6.054457488203469 20.894145206216585 +7.25519807120917 77.29567599335732 +6.565475594995803 18.669891155048667 +7.549178787107489 65.17615138345315 +5.557207050001302 23.403335689894316 +6.392161487888628 72.78870084943999 +5.763166634463002 22.320279673865482 +6.547327024358261 67.7810900367231 +6.169656828393702 20.362770274961537 +6.863268063697099 59.73231267761053 +5.350442693959503 24.55639105647111 +5.844809050690886 61.19212085298967 +5.505556643514908 23.68506664724626 +5.987009804078081 58.44229428790286 +5.814433879310289 22.060478755538334 +6.267048362546337 53.55509210670432 +5.04092877517156 26.41369823293965 +5.206980299624625 44.50096566182826 +5.118072383546891 25.935422887292642 +5.283939008066517 43.66064547322745 +5.272889586392046 25.006592807189953 +5.437632409442465 42.03280940927343 +4.996959651033531 26.691035134754568 +5.130815868573495 42.183485840168274 +5.062946014852207 26.276124157770678 +5.19682300984109 41.51188637494119 +5.195413141615683 25.466323848047555 +5.328864797978339 40.20210953844898 +5.801656697292005 25.632333481221124 +7.257518314376817 90.8133053141418 +6.064764935866775 24.112064983046302 +7.348492284596073 81.46580352272244 +6.5772572548812445 21.47695879471887 +7.621699592262601 68.48803663369782 +5.565077116411707 27.10429457629184 +6.478871720689233 77.8110973239937 +5.772201670181302 25.810053627675767 +6.625073820157598 72.24301145895707 +6.180368783106191 23.481128774973364 +6.928434864611584 63.42526994967842 +5.356868895751069 28.486884456085285 +5.906529125646817 66.17111541631688 +5.513093731298323 27.441654170403787 +6.045871191967382 63.05236228409218 +5.823722100250569 25.500211163133017 +6.3207823174391615 57.57670679772608 +5.0445676469514975 30.72454314081139 +5.23469335350861 49.33383805567881 +5.122484097354722 30.14704353267165 +5.312025654165753 48.35238934056825 +5.27869297496642 29.028060779698713 +5.466244611977571 46.46087586054637 +5.000132893384279 31.05982885155563 +5.154202987554796 46.997002718420376 +5.06681110499024 30.55833551021815 +5.220657564387725 46.208884506886434 +5.200545735057375 29.581492214898237 +5.353426038825883 44.67826247089853 +5.8115671142427425 29.017076835522044 +7.373512334349056 95.6886947945008 +6.075812831556012 27.245657171117813 +7.4447515630707155 85.58626650142115 +6.589728192076457 24.19067802686094 +7.695964419413128 71.72530381387804 +5.573629083116144 30.738894324191286 +6.570454901673881 82.85780894703437 +5.781962000916064 29.22460784734036 +6.706422031369202 76.68692150775796 +6.191816369342949 26.512458434919953 +6.995842427591889 67.05957595301793 +5.363895227157081 32.36244862928819 +5.97235331301815 71.1925553160169 +5.5212963127691514 31.1344798684567 +6.108172995073528 67.6695178769316 +5.833741695688345 28.862854491655135 +6.377019770609587 61.56162549358858 +5.048585228144547 35.00354771375841 +5.264418746844329 54.20050909430311 +5.127342936410355 34.32030236289622 +5.342077049102705 53.06366670469896 +5.285053475807184 32.999651071020494 +5.496713460001434 50.884289890396964 +5.003641404444897 35.40075346185254 +5.179292717512281 51.84069190152039 +5.071075437030776 34.80678876991485 +5.246181215362092 50.92444052051582 +5.206184673666982 33.65229573678695 +5.379633853125844 49.1526421191999 +5.822077698309039 32.32525086078479 +7.493323287506775 100.53084022905519 +6.087448609474766 30.295365486244084 +7.5435602344001405 89.64860703715117 +6.602703622319881 26.81296431613797 +7.771625677188163 74.88447251999021 +5.582759683340022 34.30634155559052 +6.666719552234857 87.91956300904278 +5.792321784799408 32.563603376552805 +6.7911117032305865 81.10476561461729 +6.203838221859674 29.457533922896822 +7.065200191569541 70.63043570458522 +5.371443720982456 36.18199052243621 +6.042288013141961 76.25255388988019 +5.530067231506322 34.762657760873566 +6.173826253308208 72.28860771380128 +5.844361678368954 32.14819890604671 +6.4355739524807305 65.50505553895741 +5.052944227022976 39.24967286444546 +5.296207982952735 59.10110023879194 +5.132601389112664 38.45407257234047 +5.374116368101778 57.793630594837275 +5.291903197526838 36.920217047901154 +5.529011894415567 55.301011575456364 +5.007453604297561 39.71284614771102 +5.206130275994029 56.714831582907436 +5.075698780250353 39.020413513385634 +5.273418209772973 55.65804734231536 +5.212272231698671 37.677574385310436 +5.40747356125689 53.62367281472872 +5.833075770360419 35.55728871358807 +7.616447559370635 105.32787207839237 +6.0995413257930915 33.26238323155199 +7.644523625520984 93.64595877535137 +6.616030091283382 29.346458344025606 +7.84837461915647 77.96350352646729 +5.592377293322287 37.8064561020675 +6.767441231085874 92.98736543026365 +5.803170725119829 35.82739173727711 +6.878874645008571 85.48939480200247 +6.216296887267224 32.317886389253495 +7.136236336778097 74.13431770998899 +5.3794443852460745 39.944917191418824 +6.116322205761693 81.34745544230162 +5.539320007045184 38.32589003830735 +6.242729357107683 76.90497409558917 +5.8554676272090935 35.35673937331617 +6.496260752244414 69.40311601400502 +5.057610569264957 43.462149174391776 +5.330109450502598 64.03614263532934 +5.138216284296462 42.54756084270026 +5.408163230753189 62.54184082983559 +5.299180838258865 40.78906018726243 +5.5631102517954885 59.709478931717385 +5.011540602359093 43.99537702559474 +5.234758133144655 61.620084908840724 +5.080644501303565 43.19842823429498 +5.302389846981677 60.40958181935179 +5.218756127049797 41.65656080791109 +5.436928205330621 58.09021345475543 +6.117733282851219 3.917266690553024 +7.272344377466206 73.01726004181084 +6.410152432452938 3.7032047966635884 +7.438409132967252 65.39850700338845 +6.979980672315658 3.3300838918385067 +7.823007786509699 54.62390484534693 +5.855314202416206 4.12314233003184 +6.494818534603608 57.199036636223276 +6.08502604581822 3.9422043824925037 +6.693614567715616 53.31553326115208 +6.538712748629627 3.6140479023239687 +7.085329209544796 46.8885892688004 +5.625116535389927 4.314908246020278 +5.958045254481277 43.59401957678749 +5.797760724738794 4.170091315145701 +6.126997587638933 41.7548469210267 +6.142240038103007 3.8987143274697877 +6.458938972758822 38.366145555977376 +5.281957823410889 4.621164089956368 +5.362685749515917 24.158241095913336 +5.367275359084821 4.542662714307788 +5.448757078353437 23.75909178227979 +5.538939599523756 4.38947373545987 +5.62142753594671 22.966963820837872 +5.2334059006582825 4.666556497733741 +5.29384293731201 21.437264407386913 +5.306291188781292 4.5986115520768855 +5.367291898366743 21.141289201763293 +5.452964708981004 4.465411182937451 +5.514815425283107 20.551807335083694 +6.120733625229811 7.800107084723693 +7.363771504029499 77.90179883170873 +6.4136174124309 7.366586867268958 +7.514875766871318 69.68531604063163 +6.984165410467523 6.612111294794915 +7.882080548127416 58.192836226193 +5.857821046381131 8.217572322035945 +6.562692938218277 62.14606344309579 +6.087969186608091 7.850646335235984 +6.755225063360867 57.83683863537305 +6.542358712377749 7.18617739709498 +7.137336205706043 50.79702134233169 +5.627117390632364 8.60692336611789 +6.004765161091975 48.490495853008376 +5.800147969026029 8.312849382638413 +6.172020818228409 46.38815944000891 +6.145282496904775 7.762513372279675 +6.500471292204906 42.55590012384111 +5.283051913790147 9.229796584779177 +5.383179357936207 29.001003828528393 +5.368613578138575 9.070007992594364 +5.469416044291731 28.502725084614724 +5.540730981388035 8.758453204267198 +5.642277805761205 27.52004005858185 +5.234355171059801 9.322234201104393 +5.311126501790667 26.282596877622037 +5.307456238814441 9.183881823458048 +5.384765112728686 25.90421378904571 +5.454535318425997 8.912851988367386 +5.532573729379241 25.154804062096844 +6.125434306144516 11.63043377609106 +7.461334404681742 82.85602478716123 +6.419011960129264 10.969714757903406 +7.596246655937762 74.00000767727182 +6.990602298993627 9.822567401769914 +7.945068319922741 61.74782458621416 +5.861770967638315 12.26788513902988 +6.635955504887648 67.18154337405156 +6.0925835251889975 11.707540632331698 +6.821436324102464 62.40526554509691 +6.548019408412625 10.695107705377794 +7.193121088767177 54.70571097421526 +5.630285848588737 12.863540704229218 +6.055410030288156 53.468942515494405 +5.803914138347985 12.413542883688024 +6.2207413758675365 51.075333285742246 +6.150046636576242 11.573088959317298 +6.545371062620647 46.75977914534899 +5.2847973449530965 13.818873026494147 +5.405369344819673 33.892881995931816 +5.370744571674035 13.573504184227872 +5.491860737210135 33.2859446209222 +5.543573039141606 13.095670010806836 +5.665067273761558 32.09558743804803 +5.23587114395027 13.960913293357851 +5.329827504036433 31.171019910023894 +5.30931390247871 13.748345944155343 +5.403747996483048 30.702598445162398 +5.457031727750986 13.332377169135029 +5.552006245467909 29.779256579951088 +6.131605278928044 15.397056884827323 +7.564645421982214 87.85167754981019 +6.426045810360992 14.50037278280001 +7.682086922669609 78.31666059997839 +6.998888623828404 12.948339832775288 +8.011452466234347 65.26588616100194 +5.866988734838034 16.264262980435458 +6.714599212976223 72.28631473805486 +6.098645788514618 15.5018427642075 +6.8920861867178855 66.99981947519112 +6.5553786733590655 14.128310761285192 +7.252349015625598 58.593380996303 +5.634494613220261 17.07658575616496 +6.110116700513281 58.517356703422195 +5.808896041940395 16.462722713953415 +6.27318002425294 55.8014735631142 +6.156297317364805 15.319146578652452 +6.593488008206117 50.960115809247256 +5.28713534652727 18.38362957357525 +5.429373400345033 38.828629574915134 +5.37359307814576 18.047416941545382 +5.516177900820054 38.10196899893317 +5.547356144106597 17.39368844225683 +5.689821136190241 36.684295847441334 +5.237904210236015 18.57842221006376 +5.350050254173463 36.09803687852232 +5.3118007601229005 18.286954270208554 +5.424321267549048 35.53065325553972 +5.460361704696021 17.717363075946544 +5.573145913239457 34.41715361417781 +6.139035658400576 19.092772238529356 +7.673244479688792 92.86525674506535 +6.434455590761502 17.951074941957792 +7.7719317547951166 82.61520642209378 +7.008667324799478 15.982212034046883 +8.080729652674188 68.73100958612771 +5.873312625639596 20.200116814214226 +6.79854151777944 77.44449454866194 +6.10595116583122 19.22640448955248 +6.966957904403961 71.60381333670239 +6.564150912097148 17.478280181660377 +7.314668737249082 62.444483126670924 +5.639625717390429 21.240376756216 +6.168970693985904 63.626494594294485 +5.814942897724097 20.45399121456108 +6.329309450512179 60.554975377842915 +6.163819147856678 18.99344374706065 +6.644640251911206 55.14365246005384 +5.2900115717240475 22.920589719516922 +5.4552828859435545 43.80473766105346 +5.377089392028767 22.487610947028738 +5.542428452179862 42.945976842145576 +5.551978653924696 21.647274807762926 +5.716540909220954 41.27930936503431 +5.240408538692114 23.171696490062395 +5.371875878516478 41.06068689272432 +5.314858115473305 22.79603423614375 +5.446543012232274 40.38432173192608 +5.464439722168344 22.063089669961283 +5.596004758696377 39.06264552267906 +6.147535094908765 22.71303992741471 +7.786628517990057 97.87669016888042 +6.444006537331171 21.31746297344212 +7.865311563275988 86.87976038152767 +7.019628846707666 18.9207632067601 +8.152430348965822 72.13197098260216 +5.880595197275327 24.071029940628716 +6.8876429338113425 82.64225908765248 +6.114314501301337 22.876684308986533 +7.045800671052189 76.20350250930863 +6.574083162747147 20.740815915856476 +7.3797316217845 66.2474352922913 +5.645571016185121 25.35091940946861 +6.232021853298409 68.78888144375561 +5.821916973763773 24.383005740219936 +6.389070147334795 65.32641087398954 +6.172417908811205 22.591444499358243 +6.698630340242981 59.30014703089988 +5.293375891577786 27.427144385618448 +5.4831726812310295 48.81890794723317 +5.3811692608757005 26.89102983848275 +5.570657036604912 47.81448889087587 +5.557347224362741 25.852686896139097 +5.74521361743633 45.8754340382516 +5.243341900057141 27.73841741559892 +5.395370955647711 46.05708674632685 +5.318431864650586 27.272841326722304 +5.470457074728126 45.26074357128423 +5.469187134863198 26.36612636218203 +5.620581964191197 43.71135217560334 +6.156933705402778 26.255204789957293 +7.904271936177186 102.86862609495114 +6.454492207444316 24.597354854365673 +7.961766891517092 91.09763498857129 +7.031508930682542 21.763109800102818 +8.226126609022621 75.46101003159873 +5.888703332779323 27.874142477349565 +6.981717376725134 87.86714427509953 +6.123570299035543 26.44998806366126 +7.128341837586086 80.78729981166762 +6.584954423691802 23.913997637185282 +7.447201738305568 69.99356747284287 +5.652231879658775 29.405432809457217 +6.299292334481463 73.99820815617542 +5.829693638547719 28.246899778011805 +6.452379090779812 70.10787016803903 +6.181920467520921 26.110525020831894 +6.755254323698491 63.42155403148902 +5.297182333372542 31.9013162059869 +5.513106743184627 53.86974429026469 +5.38577380372261 31.25540226936437 +5.600897377945634 52.70500560595185 +5.563376484846481 30.007256654063923 +5.775816961561822 50.46867629747148 +5.246665421210226 32.27680557919955 +5.420592397239369 51.08616518987596 +5.322472379238606 31.71530702639751 +5.496097783898949 50.15794010678168 +5.474531831562678 30.623972149873047 +5.64686841460916 48.35995998025649 +6.167081154542768 29.717978813929523 +8.02564277756823 107.82602193765456 +6.465732765286408 27.790111838741215 +8.060857812887619 95.2586887272919 +7.044084477931807 24.510077933920645 +8.301434202723446 78.71293217413321 +5.897517566954884 31.607742167491082 +7.080539117046946 93.10762070050876 +6.133571854236761 29.94496471578599 +7.214295410614764 85.34528286825193 +6.59657353187666 26.99750487049814 +7.516761383141685 73.67641970805302 +5.659518937677654 33.40204485823566 +6.370780933353952 79.24892061730283 +5.838160687702043 32.04389858174588 +6.51913505946691 74.89253280522509 +6.1921738115237215 29.54944606179453 +6.814307273491595 67.50148496262553 +5.301388614631342 36.341600639325804 +5.545141590262412 58.95653970047195 +5.3908490488046015 35.57904430198286 +5.6331755989720484 57.615760341008944 +5.569988773982254 34.109123692740205 +5.808322465475275 55.05593359101162 +5.250343503561487 36.78549255237467 +5.447590542896861 56.14747907574475 +5.32693406287801 36.12186879477308 +5.523492908473927 55.07460051801321 +5.4804080056982185 34.83482724640619 +5.674849481365018 53.00595111806219 +6.177845237642574 33.10107732997137 +8.150215667461424 112.73587664449468 +6.477572585102616 30.89619453558333 +8.162169793319363 99.35485499844057 +7.057168827474399 27.163637821654984 +8.378011742260004 81.88446873308649 +5.9069313197973345 35.27097875971391 +7.183848146420741 98.35282634339292 +6.144189915405821 33.36125182075988 +7.303367968285953 89.86885691553513 +6.608776302022176 29.992141512970854 +7.588113965278852 77.29124264765466 +5.6673514161109955 37.339575641900396 +6.44646539031162 84.53591966941968 +5.847217752209284 35.77305114050231 +6.589222068066022 79.67436824541228 +6.203043569070377 32.90798224097579 +6.875586778747713 71.53483174631026 +5.30595606345608 40.746862244611485 +5.579328640777128 64.07912273671906 +5.39634570370146 39.86072845376745 +5.667512401106513 62.54554176428772 +5.5771136934839864 38.157046564661975 +5.842697507790281 59.63477497064574 +5.254343405085891 41.26342440775531 +5.476411262428532 61.24108154078971 +5.3317751885370575 40.49135802157957 +5.55266563009814 60.009928406113616 +5.486755762144053 38.997431813718606 +5.704506840025958 57.64741163368641 +6.189110155134471 36.40495292261344 +8.277482335107198 117.58704565252047 +6.489877986820286 33.916847480322744 +8.265317373383972 103.37978845292359 +7.070606928094074 29.726506498785838 +8.455558516515719 84.9738102794924 +5.916849874576622 38.863654211223675 +7.2913551170092985 103.59241286762655 +6.155311045338082 36.69921603125459 +7.395263731588171 94.35053042947226 +6.621422786156474 32.89949963496207 +7.660985190408318 80.83463147260777 +5.675656645259875 41.21738065870476 +6.526303470540573 89.85434042142322 +5.856775319618287 39.43403305354064 +6.662511650077173 84.44792154907495 +6.214412217996112 36.1866510847251 +6.938895311773803 75.51749543877871 +5.310849223655625 45.11625636682466 +5.61571582825272 69.23774005366597 +5.402218833332471 44.09958629011608 +5.703924531516546 67.49355990580355 +5.584687519898532 42.150264524909424 +5.8789066689175 64.20328002516308 +5.258635080067552 45.7097985672468 +5.5070974403760395 66.36742209908985 +5.336957631713687 44.8229174575118 +5.583635901476322 64.96352603696022 +5.493520715165611 43.11094816461151 +5.735819680570057 62.28288891815434 +6.469341189282587 4.001359052658909 +7.91009904485809 85.0683046406985 +6.797274348878895 3.7679653223614777 +8.046329579262414 75.02792666162101 +7.4330513787403145 3.367175109980388 +8.424989541435624 61.58739706401936 +6.1741477468859625 4.227922966305487 +6.9743213857897635 66.77457948602802 +6.432593286060053 4.028698699947653 +7.181090434923732 61.56797234545925 +6.941088480435831 3.6714745064195804 +7.596027813955064 53.32117174560066 +5.914620988985444 4.440558426211155 +6.326542497705147 50.6482882242997 +6.109305895139859 4.279848682873698 +6.513656419211567 48.22409567725741 +6.496866790447751 3.9810393130331283 +6.880113867874183 43.854896406637565 +5.527155555573891 4.782692898223981 +5.624289885636283 27.68915861215205 +5.623517903331052 4.694743452434308 +5.721542970586435 27.18610841566152 +5.81736092059786 4.52359959326723 +5.916464082094602 26.190242883556504 +5.472320162731678 4.833614979459694 +5.544640356069935 24.49230561699457 +5.554639069833122 4.757410585226264 +5.6276477078055125 24.122035946075933 +5.720290534572068 4.608351915284816 +5.794286865671174 23.385587127475425 +6.472393834214431 7.967265415611192 +8.007802629968609 90.05767553879518 +6.800781879295104 7.495139286862772 +8.126129888555111 79.36630494855395 +7.437258853473441 6.685547870637214 +8.485308460708215 65.17488454225577 +6.176712036792756 8.426122518424101 +7.0491553933301505 71.9199168442146 +6.43558960906248 8.0226063603557 +7.247409009735025 66.21283493029229 +6.944772260331767 7.300103735811918 +7.650389656664582 57.28554656253579 +5.916678259725789 8.857302910854807 +6.378077179610052 55.75484706266877 +6.111750916218238 8.531367910098764 +6.562698296026829 53.019890786002456 +6.49996084538573 7.926139237833648 +6.924406103959683 48.144400016984605 +5.52828929710159 9.55225381877915 +5.646605195263488 32.72624128451002 +5.624901993073644 9.373464983387244 +5.743987655241229 32.10983631143726 +5.8192064549979055 9.025841289359295 +5.9389998143433615 30.897381834834004 +5.473304876456147 9.65581813529566 +5.563426792140558 29.530703986855208 +5.55584569430094 9.500848001062636 +5.646609347878068 29.06659708405035 +5.721911818945585 9.197941570267925 +5.813484509945946 28.14881295189407 +6.477179192175173 11.87900363781126 +8.111343182428953 95.10701664231667 +6.806244912864917 11.160511165640266 +8.210647489095457 83.72756803272475 +7.443731945620703 9.931177458359437 +8.549459139222728 68.74661631766514 +6.180755439521341 12.578562611571979 +7.129520487568715 77.15315948185884 +6.440290117690235 11.963306799765984 +7.318325656467068 70.90195231942467 +6.950493671756307 10.864058267212128 +7.708468672799834 61.247584325340526 +5.919938956656862 13.23714424530865 +6.433747734253472 60.94781985202958 +6.115611224923088 12.739201792210585 +6.615553627316811 57.87057864685403 +6.5048084793593866 11.816366147548091 +6.972083208527509 52.446484733410905 +5.530100030720422 14.30126827085165 +5.670701134511778 37.816353813331716 +5.627108385744865 14.027177785936601 +5.768296475741417 37.07601032199096 +5.822137209698737 13.494905129820925 +5.9635400173818125 35.628202431436215 +5.474879282564173 14.460142280540062 +5.583698072434016 34.61569878656715 +5.557771792255768 14.222437515887899 +5.6671460119346 34.049320729632704 +5.724491374798538 13.758314985024667 +5.834415790914009 32.934871730796736 +6.483464336762344 15.72495519061965 +8.220233886611815 100.18653521767999 +6.8133704578409935 14.751483747629992 +8.299405468223316 88.08527309640989 +7.452066103059684 13.09069031055371 +8.616910702025855 72.27948960532918 +6.186100099611006 16.674981230798828 +7.2153336686243374 82.45277500743778 +6.44646868945323 15.839323282063859 +7.393622866692594 75.6128908202432 +6.957933980287432 14.350454398045162 +7.769903204127843 65.18544885634394 +5.924273702057205 17.571485663036317 +6.493668914542032 66.21384339021554 +6.120721120262849 16.893458778761858 +6.672214789444535 62.75996298057939 +6.511171666706648 15.639999892407628 +7.022968723613885 56.74257946071134 +5.5325280600074835 19.024679934074705 +5.6966960305729115 42.953814727277724 +5.630060590700676 18.649809309881185 +5.79455462809068 42.077308013655724 +5.826041737548875 17.922953137539707 +5.990104753119884 40.372736214841254 +5.476993009204444 19.24215422469004 +5.605559643603394 39.74242898921783 +5.560352926619015 18.916822958366502 +5.689338054805208 39.06396225058188 +5.727935439212029 18.282473980978015 +5.8571105992716435 37.73517908537336 +6.491035220556679 19.497620369250033 +8.333939753559193 105.27183251189601 +6.821892162943949 18.260321246776133 +8.391911486723693 92.41914210922025 +7.461902319406218 16.156716997767 +8.687153886892986 75.75748627736608 +6.192581388798595 20.70846933364646 +7.306436839353199 87.80069817586076 +6.453917321111893 19.643207703854806 +7.473034550872958 80.32779105861609 +6.966804795941177 17.75155837708788 +7.834321860706734 69.08323042609962 +5.929562138735656 21.854329625714513 +6.557902650185411 71.54236042595211 +6.126926977231235 20.987419362822987 +6.73262642734262 67.6752587888877 +6.518831855440519 19.389505778006985 +7.076857671721326 61.01870219620777 +5.5355179283665 23.718782234373204 +5.724681800815903 48.13472813086526 +5.633687463280326 23.236961304916044 +5.822821353912993 47.10842545319022 +5.830816293267947 22.304446771870243 +6.0186903838782815 45.12355307350237 +5.4795993303774155 23.99858194864126 +5.629093707039654 44.90761415457405 +5.563529207226551 23.580091330901144 +5.713243091147648 44.106064214614285 +5.732156703585509 22.765410972607885 +5.881577831036563 42.543386570834485 +6.49969821309731 23.19226259434858 +8.45190666410784 110.34251437620108 +6.831572243363628 21.682512366000232 +8.487680924071775 96.71333189857756 +7.472929145626756 19.12576087297466 +8.75971792621872 79.16945337351581 +6.200048712703662 24.6743828383573 +7.402615887615609 93.18111884826203 +6.462447584323535 23.37021742525925 +7.556266481693862 85.03198046341785 +6.976850356083947 21.063036433744635 +7.9013614952619236 72.92914317662846 +5.935693561783784 26.081446016503662 +6.6264731178198915 76.92460585422278 +6.134088061074471 25.016509334028278 +6.796701077840081 72.60595956600945 +6.52759155123213 23.060154629985917 +7.133532226876026 65.26403745654243 +5.539018332326785 28.380781887332322 +5.754733678649822 53.35644042551472 +5.637923184274911 27.78537048540979 +5.8531393757926775 52.1654414121934 +5.836365273074264 26.63541205412136 +6.049278651792195 49.874947987451236 +5.482655032935839 28.726939384344718 +5.654367777594464 50.109083701206416 +5.567245235736965 28.20930671368488 +5.7389043109607725 49.172403331028164 +5.737074598697777 27.203472968136158 +5.907813375590606 47.354670298589866 +6.509280196438045 26.806105974784348 +8.57358098965114 115.38141770555163 +6.842201346088131 25.015794804988417 +8.586249811894938 100.9553907119389 +7.484880567451002 21.996917696503587 +8.834177096350537 82.5077531068476 +6.208365843279812 28.56970704811909 +7.503612334857728 98.57980674755039 +6.471890738652227 27.017532983917548 +7.643008692602276 89.71317477072809 +6.987846979408855 24.282904217079544 +7.970676472054642 76.71443920250192 +5.942566719061537 30.249880800662744 +6.6993744968127436 82.35299413748945 +6.142076691639461 28.97770125264692 +6.864327865611367 77.54317029388791 +6.537274398326411 26.649205351296914 +7.1927706437242 69.47009727061624 +5.542982037546719 33.00855395936682 +5.786915725451083 58.61722439117459 +5.642707236061392 32.2926028826903 +5.885540194448063 57.245445225759305 +5.842600974180932 30.91300653877413 +6.081841815517267 54.62246761924125 +5.486120195162238 33.42531127837896 +5.681439530920386 55.34550257466466 +5.571450017447021 32.80224797807597 +5.766355165712086 54.260667248212464 +5.742615011224694 31.593987683389184 +5.935804644547086 52.16531711876744 +6.519627743190933 30.33780050157473 +8.698423988605247 120.37411584447256 +6.853596915745197 28.259504282058238 +8.687182459578203 105.13555824136486 +7.497531918944331 24.771031893862318 +8.91015182290521 85.76734478008784 +6.217410270111274 32.39263205404231 +7.60913195308279 103.98371685053122 +6.48209696863982 30.58373689460796 +7.732944196362073 94.36096996197023 +6.999601027076115 27.410828947554688 +8.041943508551503 80.4326810171395 +5.950089651144731 34.35763924767947 +6.776575240411174 87.82070697518725 +6.150777716033416 32.869115502013095 +6.935378029537762 82.47917746887059 +6.547724309437524 30.155359998518264 +7.254352685122504 73.63016578858704 +5.547365459509233 37.600475590089836 +5.821284258173445 63.91605820181406 +5.6479839774831415 36.75684762586445 +5.920047367890215 62.34628246345918 +5.849443400290487 35.13524186315681 +6.116345793078564 59.36259276303899 +5.489958154839251 38.092219005916114 +5.710359872920336 60.61618226998238 +5.57609654532591 37.35723112879226 +5.795622301744594 59.36923388216671 +5.748710114740864 35.935025627046606 +5.965533347117531 56.9724460408219 +6.530605764151257 33.787044868787845 +8.82592214145656 125.30855861668016 +6.865600852464057 31.41411649297859 +8.790075435654535 109.24624770996002 +7.510695175587094 27.450118827814787 +8.987306990968788 88.94512943841461 +6.227072495658619 36.142255396681904 +7.718851883918115 109.38074997566686 +6.492934113249173 34.06844588931907 +7.825755029147258 98.96649134120338 +7.01194608536871 30.44764000196869 +8.114863879557518 84.07921862728203 +5.958179028520718 38.40345956789156 +6.858020463548179 93.32139636005421 +6.160087890885004 36.68974091511065 +7.009708616739515 87.40714996905525 +6.558804050934874 33.57837962355706 +7.31806304838767 77.7389095066354 +5.552128640682424 42.155317550231295 +5.8578901513757575 69.25246657719725 +5.653702456774405 41.17677997409467 +5.9566786672593794 67.4663720108614 +5.856819855738101 39.30078642949767 +6.152752201924086 64.092512640458 +5.494135079847531 42.72651981295289 +5.741175020559746 65.92094409157987 +5.581141698848473 41.87299217189207 +5.826727517194454 64.49701308971161 +5.75529801278038 40.22523125720152 +5.996977315515082 61.773810576619276 +6.542095810302232 37.154309552431634 +8.955594457341277 130.17479131014255 +6.8780772644319255 34.480921063868614 +8.8945595408443 113.28165280663808 +7.5242141258679105 30.036958436940733 +9.065349136305937 92.03947199450128 +6.237255068496328 39.81836288056347 +7.832427281871246 114.75962124782163 +6.504286053949266 37.472040682728036 +7.921127290347602 103.52215035703978 +7.024740234828668 33.39498223749954 +8.189164017670532 87.65080463091584 +5.966759746298032 42.386648713463686 +6.943633272251609 98.84897280243938 +6.1699150126008835 40.43922870070397 +7.087165060929372 92.32092613411217 +6.570393477333739 36.918802409678435 +7.383693637495204 81.7920931576327 +5.557234832380177 46.67216174522831 +5.896780420389613 74.62639908408106 +5.6598161028703995 45.55145873402355 +5.995447530024214 72.6045678522345 +5.864664392329313 43.40882033093332 +6.191019727779201 68.80995959869739 +5.498619848268347 47.32733961053654 +5.773927969128776 71.26001544691715 +5.5865459609055605 46.348600092225496 +5.859689111259451 69.64332707830143 +5.7623223677743525 44.46369941748129 +6.030111724217048 66.56765196289909 +6.818772082751164 4.075903942127354 +8.576682388043865 97.69093148413661 +7.183004121112221 3.823902057807342 +8.668685598967475 84.93127820465087 +7.885610687089018 3.3975082894291804 +9.031833997685348 68.63944348762458 +6.489863471253687 4.322852450134045 +7.476268540328627 77.12361080312353 +6.777878728168735 4.105587683165958 +7.683122762238294 70.28978601984214 +7.342337308172145 3.7204898734728244 +8.113534401660052 59.95299543021193 +6.199999934261706 4.556427919303697 +6.703473986557139 58.29519176901134 +6.417496547919538 4.379741159528664 +6.90741271766465 55.14647967048535 +6.849392709855746 4.053863547361905 +7.306209798966739 49.612102462238944 +5.76648635400616 4.9351861054815815 +5.882154264989343 31.481276151518372 +5.87434422070223 4.8375323497573115 +5.9910267030483455 30.85530337954039 +6.091241094699569 4.648059497139566 +6.208991104435121 29.619804657850516 +5.705108726941292 4.991803553175709 +5.79078917386365 27.768019095379664 +5.797249226670226 4.907096329173594 +5.883748373355615 27.310539151379754 +5.982643663035394 4.741790014342634 +6.070246952916052 26.402185507119608 +6.821868848993853 8.115440420920232 +8.678745118371822 102.73376053604926 +7.186545819695327 7.606172878088842 +8.750751322061255 89.29650549327238 +7.889834570040719 6.745603223674007 +9.092969569953103 72.23710580304896 +6.492478196730668 8.615059123484972 +7.557851847710254 82.44437949271703 +6.78092017767749 8.17546490859281 +7.753670965961301 75.0357642458373 +7.346050764487133 7.397340774263587 +8.169814471129067 63.959222754278464 +6.202108293077305 9.088185761276925 +6.75998316425681 63.604449353362945 +6.419992713270964 8.730239611605143 +6.960434450096048 60.09227577171472 +6.8525301189271115 8.0708770222231 +7.353047394761798 53.98749014445309 +5.7676573577625945 9.85666786861094 +5.906327088265882 36.70600120446704 +5.875771068747231 9.658375056239976 +6.015279964683782 35.95137204765573 +6.093136176337615 9.273952735104004 +6.233207621604525 34.4716878039955 +5.706126891025476 9.971685519366982 +5.811102046288729 32.99248628831854 +5.798494833493187 9.799618066850181 +5.904214899573328 32.428973331962275 +5.984311732587895 9.464071763384059 +6.090884170684928 31.316670445843076 +6.826725628369566 12.099332813982736 +8.786274618454566 107.82717679059672 +7.192063848650407 11.325298569444477 +8.837354614149223 93.6805940345139 +7.8963337896977945 10.01999471605594 +9.157872216953757 75.81777158524196 +6.496603677009305 12.860006311276097 +7.645016994292425 87.85014069639485 +6.785693758456407 12.190649921251751 +7.828765426436219 79.82239797127815 +7.3518198224831455 11.008252768981132 +8.229745555549911 67.96080017709441 +6.205452521289503 13.581638735542072 +6.820824388196751 69.00375659576734 +6.423936350980526 13.035564975245931 +7.017361983310399 65.09325721736599 +6.857447897144159 12.031549230830434 +7.403269696852642 58.37371390724922 +5.7695294708815075 14.75665724092837 +5.932364547066975 41.98760769905465 +5.878047755682786 14.453107974439991 +6.041473786935735 41.09262506572352 +6.096148096256198 13.865341394560593 +6.2594891224039095 39.34830309428248 +5.707756456578629 14.932844963046337 +5.832966796922278 38.267012917063155 +5.800485110275063 14.669298583519781 +5.926320330379352 37.58818902817844 +5.986968115318691 14.15591001309341 +6.113311004586049 36.255246346921304 +6.8331070870016575 16.015579056422286 +8.898725932729903 112.94089653320691 +7.199263022515529 14.968350158070763 +8.9279948311111 98.05695442068219 +7.9047024661031315 13.207094982705552 +9.226004347542156 79.35830387334279 +6.502059763557074 17.047024588012444 +7.737598742233711 93.31710266428142 +6.7919709510155375 16.139277960091142 +7.908138092367364 84.62608607237908 +7.359323729165014 14.540036876369857 +8.29294526041123 71.93550435395507 +6.20990135868711 18.027794883069237 +6.886085346046582 74.47831513047988 +6.429159527977123 17.28541774924015 +7.078157020686533 70.13196452213946 +6.863905618884061 15.923780082969438 +7.456675813542935 62.75142555757513 +5.7720421320826745 19.629816818671422 +5.960385144478692 47.319982299177916 +5.881096655241184 19.215335486098475 +6.069691284364868 46.271205904820825 +6.1001637461171025 18.41400832168679 +6.28785007122574 44.23904639075458 +5.709946343722144 19.870596222885546 +5.856489676366129 43.58637918871094 +5.80315467689618 19.510487598807174 +5.950144276554512 42.78149472345326 +5.990517610759958 18.809951125180277 +6.137553926661937 41.20877361479227 +6.840796489572329 19.856414673470606 +9.01553061581861 118.05055338313693 +7.207874593046776 18.527374531732722 +9.022167765778114 102.4053770182876 +7.914580186634262 16.299409191312296 +9.296854397919901 82.8427186746734 +6.508679223088344 21.168910842620146 +7.835360576375867 98.82520841758574 +6.799541054402785 20.013631516893792 +7.99147986604193 89.42807310051545 +7.368271894311355 17.984764097760326 +8.35902749812559 75.86719835156151 +6.215332287972664 22.420360527840714 +6.955799455312517 80.01618285630067 +6.4355061482467475 21.47278131160203 +7.142734435366851 75.19447932420901 +6.871682054934059 19.739773716936547 +7.513039733748118 67.10603501008096 +5.775138878945725 24.472218101612764 +5.990480907050898 52.69884162858956 +5.884845290497759 23.940407494477657 +6.099989519540803 51.4813312495577 +6.105077464241552 22.914126976411684 +6.318281282340348 49.13593182004392 +5.712648984277304 24.781466757070568 +5.881753642924818 48.94698757306254 +5.8064425475576895 24.31904072805 +5.9757435244048756 48.00403630786654 +5.994871271623852 23.42091393904944 +6.16361837782779 46.17041867434382 +6.84959742867527 23.616926829001006 +9.136122976528075 123.13621328729462 +7.217658343178286 21.997727245737916 +9.119386550094097 106.71024778667957 +7.925654132785175 19.29337850996729 +9.369952461769453 86.2599421690137 +6.51630876326126 25.22081212899268 +7.9380147205376375 104.35693591342566 +6.808212847401018 23.80878706687248 +8.078460707270791 94.21303410175739 +7.378406352962258 21.337985860087418 +8.427619392309236 79.74399412588339 +6.221632286566955 26.75488403284786 +7.029960470272956 85.60724137021451 +6.442832761687847 25.592867252454212 +7.210977699977846 80.2692746679577 +6.880576949637971 23.474628226255884 +7.5721256073222944 71.42626049748831 +5.778767265566222 29.280890010028187 +6.022726978143321 58.12117351888792 +5.889226388052133 28.62486205033027 +6.132408803332824 56.71863801741087 +6.110791573705095 27.361504016401586 +6.350758884733018 54.03275902070586 +5.715820254983218 29.662808065399062 +5.908826843347405 54.346379526406444 +5.810292076963603 29.091837497097423 +6.003160268804752 53.25222898091313 +5.9999467516993885 27.984933396118933 +6.191496675222769 51.13492483907013 +6.859334046901053 27.29423147458791 +9.25995667257333 128.1815057064513 +7.228402573033436 25.37707623760127 +9.219192514834129 110.95945643164774 +7.937657020965501 22.188081795757956 +9.444875896723287 89.60244288339123 +6.524809360311944 29.199571143985107 +8.045235237309345 109.89664264095241 +6.81781482562251 27.521812513158462 +8.16874192800137 98.96825590144219 +7.389501313372228 24.597662917352338 +8.498369683526306 83.55713832876428 +6.228697724621718 31.028248529941802 +7.108530113894767 91.24257899137926 +6.451009006481013 29.642499293938478 +7.282747616273572 85.34654080422771 +6.890411228758356 27.12549770948241 +7.6336964370430795 75.7032694913787 +5.7828789189439425 34.05356451285903 +6.05718708278474 63.58491301665542 +5.894177909676216 33.26610872363313 +6.1669779453790845 61.97980247052269 +6.11721623901858 31.753131689460048 +6.385249425420688 58.92462892585316 +5.719419260154529 34.51257273801457 +5.937767419155777 59.78295373183006 +5.814651039674701 33.82650914243226 +6.03242676048691 58.52342589230909 +6.0056680921225505 32.49917365643083 +6.221172512904825 56.098188315425126 +6.869850296002213 30.88692317439377 +9.386515609988763 133.1730308124488 +7.239922535799304 28.66473519223123 +9.321161028149096 115.14365643303826 +7.950363051850017 24.984378596617912 +9.521249673944455 92.86530064864371 +6.5340558303718055 33.10328824964847 +8.156668235561785 115.43019029344254 +6.8281945242670075 31.151230752246192 +8.261984719166676 103.6831053323044 +7.401361187017338 27.763452103249872 +8.57095287430663 87.3002625878398 +6.236434279813474 35.23834388836563 +7.191442450199408 96.9140817281236 +6.4599170868975735 33.61970078097418 +7.357888124724143 90.41775503682076 +6.901026209526999 30.691031893844336 +7.69751934822058 79.93010738725832 +5.787429024049216 38.7885038978599 +6.093916890375162 69.08871477136385 +5.8996426615227415 37.86221428828526 +6.203717486734554 67.26227887590858 +6.1242693220517275 36.086900174990205 +6.421713008007998 63.80761876923849 +5.723408332730527 39.32917491964065 +5.96862654769711 65.25577138193671 +5.819471093163006 38.52125401651493 +6.0635682088534795 63.81569130810471 +6.011965597649137 36.961581124905834 +6.252623732262991 61.05697265214148 +6.881008641810265 34.39468598935801 +9.515320631375374 138.09990836319218 +7.252058138814728 31.861193204929226 +9.424903800321994 119.25571255584389 +7.963583214824822 27.684321438259737 +9.598744097177024 96.04554147577457 +6.543936101318581 36.93101308414 +8.271940420339668 120.9447169831038 +6.839217302584333 34.696640053743124 +8.35785595944015 108.34865788584015 +7.413817807473528 30.836204926214034 +8.645070757582017 90.9688407359856 +6.2447563044038565 39.383831222569064 +7.278606511767388 102.61414381423103 +6.469451212830693 37.523404994943554 +7.436230252767525 95.47538227052206 +6.912282241421659 34.170979983253595 +7.763368871934121 84.10129420291871 +5.792376421029868 43.484387713923226 +6.132966284216759 74.63178933699089 +5.90556814322713 42.411760110317694 +6.242641831221388 72.56411178372423 +6.131876021116344 40.361392252975364 +6.4601053376958655 68.67855063831658 +5.727752616347529 44.11138479290756 +6.001450500080353 70.76441541325549 +5.8247078206459495 43.17471551192747 +6.0966047277008695 69.12763777591978 +6.0187755193221975 41.37070859833498 +6.285824150602574 66.00870567649397 +6.892688392052893 37.81800680214632 +9.645933216235994 142.95341413869465 +7.2646717066719715 34.967779479496265 +9.530069386885387 123.29027953823935 +7.9771604598080605 30.29074199823282 +9.677071578205629 99.1416532685685 +6.554350306925338 40.6825168338049 +8.390666861079128 126.42850672009465 +6.850764759990474 38.15843414812498 +8.456032829617937 112.95742906832864 +7.4267277021859295 33.817611866618485 +8.720452458175483 94.5597879876209 +6.253586475725057 43.46397183451993 +7.369908066210068 108.3354695211715 +6.479516779644679 41.35324079197711 +7.517594982132029 100.51266249954433 +6.924056967607245 37.565899006826726 +7.8310290467489 88.21252714340679 +5.797683148413959 48.140226269278415 +6.174380896879521 80.21377649912382 +5.91190625448385 46.913734646116964 +6.283760683287785 77.88379387862335 +6.139968335147441 44.575731813263054 +6.500379113907963 73.5348224314952 +5.732419982430514 48.858258533246065 +6.036282087396467 76.30888309772806 +5.830320394279175 47.78589088286285 +6.131552668013755 74.45830272801747 +6.026039708698575 45.725586211309235 +6.320744790710411 70.95132905099797 +7.166499288451092 4.142073090859587 +9.265102481702996 110.66723608077035 +7.567697412920115 3.8722615360981636 +9.301713047250376 95.00516227994558 +8.33782803853016 3.4223240862995086 +9.642092311073492 75.74617433098464 +6.803038358551734 4.409007603619208 +8.001816775091902 88.19678682585909 +7.121369048628273 4.174032307935983 +8.1992535509534 79.41794300190767 +7.742766362468542 3.7623579314461923 +8.636965361141595 66.74160040647384 +6.4819096017460724 4.663505297574643 +7.090607474266351 66.54215881833834 +6.722930831695338 4.470823303345824 +7.309279558219274 62.50706375766059 +7.200281127183776 4.118366597954716 +7.737424253590776 55.610380843297776 +6.000693683822239 5.079521034872208 +6.137170192329095 35.53705023704585 +6.120479496277977 4.971930845119692 +6.2580658070398085 34.76677553684624 +6.36126184481861 4.763810827037095 +6.4997835001461155 33.2518749822321 +5.932524657497255 5.1419869613173255 +6.0331373974513784 31.26606278237569 +6.034860107424434 5.048552722695147 +6.136421391289259 30.70699037507293 +6.240728719059953 4.866653657563574 +6.343472009811439 29.599221573250297 +7.169633216600948 8.246963072641893 +9.369559138551592 115.71968848047702 +7.571266472399731 7.702163496479056 +9.38512344647803 99.37895398059513 +8.342063711209846 6.794734336636792 +9.703729337066198 79.34857390201475 +6.805697352441557 8.786527313263322 +8.089664384006618 93.66466498891512 +7.1244486991551 8.311531854294053 +8.273448118333953 84.2426381742825 +7.746503030939467 7.480397207139309 +8.69475960079198 70.77803241288063 +6.484064255697698 9.301543562357782 +7.1522203715098716 72.04598443334285 +6.725472265851035 8.911565932252547 +7.366196040846758 67.58997603808601 +7.203454903588541 8.199072972710589 +7.786573215678005 60.058785063461116 +6.001899781828435 10.144791140944223 +6.163238215914125 40.94360543606153 +6.121946277820355 9.926538157739603 +6.2841504557510595 40.028232834984 +6.3632023173843395 9.50469774860775 +6.525673242563564 38.239969854871994 +5.933574465050085 10.271563962489727 +6.055001573381491 36.67047244267007 +6.036142343788488 10.081957466807292 +6.158409571366394 35.992368826013184 +6.242440107899849 9.713095265508427 +6.365547626329679 34.65681546790168 +7.17455015383191 12.294891936592329 +9.479135319313295 120.81550242698152 +7.576828540740798 11.467755039719629 +9.472922346036952 103.76877942156183 +8.348581703300848 10.09265441768957 +9.769086540111767 82.93318608765013 +6.8098948752906665 13.115416567967156 +8.183043890960116 99.21243552274656 +7.129284159403308 12.393010040146889 +8.352098879218879 89.10402851757347 +7.752309358985038 11.13141449226836 +8.756139945167465 74.80785601116908 +6.487484186795503 13.899970428712527 +7.2183408065351555 77.64253419299327 +6.729489662928856 13.305768849428079 +7.427084913974571 72.72763590811343 +7.2084315247877635 12.222130928776059 +7.839092321029147 64.51617079023508 +6.003829712093032 15.187664042559 +6.191254757921958 46.41082723193424 +6.124288623920555 14.85398875762931 +6.3122501536785505 45.33748570594586 +6.366288598440117 14.209834863264035 +6.553683846485456 43.253688129980375 +5.935256217996095 15.381608954167652 +6.078484425983943 42.128359969853804 +6.038192934679376 15.091572429442085 +6.182099170180582 41.32106112640432 +6.245167588411863 14.5279338110808 +6.389465535565342 39.73963818350563 +7.181012733872813 16.27351447951422 +9.59326677641476 125.92467701277123 +7.584086675268948 15.155818834922346 +9.56459923216978 108.14813378844673 +8.35697518159283 13.302320922728093 +9.837623129185623 86.47688407649207 +6.81544876767024 17.384632263376517 +8.281708305632678 104.81433764098533 +7.135644864267984 16.406253835101857 +8.434894805217763 93.97764294156815 +7.759863013658684 14.701958900114008 +8.820708673794373 78.8085957515861 +6.492036436114129 18.449423946507814 +7.2890241806377185 83.31550431722044 +6.734813126402034 17.642756423674776 +7.491875642240841 77.90137931372755 +7.214968545921615 16.175101262839863 +7.89475847268894 68.96253662514125 +6.006422108142317 20.202531941845336 +6.221338051760357 51.93217207351944 +6.12742785521823 19.747578186889104 +6.342445424163306 50.68614914496861 +6.37040606516053 18.870647434042585 +6.5838237688764725 48.28181198669522 +5.937518176431157 20.467192624362024 +6.103692698140513 47.63415091681678 +6.040945622450815 20.07146489610171 +6.20756869439985 46.68593542136009 +6.24881466524676 19.30347810486343 +6.41524845462156 44.83801182912499 +7.188801955277015 20.174829161190225 +9.711385025387063 131.02345141640026 +7.592770199074986 18.758212796412995 +9.659648525001606 112.49701640986895 +8.366882721634646 16.41613620234869 +9.90882724316716 89.96373179865813 +6.8221895133110015 21.58670125797887 +8.385347239834106 110.44868952392264 +7.1433178253964 20.343303735354095 +8.521492243575938 98.84411394941118 +7.768871677653259 18.183933860987825 +8.888069555139248 82.76398671864524 +6.497596522617691 22.943332688903038 +7.364270421826129 89.0515077286487 +6.741284316925525 21.915237568641764 +7.56045240266752 83.09622299338258 +7.22284248991074 20.04995483976802 +7.953327048838093 73.38279551725483 +6.009619559612319 25.185252332283653 +6.253579799926831 57.50296733380109 +6.131290256946878 24.602415010931313 +6.374790658596158 56.067962511167465 +6.37544730033358 23.481036787121145 +6.616077931408115 53.31581822861734 +5.9403119861904985 25.524648205338096 +6.130709810436756 53.18393265366841 +6.044338389965273 25.017267752718364 +6.23487376548102 52.08174443318374 +6.253290878348022 24.03418661461706 +6.442898077054891 49.94463106036305 +7.197719063083529 23.993765274076527 +9.832939659427325 136.09272320864213 +7.6026369487758965 22.270176711754363 +9.75758842252144 116.8001051919121 +8.37799051978373 19.430490458431724 +9.982230687226444 93.38272658645754 +6.8299614142043525 25.716578525793505 +8.493607825115175 116.09669302263833 +7.152109447431871 24.199073668088776 +8.611534362186605 103.68772976907279 +7.779075661154854 21.572792295317896 +8.957843729496396 86.66210750003732 +6.504049321026269 27.37703697178141 +7.444038250732146 94.83902800035973 +6.748757457659181 26.118226147021907 +7.6326693511098105 88.29969939483722 +7.231850777197515 23.841635419875193 +8.01454671952858 77.7652987913325 +6.013368575435365 30.132682143589356 +6.28805462007011 63.119837736224774 +6.135807202596793 29.414846519689938 +6.4093232912841485 61.47812097694455 +6.381312727644595 28.03660194858521 +6.650416567585694 58.34902740053262 +5.943592671709383 30.55116972639428 +6.159604243928604 58.77495689682996 +6.048313455191952 29.925682350431213 +6.264055257704169 57.50454300670235 +6.258512238874494 28.715992098144064 +6.4724028942080665 55.05381743453956 +7.207585884052028 27.727341930331292 +9.957411295892838 141.1170937909097 +7.613473336968968 25.689317923127845 +9.85796999834827 121.0456302559583 +8.39003037856016 22.344448731044704 +10.057413849894786 96.72641991818212 +6.838623016996434 29.770975745513283 +8.60610896611771 121.74178204661611 +7.161845877869932 27.970530352494166 +8.704663002549378 108.4955895069877 +7.790247516625787 24.86644790887819 +9.029677285871152 90.49424243534385 +6.511289041022429 31.747266842043164 +7.528252838995679 100.66780283427418 +6.757099746994475 30.248408054795895 +7.7083594445094175 93.50117678027829 +7.241812044001049 27.547203497142462 +8.078167858286802 82.10095747398636 +6.017619693939304 35.042414856214094 +6.324825463074243 68.78037357132636 +6.140915237103194 34.182131776083594 +6.446068983190188 66.91288568452559 +6.387910548632161 32.534178521788 +6.686800291175061 63.37610961544048 +5.947318417046172 35.544581309724386 +6.190434326530134 64.40535354156161 +6.052817413853588 34.79419730032717 +6.295143908616101 62.95134891594664 +6.264401078584577 33.34590249569342 +6.503742667671829 60.161085924589365 +7.218244154702733 31.374104168709625 +10.084318893441349 146.08419718436872 +7.6250928562597675 29.014931080428067 +9.960381558393278 125.22460635398241 +8.402775682919566 25.158883030445377 +10.134005542755876 99.98997884568158 +6.848046767808494 33.74791079358061 +8.722452531857016 127.36924524310672 +7.172372399051334 31.656143217812005 +8.800526608348617 113.25704174008122 +7.802190126927757 28.064548741655926 +9.103244761073016 94.25411363644531 +6.519219196175476 36.05180359283138 +7.616810459006525 106.52842302115181 +6.766191054629009 34.303716996832705 +7.787340480408753 98.69142654715408 +7.252565422688825 31.165262171487736 +8.143947572708695 86.38265534628772 +6.022326952653258 39.91260123977614 +6.363946913528104 74.48289711344867 +6.146555718007617 38.902219665624855 +6.485044821010091 72.369316565796 +6.395156668185356 36.971541491231655 +6.725183228960258 68.39275276142095 +5.951450616666412 40.503192544433674 +6.223251219840947 70.0739284725313 +6.05780068561414 39.620896930738446 +6.3281631925302015 68.41991077139664 +6.270885972705895 37.92174557671438 +6.536891191690739 65.26285303808 +7.229554271189959 34.93372314727412 +10.213223216442161 150.98418501968192 +7.637333814823047 32.247517135745696 +10.064449657149213 129.33025838391805 +8.416036712843086 27.875876426393194 +10.211680322686723 103.17051525744768 +6.858118325896707 37.646389379211314 +8.84223254628074 132.96598559829994 +7.183552260712182 35.25549415087842 +8.898785498783663 117.96328860990214 +7.814733950730997 31.167965471095023 +9.178250037502428 97.93732187647169 +6.527752069631152 40.28923588528229 +7.709581536130491 112.41205499477125 +6.775923324907824 38.28303497072192 +7.869419330259032 103.86232332094082 +7.263969226232369 34.695550262866064 +8.211652781749132 90.6048317747542 +6.027448060652269 44.741832170743 +6.405467405922438 80.22629352385458 +6.152674695929106 43.573600939942146 +6.526261419113251 77.84508007780047 +6.402974341880639 41.347192380591196 +6.765515070006527 73.39542581799162 +5.955953447437106 45.42568861501522 +6.258100964153727 75.78001985306011 +6.0632176229919255 44.40433487486765 +6.363131244666489 73.90854041953203 +6.277901453032079 42.44198640149965 +6.571818121992672 70.35622867743038 +7.241393645102208 38.4067007330369 +10.343727768496834 155.80931313835077 +7.650057103646967 35.38843994070083 +10.16983859173614 133.35758419731857 +8.429655814819245 30.498303099989876 +10.290154985670352 106.26659794758851 +6.868735694249435 41.466169469326516 +8.965043126401474 138.52036582179628 +7.195265121897812 38.76898885886508 +8.999115751269951 122.60708886341597 +7.827734298094775 34.178427932156644 +9.254425892840977 101.54093340365834 +6.536808271909618 44.458782049110425 +7.806412999469502 118.31025821941807 +6.78619981741046 42.18597034059276 +7.954395026235261 109.00663070050022 +7.275899235851666 38.13864193025107 +8.28106209311133 94.76317124310944 +6.032943918733476 49.5290482119846 +6.4494307316223525 86.00988079138898 +6.159222643358743 48.19519608789226 +6.5697243439810045 83.33830349339019 +6.411293683695386 45.66020172346611 +6.807742482504549 78.38120636793518 +5.960793832071986 50.31105751734546 +6.295025895792237 81.52338686288314 +6.069026180652642 49.14343860308781 +6.40006218606778 79.41598665913952 +6.28538769085406 46.905593113860355 +6.608490219514957 75.43886254584096 \ No newline at end of file diff --git a/drone_simulation/include/config_loaders/factory.hpp b/drone_simulation/include/config_loaders/factory.hpp index 183a2f2..7b5a077 100644 --- a/drone_simulation/include/config_loaders/factory.hpp +++ b/drone_simulation/include/config_loaders/factory.hpp @@ -1,14 +1,18 @@ #pragma once #include +#include #include "simulation.hpp" #include "interfaces/ballistic_solver.hpp" #include "interfaces/target_provider.hpp" #include "interfaces/config_loader.hpp" -enum class SolverType { ANALYTICAL }; +enum class SolverType { + ANALYTICAL, + TABLE +}; enum class ProviderType { JSON }; enum class LoaderType { FILE }; -IBallisticSolver* createSolver(SolverType type, const DroneConfig& config); -ITargetProvider* createProvider(ProviderType type, const std::string path); -IConfigLoader* createLoader(LoaderType type, const std::string c, const std::string a); \ No newline at end of file +std::unique_ptr createSolver(SolverType type, const DroneConfig& config, const std::string tablePath = ""); +std::unique_ptr createProvider(ProviderType type, const std::string path); +std::unique_ptr createLoader(LoaderType type, const std::string c, const std::string a); \ No newline at end of file diff --git a/drone_simulation/include/drone_states/state_accelerating.hpp b/drone_simulation/include/drone_states/state_accelerating.hpp new file mode 100644 index 0000000..f35e879 --- /dev/null +++ b/drone_simulation/include/drone_states/state_accelerating.hpp @@ -0,0 +1,11 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateAccelerating : public IDroneState { + public: + static constexpr const char* NAME = "ACCELERATING"; + StateAccelerating(); + + auto execute(DroneContext& ctx) -> std::unique_ptr override; + auto name() const -> std::string override; +}; \ No newline at end of file diff --git a/drone_simulation/include/drone_states/state_decelerating.hpp b/drone_simulation/include/drone_states/state_decelerating.hpp new file mode 100644 index 0000000..583889b --- /dev/null +++ b/drone_simulation/include/drone_states/state_decelerating.hpp @@ -0,0 +1,11 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateDecelerating : public IDroneState { + public: + static constexpr const char* NAME = "DECELERATING"; + StateDecelerating(); + + auto execute(DroneContext& context) -> std::unique_ptr override; + auto name() const -> std::string override; +}; \ No newline at end of file diff --git a/drone_simulation/include/drone_states/state_moving.hpp b/drone_simulation/include/drone_states/state_moving.hpp new file mode 100644 index 0000000..bd95d1c --- /dev/null +++ b/drone_simulation/include/drone_states/state_moving.hpp @@ -0,0 +1,11 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateMoving : public IDroneState { + public: + static constexpr const char* NAME = "MOVING"; + StateMoving(); + + auto execute(DroneContext& context) -> std::unique_ptr override; + auto name() const -> std::string override; +}; \ No newline at end of file diff --git a/drone_simulation/include/drone_states/state_stopped.hpp b/drone_simulation/include/drone_states/state_stopped.hpp new file mode 100644 index 0000000..20f1223 --- /dev/null +++ b/drone_simulation/include/drone_states/state_stopped.hpp @@ -0,0 +1,11 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateStopped : public IDroneState { + public: + static constexpr const char* NAME = "STOPPED"; + StateStopped(); + + auto execute(DroneContext& context) -> std::unique_ptr override; + auto name() const -> std::string override; +}; \ No newline at end of file diff --git a/drone_simulation/include/drone_states/state_turning.hpp b/drone_simulation/include/drone_states/state_turning.hpp new file mode 100644 index 0000000..84a060b --- /dev/null +++ b/drone_simulation/include/drone_states/state_turning.hpp @@ -0,0 +1,11 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateTurning : public IDroneState { + public: + static constexpr const char* NAME = "TURNING"; + StateTurning(); + + auto execute(DroneContext& context) -> std::unique_ptr override; + auto name() const -> std::string override; +}; \ No newline at end of file diff --git a/drone_simulation/include/interfaces/drone_state.hpp b/drone_simulation/include/interfaces/drone_state.hpp new file mode 100644 index 0000000..462522a --- /dev/null +++ b/drone_simulation/include/interfaces/drone_state.hpp @@ -0,0 +1,17 @@ +#pragma once +#include +#include +#include "simulation.hpp" + +class IDroneState { +public: + virtual ~IDroneState() = default; + + // Виконати логіку стану, повернути наступний стан. + // Якщо стан не змінився — повернути nullptr + // (головний цикл залишить поточний). + virtual std::unique_ptr execute(DroneContext& context) = 0; + + virtual std::string name() const = 0; +}; + diff --git a/drone_simulation/include/mission_processor.hpp b/drone_simulation/include/mission_processor.hpp index e904284..80ff1b0 100644 --- a/drone_simulation/include/mission_processor.hpp +++ b/drone_simulation/include/mission_processor.hpp @@ -2,31 +2,35 @@ #include "interfaces/ballistic_solver.hpp" #include "interfaces/config_loader.hpp" #include "interfaces/target_provider.hpp" +#include "interfaces/drone_state.hpp" class MissionProcessor { const int MAX_STEPS = 10000; - ITargetProvider* targets; - IBallisticSolver* ballisticSolver; + std::unique_ptr targets; + std::unique_ptr ballisticSolver; DroneConfig droneConfig; AmmoParams ammo; - DroneMotion droneMotion; + DroneContext droneContext; int currentStep = 1; int prevTargetIndex = -1; float currentTime = 0.0f; - float prevDirToTarget; float ammoFlightTime; float ammoHorizontalFlightDistance; - float acceleration; bool hit = false; + std::unique_ptr state; public: - MissionProcessor(ITargetProvider* targetProvider, IBallisticSolver* solver); + MissionProcessor(std::unique_ptr targetProvider, std::unique_ptr solver); - auto init(IConfigLoader* configLoader) -> void; + auto init(std::unique_ptr configLoader) -> void; auto hasNext() -> bool; auto getCurrentStep() -> int; auto step() -> SimulationStep; auto reset() -> void; - auto changeSolver(IBallisticSolver* ballisticSolver) -> void; + auto changeSolver(std::unique_ptr ballisticSolver) -> void; + + private: + auto evaluateTarget(int targetIndex, float currentTime, Coord& outFireCoord) -> float; + auto getSimulationStep(int targetIndex, const Coord& fireCoord) -> SimulationStep; }; \ No newline at end of file diff --git a/drone_simulation/include/simulation.hpp b/drone_simulation/include/simulation.hpp index 54cf3f3..9b449f3 100644 --- a/drone_simulation/include/simulation.hpp +++ b/drone_simulation/include/simulation.hpp @@ -7,14 +7,6 @@ using json = nlohmann::json; -enum DroneState { - STOPPED, - ACCELERATING, - DECELERATING, - TURNING, - MOVING -}; - struct Coord { float x; float y; @@ -76,22 +68,29 @@ struct DroneConfig { float turnThreshold; }; -struct DroneMotion { +struct DroneContext { + float directionToTarget; + float prevDirectionToTarget; float speed = 0.0f; - float dir; - Coord pos; - DroneState state = STOPPED; + float direction; + float acceleration; + float timeToStop; + Coord position; + const DroneConfig* config; }; struct SimulationStep { + bool hit = false; int target; + float droneSpeed = 0.0f; + float droneDirection; Coord dropPoint; Coord aimPoint; Coord predictedTarget; - DroneMotion droneMotion; + Coord dronePosition; + std::string droneState; }; - float getDistanceToTarget( const Coord& target, const Coord& posiiton ); @@ -123,44 +122,9 @@ float turnDrone( float droneDir ); -float getTimeToStop( - const float& attackSpeed, - const float& acceleration, - const float& prevDirToTarget, - const float& angularSpeed, - const DroneMotion& droneMotion -); - float getRatio(const float& distanceToTarget, const float& ammoHorizontalFlightDistance); - -DroneState updateDroneState( - const DroneState& droneState, - const float& deltaAngle, - const float& turnThreshold, - const float& droneSpeed, - const float& attackSpeed -); - -DroneMotion updateDroneVelocity( - const float& acceleration, - const float& simTimeStep, - const float& attackSpeed, - const float& angularSpeed, - const float& deltaAngle, - DroneMotion droneMotion -); - - -DroneMotion updateDroneMotion( - const float& acceleration, - const float& simTimeStep, - const float& attackSpeed, - const float& angularSpeed, - const float& dirToTarget, - const float& turnThreshold, - DroneMotion droneMotion -); +auto updateDronePosition(const DroneContext& context) -> Coord; float getManeuveringTime( const float& distanceToTarget, @@ -171,7 +135,7 @@ float getManeuveringTime( ); Coord getBombLandCoord( - DroneMotion& droneMotion, + const DroneContext& droneContext, const float& ammoHorizontalFlightDistance ); diff --git a/drone_simulation/include/solvers/ballistic_table.hpp b/drone_simulation/include/solvers/ballistic_table.hpp new file mode 100644 index 0000000..a72080d --- /dev/null +++ b/drone_simulation/include/solvers/ballistic_table.hpp @@ -0,0 +1,168 @@ +#pragma once +#include +#include +#include +#include + + +// Результат в кожному вузлі сітки +struct Result { + float t; // час польоту + float hDist; // горизонтальна дистанція +}; + +// Індекс і коефіцієнт для одного виміру +struct Interp { + int lo; // нижній індекс в осі + float frac; // коефіцієнт [0..1] +}; + +struct BallisticTable { + // 5 осей — кожна зі своїм набором вузлів (нерівномірний крок) + std::vector axisZ0; // висота + std::vector axisV0; // швидкість + std::vector axisM; // маса + std::vector axisD; // опір + std::vector axisL; // підйомна сила + + // Плоский масив розміром |Z0| * |V0| * |M| * |D| * |L| + std::vector data; + + // Індекс у плоскому масиві: [iZ0][iV0][iM][iD][iL] + size_t index(int iz, int iv, int im, int id, int il) const { + return ((((size_t)iz * axisV0.size() + iv) + * axisM.size() + im) + * axisD.size() + id) + * axisL.size() + il; + } + + const Result& at(int iz, int iv, int im, int id, int il) const { + return data[index(iz, iv, im, id, il)]; + } + + // Завантаження з текстового файлу + bool load(const std::string path) { + std::ifstream dataFile(path); + if (!dataFile.is_open()) { + return false; + } + + int nZ, nV, nM, nD, nL; + dataFile >> nZ >> nV >> nM >> nD >> nL; + + axisZ0.resize(nZ); + for (auto& v : axisZ0) { + dataFile >> v; + } + axisV0.resize(nV); + for (auto& v : axisV0) { + dataFile >> v; + } + axisM.resize(nM); + for (auto& v : axisM) { + dataFile >> v; + } + axisD.resize(nD); + for (auto& v : axisD) { + dataFile >> v; + } + axisL.resize(nL); + for (auto& v : axisL) { + dataFile >> v; + } + + size_t total = (size_t)nZ*nV*nM*nD*nL; + data.resize(total); + + // Порядок: Z0 → V0 → m → d → l (зовнішній → внутрішній) + for (size_t i = 0; i < total; i++) { + dataFile >> data[i].t >> data[i].hDist; + } + + return dataFile.good(); + } + + Result lookup( + float Z0, float V0, float mass, float drag, float lift + ) const + { + Interp iz = findInterp(Z0, axisZ0); + Interp iv = findInterp(V0, axisV0); + Interp im = findInterp(mass, axisM); + Interp id = findInterp(drag, axisD); + Interp il = findInterp(lift, axisL); + + // 2^5 = 32 вершини гіперкуба + // Згортаємо: 32 → 16 → 8 → 4 → 2 → 1 + + // l: 32 → 16 + Result v[16]; + for (int a = 0; a < 2; a++) { + for (int b = 0; b < 2; b++) { + for (int c = 0; c < 2; c++) { + for (int e = 0; e < 2; e++) { + auto& lo = at(iz.lo+a, iv.lo+b, im.lo+c, id.lo+e, il.lo); + auto& hi = at(iz.lo+a, iv.lo+b, im.lo+c, id.lo+e, il.lo+1); + v[a*8+b*4+c*2+e] = lerp(lo, hi, il.frac); + } + } + } + } + + // d: 16 → 8 + Result w[8]; + for (int a = 0; a < 2; a++) { + for (int b = 0; b < 2; b++) { + for (int c = 0; c < 2; c++) { + w[a*4+b*2+c] = lerp(v[a*8+b*4+c*2], v[a*8+b*4+c*2+1], id.frac); + } + } + } + + // m: 8 → 4 + Result u[4]; + for (int a = 0; a < 2; a++) { + for (int b = 0; b < 2; b++) { + u[a*2+b] = lerp(w[a*4+b*2], w[a*4+b*2+1], im.frac); + } + } + + // V0: 4 → 2 + Result s[2]; + for (int a = 0; a < 2; a++) { + s[a] = lerp(u[a*2], u[a*2+1], iv.frac); + } + + // Z0: 2 → 1 + return lerp(s[0], s[1], iz.frac); + } + + // Лінійна інтерполяція для Result (обидва поля паралельно) + Result lerp(const Result& a, const Result& b, float t) const { + return { + .t = a.t + (b.t - a.t) * t, + .hDist = a.hDist + (b.hDist - a.hDist) * t + }; + } + + Interp findInterp(float val, const std::vector& axis) const { + if (val <= axis.front()){ + + return {0, 0.0f}; + } + if (val >= axis.back()){ + + return {(int)axis.size() - 2, 1.0f}; + } + + auto it = std::lower_bound(axis.begin(), axis.end(), val); + int i = (int)(it - axis.begin()) - 1; + if (i < 0) { + i = 0; + } + float frac = (val - axis[i]) / (axis[i+1] - axis[i]); + + return {i, frac}; + } + +}; diff --git a/drone_simulation/include/solvers/table_solver.hpp b/drone_simulation/include/solvers/table_solver.hpp new file mode 100644 index 0000000..75e19b5 --- /dev/null +++ b/drone_simulation/include/solvers/table_solver.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "interfaces/ballistic_solver.hpp" +#include "ballistic_table.hpp" + +class TableSolver : public IBallisticSolver { + DroneConfig droneConfig; + BallisticTable table; + + public: + TableSolver(const DroneConfig& config, std::string table_path); + + auto solve( + const Coord& dronePosition, + const Coord& targetPosition, + const AmmoParams& ammo + ) -> Coord override; +}; \ No newline at end of file diff --git a/drone_simulation/src/config_loaders/factory.cpp b/drone_simulation/src/config_loaders/factory.cpp index 675266e..6ac190f 100644 --- a/drone_simulation/src/config_loaders/factory.cpp +++ b/drone_simulation/src/config_loaders/factory.cpp @@ -1,31 +1,35 @@ #include "simulation.hpp" #include "config_loaders/factory.hpp" #include "solvers/analytical_solver.hpp" +#include "solvers/table_solver.hpp" #include "providers/json_target_provider.hpp" #include "config_loaders/file_config_loader.hpp" -auto createSolver(SolverType type, const DroneConfig& config) -> IBallisticSolver* { +auto createSolver(SolverType type, const DroneConfig& config, const std::string tablePath) -> std::unique_ptr { switch (type) { case SolverType::ANALYTICAL: - return new AnalyticalSolver(config); + return std::make_unique(config); + + case SolverType::TABLE: + return std::make_unique(config, tablePath); } return nullptr; } -auto createProvider(ProviderType type, const std::string param) -> ITargetProvider* { +auto createProvider(ProviderType type, const std::string param) -> std::unique_ptr { switch (type) { case ProviderType::JSON: - return new JsonTargetProvider(param); + return std::make_unique(param); } return nullptr; } -auto createLoader(LoaderType type, const std::string droneConfigPath, const std::string ammoConfigPath) -> IConfigLoader* { +auto createLoader(LoaderType type, const std::string droneConfigPath, const std::string ammoConfigPath) -> std::unique_ptr { switch (type) { case LoaderType::FILE: - return new FileConfigLoader(droneConfigPath, ammoConfigPath); + return std::make_unique(droneConfigPath, ammoConfigPath); } return nullptr; diff --git a/drone_simulation/src/drone_states/state_accelerating.cpp b/drone_simulation/src/drone_states/state_accelerating.cpp new file mode 100644 index 0000000..bc0916e --- /dev/null +++ b/drone_simulation/src/drone_states/state_accelerating.cpp @@ -0,0 +1,35 @@ +#include +#include "drone_states/state_accelerating.hpp" +#include "drone_states/state_moving.hpp" +#include "simulation.hpp" + + +StateAccelerating::StateAccelerating() {} + +auto StateAccelerating::execute(DroneContext& context) -> std::unique_ptr { + + float deltaAngle = normalizeAngle(context.directionToTarget - context.direction); + context.speed += context.acceleration * context.config->simTimeStep; + + if (context.speed > context.config->attackSpeed) { + context.speed = context.config->attackSpeed; + } + + context.timeToStop = context.speed / context.acceleration; + + if (fabs(deltaAngle) > 1e-3f && fabs(deltaAngle) <= context.config->turnThreshold) { + context.direction = turnDrone(deltaAngle, context.config->angularSpeed, context.config->simTimeStep, context.direction); + } + + context.position = updateDronePosition(context); + + if (context.speed >= context.config->attackSpeed) { + return std::make_unique(); + } + + return nullptr; +} + +auto StateAccelerating::name() const -> std::string { + return NAME; +} \ No newline at end of file diff --git a/drone_simulation/src/drone_states/state_decelerating.cpp b/drone_simulation/src/drone_states/state_decelerating.cpp new file mode 100644 index 0000000..e85e4cd --- /dev/null +++ b/drone_simulation/src/drone_states/state_decelerating.cpp @@ -0,0 +1,31 @@ +#include +#include "drone_states/state_decelerating.hpp" +#include "drone_states/state_stopped.hpp" +#include "drone_states/state_accelerating.hpp" +#include "simulation.hpp" + +StateDecelerating::StateDecelerating() {} + +auto StateDecelerating::execute(DroneContext& context) -> std::unique_ptr { + float deltaAngle = normalizeAngle(context.directionToTarget - context.direction); + context.position = updateDronePosition(context); + context.speed -= context.acceleration * context.config->simTimeStep; + context.timeToStop = context.speed / context.acceleration; + + if (context.speed <= 1e-3f) { + context.speed = 0; + context.timeToStop = 0; + + return std::make_unique(); + } + + if (std::fabs(deltaAngle) <= context.config->turnThreshold) { + return std::make_unique(); + } + + return nullptr; +} + +auto StateDecelerating::name() const -> std::string { + return NAME; +} \ No newline at end of file diff --git a/drone_simulation/src/drone_states/state_moving.cpp b/drone_simulation/src/drone_states/state_moving.cpp new file mode 100644 index 0000000..bfa1a10 --- /dev/null +++ b/drone_simulation/src/drone_states/state_moving.cpp @@ -0,0 +1,28 @@ +#include +#include "drone_states/state_moving.hpp" +#include "drone_states/state_decelerating.hpp" +#include "simulation.hpp" + + +StateMoving::StateMoving() {} + +auto StateMoving::execute(DroneContext& context) -> std::unique_ptr { + float deltaAngle = normalizeAngle(context.directionToTarget - context.direction); + + if (fabs(deltaAngle) > 1e-3f && fabs(deltaAngle) <= context.config->turnThreshold) { + context.direction = turnDrone(deltaAngle, context.config->angularSpeed, context.config->simTimeStep, context.direction); + } + + context.timeToStop = context.config->attackSpeed / context.acceleration; + context.position = updateDronePosition(context); + + if (fabs(deltaAngle) > context.config->turnThreshold) { + return std::make_unique(); + } + + return nullptr; +} + +auto StateMoving::name() const -> std::string { + return NAME; +} \ No newline at end of file diff --git a/drone_simulation/src/drone_states/state_stopped.cpp b/drone_simulation/src/drone_states/state_stopped.cpp new file mode 100644 index 0000000..fe67266 --- /dev/null +++ b/drone_simulation/src/drone_states/state_stopped.cpp @@ -0,0 +1,26 @@ +#include +#include "drone_states/state_stopped.hpp" +#include "drone_states/state_turning.hpp" +#include "drone_states/state_accelerating.hpp" +#include "simulation.hpp" + +StateStopped::StateStopped() {} + +auto StateStopped::execute(DroneContext& context) -> std::unique_ptr +{ + float deltaAngle = normalizeAngle(context.directionToTarget - context.direction); + context.timeToStop = 0; + + if (std::fabs(deltaAngle) > context.config->turnThreshold) { + + return std::make_unique(); + } + + return std::make_unique(); +} + + +auto StateStopped::name() const -> std::string +{ + return NAME; +} \ No newline at end of file diff --git a/drone_simulation/src/drone_states/state_turning.cpp b/drone_simulation/src/drone_states/state_turning.cpp new file mode 100644 index 0000000..85697bc --- /dev/null +++ b/drone_simulation/src/drone_states/state_turning.cpp @@ -0,0 +1,25 @@ +#include +#include "drone_states/state_turning.hpp" +#include "drone_states/state_accelerating.hpp" +#include "simulation.hpp" + + +StateTurning::StateTurning() {} + +auto StateTurning::execute(DroneContext& context) -> std::unique_ptr { + float deltaAngle = normalizeAngle(context.directionToTarget - context.direction); + context.direction = turnDrone( + deltaAngle, context.config->angularSpeed, context.config->simTimeStep, context.direction + ); + context.timeToStop = fabs(normalizeAngle(context.prevDirectionToTarget - context.direction)) / context.config->angularSpeed; + + if (std::fabs(deltaAngle) <= context.config->turnThreshold) { + return std::make_unique(); + } + + return nullptr; +} + +auto StateTurning::name() const -> std::string { + return NAME; +} diff --git a/drone_simulation/src/main.cpp b/drone_simulation/src/main.cpp index 577779e..a2e6d72 100644 --- a/drone_simulation/src/main.cpp +++ b/drone_simulation/src/main.cpp @@ -5,6 +5,7 @@ #include "simulation.hpp" #include "mission_processor.hpp" #include "config_loaders/factory.hpp" +#include "drone_states/state_stopped.hpp" using json = nlohmann::json; @@ -25,39 +26,36 @@ using json = nlohmann::json; auto main(int argc, char* argv[]) -> int { - bool failed = false; - IConfigLoader* loader = nullptr; - ITargetProvider* targets = nullptr; - IBallisticSolver* ballisticSolver = nullptr; - std::vector simSteps; + try { + const std::string configPath = (argc > 1) ? argv[1] : "config.json"; + const std::string ammoPath = (argc > 2) ? argv[2] : "ammo.json"; + const std::string targetsPath = (argc > 3) ? argv[3] : "targets.json"; + const std::string solverArg = (argc > 4) ? argv[4] : "analytical"; + const std::string ballisticTablePath = (argc > 5) ? argv[5] : "ballistic_table.txt"; - const std::string configPath = (argc > 1) ? argv[1] : "config.json"; - const std::string ammoPath = (argc > 2) ? argv[2] : "ammo.json"; - const std::string targetsPath = (argc > 3) ? argv[3] : "targets.json"; + auto loader = createLoader(LoaderType::FILE, configPath, ammoPath); + auto targets = createProvider(ProviderType::JSON, targetsPath); - try { - loader = createLoader(LoaderType::FILE, configPath, ammoPath); - targets = createProvider(ProviderType::JSON, targetsPath); - loader->load(); DroneConfig droneConfig = loader->getConfig(); + + SolverType solverType = (solverArg == "analytical") ? SolverType::ANALYTICAL : SolverType::TABLE; + auto ballisticSolver = createSolver(solverType, droneConfig, ballisticTablePath); + std::vector simSteps; - ballisticSolver = createSolver(SolverType::ANALYTICAL, droneConfig); - - MissionProcessor missionProcessor(targets, ballisticSolver); - missionProcessor.init(loader); - + MissionProcessor missionProcessor(std::move(targets), std::move(ballisticSolver)); + missionProcessor.init(std::move(loader)); + //write initial sim data simSteps.push_back({ + .hit = false, .target = -1, + .droneDirection = droneConfig.initialDir, .dropPoint = {0, 0}, .aimPoint = {0, 0}, .predictedTarget = {0, 0}, - .droneMotion = { - .dir = droneConfig.initialDir, - .pos = droneConfig.startPos, - .state = STOPPED - } + .dronePosition = droneConfig.startPos, + .droneState = StateStopped::NAME }); // simulation loop @@ -69,15 +67,12 @@ using json = nlohmann::json; } writeSimulationJSONFile(simSteps); + + return 0; } catch (const std::exception& error) { LOG("Error: " << error.what()); - failed = true; - } - - delete loader; - delete targets; - delete ballisticSolver; - return failed ? 1 : 0; + return 1; + } } diff --git a/drone_simulation/src/mission_processor.cpp b/drone_simulation/src/mission_processor.cpp index b9090f2..982f60a 100644 --- a/drone_simulation/src/mission_processor.cpp +++ b/drone_simulation/src/mission_processor.cpp @@ -1,208 +1,192 @@ -#include "mission_processor.hpp" #include +#include "mission_processor.hpp" +#include "drone_states/state_stopped.hpp" -MissionProcessor::MissionProcessor( - ITargetProvider* targetProvider, - IBallisticSolver* solver -): targets(targetProvider), ballisticSolver(solver) { +MissionProcessor::MissionProcessor(std::unique_ptr targetProvider, std::unique_ptr solver) + : targets(std::move(targetProvider)) + , ballisticSolver(std::move(solver)) +{ } -auto MissionProcessor::init(IConfigLoader* configLoader) -> void { - configLoader->load(); - droneConfig = configLoader->getConfig(); - ammo = configLoader->getAmmoParams(); - - ammoFlightTime = getAmmoFlightTime(droneConfig, ammo); - ammoHorizontalFlightDistance = getAmmoHorizontalFlightDistance( - droneConfig.attackSpeed, - ammoFlightTime, - ammo - ); - acceleration = droneConfig.attackSpeed * droneConfig.attackSpeed / (2.0f * droneConfig.accelPath); - droneMotion = { - .speed = 0.0f, - .dir = droneConfig.initialDir, - .pos = { - .x = droneConfig.startPos.x, - .y = droneConfig.startPos.y - }, - .state = STOPPED - }; +auto MissionProcessor::init(std::unique_ptr configLoader) -> void +{ + configLoader->load(); + this->droneConfig = configLoader->getConfig(); + this->ammo = configLoader->getAmmoParams(); + + this->ammoFlightTime = getAmmoFlightTime(this->droneConfig, this->ammo); + this->ammoHorizontalFlightDistance = getAmmoHorizontalFlightDistance(this->droneConfig.attackSpeed, this->ammoFlightTime, this->ammo); + this->droneContext = { + .directionToTarget = 0.0f, + .prevDirectionToTarget = 0.0f, + .speed = 0.0f, + .direction = this->droneConfig.initialDir, + .acceleration = this->droneConfig.attackSpeed * this->droneConfig.attackSpeed / (2.0f * this->droneConfig.accelPath), + .timeToStop = 0.0f, + .position = this->droneConfig.startPos, + .config = &this->droneConfig}; + this->state = std::make_unique(); } - -auto MissionProcessor::hasNext() -> bool { - return currentStep <= MAX_STEPS && !hit; +auto MissionProcessor::hasNext() -> bool +{ + return this->currentStep <= this->MAX_STEPS && !this->hit; } -auto MissionProcessor::getCurrentStep() -> int { - return currentStep; +auto MissionProcessor::getCurrentStep() -> int +{ + return this->currentStep; } -auto MissionProcessor::step() -> SimulationStep { - int bestTargetIndex = -1; - float bestTotalTime = INFINITY; - float bestDroneToFireTime = 0.0f; - Coord bestFireCoord = { - .x = 0, - .y = 0 - }; - - //iteration by targets - for (int i = 0; i < targets->getTargetCount(); ++i) { - Coord target = getInterpolatedCoords(currentTime, droneConfig.arrayTimeStep, targets->getTarget(i)); - - // balistic - float distanceToTarget = getDistanceToTarget(target, droneMotion.pos); - if (distanceToTarget < 1e-6f) { - std::cout << "Distance to the target " << i << " is near or less then 0\n" << std::endl; - continue; - } - float ratio = getRatio(distanceToTarget, ammoHorizontalFlightDistance); - - Coord fireCoord = getFireCoords(target, droneMotion.pos, std::max(ratio, 0.01f)); - float distanceToFire = getDistanceToTarget(fireCoord, droneMotion.pos); - float droneToFireTime = distanceToFire / droneConfig.attackSpeed; - float totalTimeRough = droneToFireTime + ammoFlightTime; - - Coord predictedTarget = getPredictedTargetCoords( - currentTime, droneConfig.arrayTimeStep, targets->getTarget(i), target, totalTimeRough - ); - - //predicted balistic - float newDistanceToTarget = getDistanceToTarget(predictedTarget, droneMotion.pos); - if (newDistanceToTarget < 1e-6f) { - std::cout << "Predicted distance to the target " << i << " is near or less then 0\n" << std::endl; - continue; - } - - float newRatio = getRatio(newDistanceToTarget, ammoHorizontalFlightDistance); - Coord newFireCoord = getFireCoords(predictedTarget, droneMotion.pos, std::max(newRatio, 0.01f)); - float newDistanceToFire = getDistanceToTarget(newFireCoord, droneMotion.pos); - float newDroneToFireTime = newDistanceToFire / droneConfig.attackSpeed; - float newTotalTime = newDroneToFireTime + ammoFlightTime; - - if (newRatio < 0) { - newTotalTime += getManeuveringTime( - newDistanceToTarget, - ammoHorizontalFlightDistance, - droneConfig.attackSpeed, - acceleration, - droneConfig.angularSpeed - ); - } - - if (prevTargetIndex != i && prevTargetIndex != -1) { - newTotalTime += getTimeToStop( - droneConfig.attackSpeed, - acceleration, - prevDirToTarget, - droneConfig.angularSpeed, - droneMotion - ); - } - - if (newTotalTime < bestTotalTime) { - bestTotalTime = newTotalTime; - bestTargetIndex = i; - bestFireCoord = newFireCoord; - bestDroneToFireTime = newDroneToFireTime; - } - } - - - if (bestTargetIndex < 0) { - std::cout << "No valid target at this step, skipping"<< std::endl; - ++currentStep; - currentTime += droneConfig.simTimeStep; +auto MissionProcessor::step() -> SimulationStep +{ + int bestTargetIndex = -1; + float bestTotalTime = INFINITY; + Coord bestFireCoord = {.x = 0, .y = 0}; - SimulationStep emptyStep = { - .target = -1, - .dropPoint = {0, 0}, - .aimPoint = {0, 0}, - .predictedTarget = {0, 0}, - .droneMotion = droneMotion - }; - - return emptyStep; - } + for (int i = 0; i < this->targets->getTargetCount(); ++i) { + Coord fireCoord; + float totalTime = this->evaluateTarget(i, this->currentTime, fireCoord); - Coord deltaToFire = bestFireCoord - droneMotion.pos; - Coord dirVec = normalize(deltaToFire); - float dirToTarget = atan2(dirVec.y, dirVec.x); - - droneMotion = updateDroneMotion( - acceleration, - droneConfig.simTimeStep, - droneConfig.attackSpeed, - droneConfig.angularSpeed, - dirToTarget, - droneConfig.turnThreshold, - droneMotion - ); - - Coord bombLandCoord = getBombLandCoord(droneMotion, ammoHorizontalFlightDistance); - Coord targetAtImpact = getInterpolatedCoords( - currentTime + bestDroneToFireTime + ammoFlightTime, - droneConfig.arrayTimeStep, - targets->getTarget(bestTargetIndex) - ); - - float bombMissDistance = getDistanceToTarget(bombLandCoord, targetAtImpact); - Coord dir = { - .x = std::cos(droneMotion.dir), - .y = std::sin(droneMotion.dir) - }; - - Coord aimPoint = droneMotion.pos + dir * ammoHorizontalFlightDistance; - - SimulationStep simulationStep = { - .target = bestTargetIndex, - .dropPoint = bestFireCoord, - .aimPoint = aimPoint, - .predictedTarget = targetAtImpact, - .droneMotion = droneMotion - }; - - if (bombMissDistance < droneConfig.hitRadius) { - std::cout << "Drone hit the target. Bomb miss: " << bombMissDistance << std::endl; - - hit = true; + if (totalTime < bestTotalTime) { + bestTotalTime = totalTime; + bestTargetIndex = i; + bestFireCoord = fireCoord; } + } + + if (bestTargetIndex < 0) { + std::cout << "No valid target at this step, skipping" << std::endl; + ++this->currentStep; + this->currentTime += this->droneConfig.simTimeStep; + + SimulationStep emptyStep = {.hit = false, + .target = -1, + .droneSpeed = this->droneContext.speed, + .droneDirection = this->droneContext.direction, + .dropPoint = {0, 0}, + .aimPoint = {0, 0}, + .predictedTarget = {0, 0}, + .dronePosition = this->droneContext.position, + .droneState = StateStopped::NAME}; + + return emptyStep; + } + + Coord deltaToFire = bestFireCoord - this->droneContext.position; + Coord dirVec = normalize(deltaToFire); + this->droneContext.prevDirectionToTarget = this->droneContext.directionToTarget; + this->droneContext.directionToTarget = atan2(dirVec.y, dirVec.x); + + auto nextState = this->state->execute(this->droneContext); + if (nextState) + this->state = std::move(nextState); + + SimulationStep simulationStep = this->getSimulationStep(bestTargetIndex, bestFireCoord); + this->hit = simulationStep.hit; + + this->prevTargetIndex = bestTargetIndex; + this->currentStep++; + this->currentTime += this->droneConfig.simTimeStep; + + return simulationStep; +} - if (bombLandCoord == targetAtImpact) { - std::cout << "Direct hit"<< std::endl; - - hit = true; - } - - prevTargetIndex = bestTargetIndex; - prevDirToTarget = dirToTarget; - - currentStep++; - currentTime += droneConfig.simTimeStep; - - return simulationStep; +auto MissionProcessor::reset() -> void +{ + this->hit = false; + this->prevTargetIndex = -1; + this->currentStep = 1; + this->currentTime = 0.0f; + + this->droneContext = {.directionToTarget = 0.0f, + .prevDirectionToTarget = this->droneConfig.initialDir, + .speed = 0.0f, + .direction = this->droneConfig.initialDir, + .acceleration = this->droneContext.acceleration, + .timeToStop = 0.0f, + .position = this->droneConfig.startPos, + .config = &this->droneConfig}; + + this->state = std::make_unique(); } -auto MissionProcessor::reset() -> void { - hit = false; - prevTargetIndex = -1; - prevDirToTarget = droneConfig.initialDir; - currentStep = 1; - currentTime = 0.0f; - droneMotion = { - .speed = 0.0f, - .dir = droneConfig.initialDir, - .pos = { - .x = droneConfig.startPos.x, - .y = droneConfig.startPos.y - }, - .state = STOPPED - }; +auto MissionProcessor::changeSolver(std::unique_ptr ballisticSolver) -> void +{ + this->ballisticSolver = std::move(ballisticSolver); } -auto MissionProcessor::changeSolver(IBallisticSolver* ballisticSolver) -> void { - this->ballisticSolver = ballisticSolver; +auto MissionProcessor::evaluateTarget(int targetIndex, float currentTime, Coord& outFireCoord) -> float +{ + Coord target = getInterpolatedCoords(currentTime, this->droneConfig.arrayTimeStep, this->targets->getTarget(targetIndex)); + + float distanceToTarget = getDistanceToTarget(target, this->droneContext.position); + if (distanceToTarget < 1e-3f) { + std::cout << "Distance to the target " << targetIndex << " is near or less then 0\n" << std::endl; + return INFINITY; + } + float ratio = getRatio(distanceToTarget, this->ammoHorizontalFlightDistance); + + Coord fireCoord = getFireCoords(target, this->droneContext.position, ratio); + float distanceToFire = getDistanceToTarget(fireCoord, this->droneContext.position); + float droneToFireTime = distanceToFire / this->droneConfig.attackSpeed; + float totalTimeRough = droneToFireTime + this->ammoFlightTime; + + Coord predictedTarget = + getPredictedTargetCoords(currentTime, this->droneConfig.arrayTimeStep, this->targets->getTarget(targetIndex), target, totalTimeRough); + + float newDistanceToTarget = getDistanceToTarget(predictedTarget, this->droneContext.position); + if (newDistanceToTarget < 1e-3f) { + std::cout << "Predicted distance to the target " << targetIndex << " is near or less then 0\n" << std::endl; + return INFINITY; + } + + float newRatio = getRatio(newDistanceToTarget, this->ammoHorizontalFlightDistance); + outFireCoord = getFireCoords(predictedTarget, this->droneContext.position, newRatio); + float newDistanceToFire = getDistanceToTarget(outFireCoord, this->droneContext.position); + float newDroneToFireTime = newDistanceToFire / this->droneConfig.attackSpeed; + float totalTime = newDroneToFireTime + this->ammoFlightTime; + + if (newRatio < 0) { + totalTime += getManeuveringTime(newDistanceToTarget, + this->ammoHorizontalFlightDistance, + this->droneConfig.attackSpeed, + this->droneContext.acceleration, + this->droneConfig.angularSpeed); + } + + if (this->prevTargetIndex != targetIndex && this->prevTargetIndex != -1) { + totalTime += this->droneContext.timeToStop; + } + + return totalTime; } + +auto MissionProcessor::getSimulationStep(int targetIndex, const Coord& fireCoord) -> SimulationStep +{ + Coord bombLandCoord = getBombLandCoord(this->droneContext, this->ammoHorizontalFlightDistance); + Coord targetAtImpact = + getInterpolatedCoords(this->currentTime + this->ammoFlightTime, this->droneConfig.arrayTimeStep, this->targets->getTarget(targetIndex)); + + float bombMissDistance = getDistanceToTarget(bombLandCoord, targetAtImpact); + Coord dir = {.x = std::cos(this->droneContext.direction), .y = std::sin(this->droneContext.direction)}; + Coord aimPoint = this->droneContext.position + dir * this->ammoHorizontalFlightDistance; + + bool isHit = bombMissDistance < this->droneConfig.hitRadius || bombLandCoord == targetAtImpact; + + if (isHit) { + std::cout << (bombLandCoord == targetAtImpact ? "Direct hit" : "Drone hit the target. Bomb miss: ") + << (bombLandCoord == targetAtImpact ? "" : std::to_string(bombMissDistance)) << std::endl; + } + + return {.hit = isHit, + .target = targetIndex, + .droneSpeed = this->droneContext.speed, + .droneDirection = this->droneContext.direction, + .dropPoint = fireCoord, + .aimPoint = aimPoint, + .predictedTarget = targetAtImpact, + .dronePosition = this->droneContext.position, + .droneState = this->state->name()}; +} \ No newline at end of file diff --git a/drone_simulation/src/simulation.cpp b/drone_simulation/src/simulation.cpp index e4c5b71..812c1fd 100644 --- a/drone_simulation/src/simulation.cpp +++ b/drone_simulation/src/simulation.cpp @@ -54,7 +54,7 @@ Coord getInterpolatedCoords( Coord getPredictedTargetCoords ( float& currentTime, float& timePeriod, - const std::vector& coordInTime, + const std::vector& coordInTime, const Coord& target, float& totalTime ) { @@ -93,157 +93,21 @@ float turnDrone( return droneDir; } -float getTimeToStop( - const float& attackSpeed, - const float& acceleration, - const float& prevDirToTarget, - const float& angularSpeed, - const DroneMotion& droneMotion -) { - switch (droneMotion.state) { - case STOPPED: - return 0; - break; - - case ACCELERATING: - return droneMotion.speed / acceleration; - break; - - case MOVING: - return attackSpeed / acceleration; - break; - - case TURNING: - return fabs(normalizeAngle(prevDirToTarget - droneMotion.dir)) / angularSpeed; - break; - - case DECELERATING: - return droneMotion.speed / acceleration; - break; - - default: - return 0; - } -} - float getRatio(const float& distanceToTarget, const float& ammoHorizontalFlightDistance) { return (distanceToTarget - ammoHorizontalFlightDistance) / distanceToTarget; } -DroneState updateDroneState( - const DroneState& droneState, - const float& deltaAngle, - const float& turnThreshold, - const float& droneSpeed, - const float& attackSpeed -) { - const bool deltaAngleOkToMove = fabs(deltaAngle) <= turnThreshold; - const bool deltaAngleNeedTurn = fabs(deltaAngle) > turnThreshold; - - if (droneState == MOVING && deltaAngleNeedTurn) { - - return DECELERATING; - } else if (droneState == DECELERATING && droneSpeed < 1e-6f) { - - return STOPPED; - } else if (droneState == STOPPED && deltaAngleNeedTurn) { - - return TURNING; - } else if (deltaAngleOkToMove && (droneState == TURNING - || droneState == STOPPED - || droneState == DECELERATING)) { - - return ACCELERATING; - } else if (droneState == ACCELERATING && droneSpeed >= attackSpeed) { - - return MOVING; - } - - return droneState; -} - -DroneMotion updateDroneVelocity( - const float& acceleration, - const float& simTimeStep, - const float& attackSpeed, - const float& angularSpeed, - const float& deltaAngle, - DroneMotion droneMotion -) { - switch (droneMotion.state) { - case STOPPED: - droneMotion.speed = 0; - break; - - case ACCELERATING: - droneMotion.speed += acceleration * simTimeStep; - if (droneMotion.speed > attackSpeed) { - droneMotion.speed = attackSpeed; - } - - if (fabs(deltaAngle) > 1e-6f) { - droneMotion.dir = turnDrone(deltaAngle, angularSpeed, simTimeStep, droneMotion.dir); - } - - break; - - case MOVING: - droneMotion.speed = attackSpeed; - if (fabs(deltaAngle) > 1e-6f) { - droneMotion.dir = turnDrone(deltaAngle, angularSpeed, simTimeStep, droneMotion.dir); - } - break; - - case DECELERATING: - droneMotion.speed -= acceleration * simTimeStep; - if (droneMotion.speed <= 1e-6f) { - droneMotion.speed = 0; - } - break; - - case TURNING: - { - droneMotion.speed = 0; - droneMotion.dir = turnDrone( - deltaAngle, angularSpeed, simTimeStep, droneMotion.dir - ); - } - break; - } +auto updateDronePosition(const DroneContext& context) -> Coord +{ + Coord position = { + context.position.x, + context.position.y + }; - return droneMotion; -} + position.x += context.speed * cos(context.direction) * context.config->simTimeStep; + position.y += context.speed * sin(context.direction) * context.config->simTimeStep; -DroneMotion updateDroneMotion( - const float& acceleration, - const float& simTimeStep, - const float& attackSpeed, - const float& angularSpeed, - const float& dirToTarget, - const float& turnThreshold, - DroneMotion droneMotion -) { - float deltaAngle = normalizeAngle(dirToTarget - droneMotion.dir); - - droneMotion.state = updateDroneState( - droneMotion.state, - deltaAngle, - turnThreshold, - droneMotion.speed, - attackSpeed - ); - droneMotion = updateDroneVelocity( - acceleration, - simTimeStep, - attackSpeed, - angularSpeed, - deltaAngle, - droneMotion - ); - droneMotion.pos.x += droneMotion.speed * cos(droneMotion.dir) * simTimeStep; - droneMotion.pos.y += droneMotion.speed * sin(droneMotion.dir) * simTimeStep; - - return droneMotion; + return position; } float getManeuveringTime( @@ -264,11 +128,11 @@ float getManeuveringTime( } Coord getBombLandCoord( - DroneMotion& droneMotion, + const DroneContext& droneContext, const float& ammoHorizontalFlightDistance ) { - const float bombLandX = droneMotion.pos.x + ammoHorizontalFlightDistance * cos(droneMotion.dir); - const float bombLandY = droneMotion.pos.y + ammoHorizontalFlightDistance * sin(droneMotion.dir); + const float bombLandX = droneContext.position.x + ammoHorizontalFlightDistance * cos(droneContext.direction); + const float bombLandY = droneContext.position.y + ammoHorizontalFlightDistance * sin(droneContext.direction); Coord bombLandCoord = { .x = bombLandX, .y = bombLandY @@ -287,11 +151,11 @@ void writeSimulationJSONFile( for (const SimulationStep& step : simSteps) { json stepJson; stepJson["position"] = { - {"x", step.droneMotion.pos.x}, - {"y", step.droneMotion.pos.y} + {"x", step.dronePosition.x}, + {"y", step.dronePosition.y} }; - stepJson["direction"] = step.droneMotion.dir; - stepJson["state"] = step.droneMotion.state; + stepJson["direction"] = step.droneDirection; + stepJson["state"] = step.droneState; stepJson["targetIndex"] = step.target; stepJson["dropPoint"] = { {"x", step.dropPoint.x}, @@ -316,7 +180,7 @@ float getAmmoHorizontalFlightDistance( const float& ammoFlightTime, const AmmoParams& ammo ) { - const float g = 9.81f; + const float g = 9.81f; float ammoHorizontalFlightDistance = attackSpeed * ammoFlightTime - pow(ammoFlightTime, 2) * ammo.drag * attackSpeed / (2 * ammo.mass) + pow(ammoFlightTime, 3) * (6 * ammo.drag * g * ammo.lift * ammo.mass - 6 * pow(ammo.drag, 2) * (pow(ammo.lift, 2) - 1) * attackSpeed) / (36 * pow(ammo.mass, 2)) @@ -402,7 +266,7 @@ std::vector> fillTargets(json& targetsJSON) { std::vector> targets; for (int i = 0; i < targetsCount; i++) { - std::vector track; + std::vector track; for (int j = 0; j < timeSteps; j++) { track.push_back({ targetsJSON["targets"][i]["positions"][j]["x"], @@ -420,7 +284,7 @@ float getAmmoFlightTime( const DroneConfig& droneConfig, const AmmoParams& ammo ) { - const float g = 9.81f; + const float g = 9.81f; float a = ammo.drag * g * ammo.mass - 2 * pow(ammo.drag, 2) * ammo.lift * droneConfig.attackSpeed; float b = -3 * g * pow(ammo.mass, 2) + 3 * ammo.drag * ammo.lift * ammo.mass * droneConfig.attackSpeed; float c = 6 * pow(ammo.mass, 2) * droneConfig.altitude; diff --git a/drone_simulation/src/solvers/analytical_solver.cpp b/drone_simulation/src/solvers/analytical_solver.cpp index 3b9b531..43db77e 100644 --- a/drone_simulation/src/solvers/analytical_solver.cpp +++ b/drone_simulation/src/solvers/analytical_solver.cpp @@ -1,18 +1,16 @@ #include "solvers/analytical_solver.hpp" - -AnalyticalSolver::AnalyticalSolver(const DroneConfig& config): droneConfig(config) { +AnalyticalSolver::AnalyticalSolver(const DroneConfig& config) + : droneConfig(config) +{ } -auto AnalyticalSolver::solve( - const Coord& dronePosition, - const Coord& targetPosition, - const AmmoParams& ammo -) -> Coord { - float flightTime = getAmmoFlightTime(droneConfig, ammo); - float ammoHorizontalFlightDistance = getAmmoHorizontalFlightDistance(droneConfig.attackSpeed, flightTime, ammo); - float distanceToTarget = getDistanceToTarget(targetPosition, dronePosition); - float ratio = getRatio(distanceToTarget, ammoHorizontalFlightDistance); +auto AnalyticalSolver::solve(const Coord& dronePosition, const Coord& targetPosition, const AmmoParams& ammo) -> Coord +{ + float flightTime = getAmmoFlightTime(droneConfig, ammo); + float ammoHorizontalFlightDistance = getAmmoHorizontalFlightDistance(droneConfig.attackSpeed, flightTime, ammo); + float distanceToTarget = getDistanceToTarget(targetPosition, dronePosition); + float ratio = getRatio(distanceToTarget, ammoHorizontalFlightDistance); - return getFireCoords(targetPosition, dronePosition, std::max(ratio, 0.01f)); + return getFireCoords(targetPosition, dronePosition, std::max(ratio, 0.01f)); } \ No newline at end of file diff --git a/drone_simulation/src/solvers/table_solver.cpp b/drone_simulation/src/solvers/table_solver.cpp new file mode 100644 index 0000000..cf35c99 --- /dev/null +++ b/drone_simulation/src/solvers/table_solver.cpp @@ -0,0 +1,18 @@ +#include "solvers/table_solver.hpp" + + +TableSolver::TableSolver(const DroneConfig& config, std::string path): droneConfig(config) { + this->table.load(path); +} + +auto TableSolver::solve( + const Coord& dronePosition, + const Coord& targetPosition, + const AmmoParams& ammo +) -> Coord { + Result result = this->table.lookup(this->droneConfig.altitude, this->droneConfig.attackSpeed, ammo.mass, ammo.drag, ammo.lift); + float distanceToTarget = getDistanceToTarget(targetPosition, dronePosition); + float ratio = getRatio(distanceToTarget, result.hDist); + + return getFireCoords(targetPosition, dronePosition, ratio); +} \ No newline at end of file diff --git a/simulation.json b/simulation.json new file mode 100644 index 0000000..6a9cc91 --- /dev/null +++ b/simulation.json @@ -0,0 +1,5066 @@ +{ + "steps": [ + { + "aimPoint": { + "x": 0.0, + "y": 0.0 + }, + "direction": 0.0, + "dropPoint": { + "x": 0.0, + "y": 0.0 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 0.0, + "y": 0.0 + }, + "state": "STOPPED", + "targetIndex": -1 + }, + { + "aimPoint": { + "x": 66.57669830322266, + "y": 0.0 + }, + "direction": 0.0, + "dropPoint": { + "x": 260.41705322265625, + "y": 181.8731689453125 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.97802734375, + "y": 203.54396057128906 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 66.49349212646484, + "y": 3.3274481296539307 + }, + "direction": 0.05000000074505806, + "dropPoint": { + "x": 259.95257568359375, + "y": 181.90521240234375 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.9380187988281, + "y": 203.62396240234375 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 66.24409484863281, + "y": 6.646579742431641 + }, + "direction": 0.10000000149011612, + "dropPoint": { + "x": 259.48736572265625, + "y": 181.93711853027344 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.89801025390625, + "y": 203.70394897460938 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 65.82911682128906, + "y": 9.949098587036133 + }, + "direction": 0.15000000596046448, + "dropPoint": { + "x": 259.02288818359375, + "y": 181.96900939941406 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.8580017089844, + "y": 203.78395080566406 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 65.24959564208984, + "y": 13.2267484664917 + }, + "direction": 0.20000000298023224, + "dropPoint": { + "x": 258.5577087402344, + "y": 182.00076293945313 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.8180236816406, + "y": 203.86395263671875 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 64.50698852539063, + "y": 16.471338272094727 + }, + "direction": 0.25, + "dropPoint": { + "x": 258.09326171875, + "y": 182.03282165527344 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.77252197265625, + "y": 203.93846130371094 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 63.6031494140625, + "y": 19.674760818481445 + }, + "direction": 0.30000001192092896, + "dropPoint": { + "x": 257.6287841796875, + "y": 182.06417846679688 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.7225036621094, + "y": 204.00845336914063 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 62.54033279418945, + "y": 22.82900619506836 + }, + "direction": 0.3500000238418579, + "dropPoint": { + "x": 257.1636047363281, + "y": 182.095703125 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.6725158691406, + "y": 204.07846069335938 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 61.321197509765625, + "y": 25.926189422607422 + }, + "direction": 0.40000003576278687, + "dropPoint": { + "x": 256.69915771484375, + "y": 182.12725830078125 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.6225280761719, + "y": 204.14846801757813 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 59.94879150390625, + "y": 28.958572387695313 + }, + "direction": 0.4500000476837158, + "dropPoint": { + "x": 256.2340393066406, + "y": 182.1586456298828 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.572509765625, + "y": 204.2184600830078 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 58.42654800415039, + "y": 31.91857147216797 + }, + "direction": 0.5000000596046448, + "dropPoint": { + "x": 255.7695770263672, + "y": 182.19003295898438 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.52252197265625, + "y": 204.28846740722656 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 56.758262634277344, + "y": 34.798797607421875 + }, + "direction": 0.5500000715255737, + "dropPoint": { + "x": 255.75718688964844, + "y": 182.26031494140625 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.4725036621094, + "y": 204.35845947265625 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.948116302490234, + "y": 37.592037200927734 + }, + "direction": 0.6000000834465027, + "dropPoint": { + "x": 255.7447509765625, + "y": 182.33058166503906 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.4225158691406, + "y": 204.428466796875 + }, + "state": "TURNING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.2022819519043, + "y": 38.65966033935547 + }, + "direction": 0.6195619106292725, + "dropPoint": { + "x": 255.7322998046875, + "y": 182.40052795410156 + }, + "position": { + "x": 0.0, + "y": 0.0 + }, + "predictedTarget": { + "x": 313.3725280761719, + "y": 204.49847412109375 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.22060012817383, + "y": 38.672725677490234 + }, + "direction": 0.6195619106292725, + "dropPoint": { + "x": 255.7205810546875, + "y": 182.4708709716797 + }, + "position": { + "x": 0.018317991867661476, + "y": 0.013065268285572529 + }, + "predictedTarget": { + "x": 313.322509765625, + "y": 204.56846618652344 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.25723648071289, + "y": 38.698856353759766 + }, + "direction": 0.6195619106292725, + "dropPoint": { + "x": 255.70762634277344, + "y": 182.54005432128906 + }, + "position": { + "x": 0.05495397374033928, + "y": 0.03919580578804016 + }, + "predictedTarget": { + "x": 313.26702880859375, + "y": 204.6384735107422 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.312191009521484, + "y": 38.73805236816406 + }, + "direction": 0.6195619106292725, + "dropPoint": { + "x": 255.6956024169922, + "y": 182.60861206054688 + }, + "position": { + "x": 0.10990794748067856, + "y": 0.07839161157608032 + }, + "predictedTarget": { + "x": 313.20703125, + "y": 204.70846557617188 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.38546371459961, + "y": 38.790313720703125 + }, + "direction": 0.6195619106292725, + "dropPoint": { + "x": 255.68447875976563, + "y": 182.67584228515625 + }, + "position": { + "x": 0.18317991495132446, + "y": 0.13065268099308014 + }, + "predictedTarget": { + "x": 313.14703369140625, + "y": 204.77847290039063 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.47705078125, + "y": 38.85564041137695 + }, + "direction": 0.6195619106292725, + "dropPoint": { + "x": 255.67279052734375, + "y": 182.74163818359375 + }, + "position": { + "x": 0.2747698724269867, + "y": 0.1959790140390396 + }, + "predictedTarget": { + "x": 313.0870361328125, + "y": 204.8484649658203 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.5410270690918, + "y": 38.998355865478516 + }, + "direction": 0.6207467317581177, + "dropPoint": { + "x": 255.66127014160156, + "y": 182.8067626953125 + }, + "position": { + "x": 0.38458487391471863, + "y": 0.2745007872581482 + }, + "predictedTarget": { + "x": 313.02703857421875, + "y": 204.91847229003906 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.66914367675781, + "y": 39.089962005615234 + }, + "direction": 0.6207467317581177, + "dropPoint": { + "x": 255.64996337890625, + "y": 182.87083435058594 + }, + "position": { + "x": 0.5127023458480835, + "y": 0.3661095201969147 + }, + "predictedTarget": { + "x": 312.967041015625, + "y": 204.98846435546875 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.8155632019043, + "y": 39.19466018676758 + }, + "direction": 0.6207467317581177, + "dropPoint": { + "x": 255.1474151611328, + "y": 182.67149353027344 + }, + "position": { + "x": 0.6591223478317261, + "y": 0.47080522775650024 + }, + "predictedTarget": { + "x": 312.90704345703125, + "y": 205.0584716796875 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 54.940860748291016, + "y": 39.36751937866211 + }, + "direction": 0.6217609643936157, + "dropPoint": { + "x": 254.64686584472656, + "y": 182.4710235595703 + }, + "position": { + "x": 0.8237252831459045, + "y": 0.5887548923492432 + }, + "predictedTarget": { + "x": 312.8470458984375, + "y": 205.1284637451172 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 55.12375259399414, + "y": 39.498573303222656 + }, + "direction": 0.6217609643936157, + "dropPoint": { + "x": 254.1457061767578, + "y": 182.27029418945313 + }, + "position": { + "x": 1.0066174268722534, + "y": 0.7198100686073303 + }, + "predictedTarget": { + "x": 312.78704833984375, + "y": 205.19847106933594 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 55.32493209838867, + "y": 39.64273452758789 + }, + "direction": 0.6217609643936157, + "dropPoint": { + "x": 253.64532470703125, + "y": 182.06808471679688 + }, + "position": { + "x": 1.2077988386154175, + "y": 0.8639707565307617 + }, + "predictedTarget": { + "x": 312.72705078125, + "y": 205.26846313476563 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 55.496463775634766, + "y": 39.86681365966797 + }, + "direction": 0.6229912042617798, + "dropPoint": { + "x": 253.14662170410156, + "y": 181.86550903320313 + }, + "position": { + "x": 1.427075743675232, + "y": 1.021506905555725 + }, + "predictedTarget": { + "x": 312.66156005859375, + "y": 205.33847045898438 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 55.73401641845703, + "y": 40.0374755859375 + }, + "direction": 0.6229912042617798, + "dropPoint": { + "x": 252.64886474609375, + "y": 181.6622772216797 + }, + "position": { + "x": 1.6646257638931274, + "y": 1.1921709775924683 + }, + "predictedTarget": { + "x": 312.591552734375, + "y": 205.40846252441406 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 55.989837646484375, + "y": 40.22126770019531 + }, + "direction": 0.6229912042617798, + "dropPoint": { + "x": 252.15147399902344, + "y": 181.45794677734375 + }, + "position": { + "x": 1.9204487800598145, + "y": 1.3759630918502808 + }, + "predictedTarget": { + "x": 312.52154541015625, + "y": 205.4784698486328 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 56.2165412902832, + "y": 40.48406982421875 + }, + "direction": 0.6242039799690247, + "dropPoint": { + "x": 251.65533447265625, + "y": 181.25367736816406 + }, + "position": { + "x": 2.194305896759033, + "y": 1.5732154846191406 + }, + "predictedTarget": { + "x": 312.4515380859375, + "y": 205.5484619140625 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 56.5086555480957, + "y": 40.69447326660156 + }, + "direction": 0.6242039799690247, + "dropPoint": { + "x": 251.16177368164063, + "y": 181.04835510253906 + }, + "position": { + "x": 2.486420154571533, + "y": 1.7836179733276367 + }, + "predictedTarget": { + "x": 312.38153076171875, + "y": 205.61846923828125 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 56.819026947021484, + "y": 40.918025970458984 + }, + "direction": 0.6242039799690247, + "dropPoint": { + "x": 250.66822814941406, + "y": 180.8426971435547 + }, + "position": { + "x": 2.7967915534973145, + "y": 2.0071706771850586 + }, + "predictedTarget": { + "x": 312.3115539550781, + "y": 205.68846130371094 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 57.088966369628906, + "y": 41.236087799072266 + }, + "direction": 0.6257016658782959, + "dropPoint": { + "x": 250.66566467285156, + "y": 181.10528564453125 + }, + "position": { + "x": 3.125065326690674, + "y": 2.2443654537200928 + }, + "predictedTarget": { + "x": 312.2415466308594, + "y": 205.7584686279297 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 57.43547821044922, + "y": 41.48645782470703 + }, + "direction": 0.6257016658782959, + "dropPoint": { + "x": 250.66287231445313, + "y": 181.36685180664063 + }, + "position": { + "x": 3.471576452255249, + "y": 2.4947376251220703 + }, + "predictedTarget": { + "x": 312.1715393066406, + "y": 205.82846069335938 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 57.745567321777344, + "y": 41.825538635253906 + }, + "direction": 0.6270926594734192, + "dropPoint": { + "x": 250.66189575195313, + "y": 181.62646484375 + }, + "position": { + "x": 3.8359580039978027, + "y": 2.7587945461273193 + }, + "predictedTarget": { + "x": 312.1015319824219, + "y": 205.89846801757813 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 58.128170013427734, + "y": 42.10279846191406 + }, + "direction": 0.6270926594734192, + "dropPoint": { + "x": 250.6606903076172, + "y": 181.88528442382813 + }, + "position": { + "x": 4.2185587882995605, + "y": 3.0360541343688965 + }, + "predictedTarget": { + "x": 312.0315246582031, + "y": 205.9684600830078 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 58.47478485107422, + "y": 42.467952728271484 + }, + "direction": 0.6284686326980591, + "dropPoint": { + "x": 250.6592559814453, + "y": 182.14222717285156 + }, + "position": { + "x": 4.618978500366211, + "y": 3.3270678520202637 + }, + "predictedTarget": { + "x": 311.9615478515625, + "y": 206.03297424316406 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 58.893402099609375, + "y": 42.772193908691406 + }, + "direction": 0.6284686326980591, + "dropPoint": { + "x": 250.65896606445313, + "y": 182.3977813720703 + }, + "position": { + "x": 5.037599086761475, + "y": 3.6313095092773438 + }, + "predictedTarget": { + "x": 311.89154052734375, + "y": 206.0929718017578 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 59.27662658691406, + "y": 43.163307189941406 + }, + "direction": 0.6298257112503052, + "dropPoint": { + "x": 250.65914916992188, + "y": 182.65203857421875 + }, + "position": { + "x": 5.473989486694336, + "y": 3.949371576309204 + }, + "predictedTarget": { + "x": 311.821533203125, + "y": 206.15296936035156 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 59.731201171875, + "y": 43.49462127685547 + }, + "direction": 0.6298257112503052, + "dropPoint": { + "x": 250.660400390625, + "y": 182.90420532226563 + }, + "position": { + "x": 5.928562641143799, + "y": 4.280686378479004 + }, + "predictedTarget": { + "x": 311.75152587890625, + "y": 206.2129669189453 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 60.150978088378906, + "y": 43.91177749633789 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 250.6608428955078, + "y": 183.1551971435547 + }, + "position": { + "x": 6.400856971740723, + "y": 4.625885963439941 + }, + "predictedTarget": { + "x": 311.6815185546875, + "y": 206.27296447753906 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 60.64143753051758, + "y": 44.27025604248047 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 250.66229248046875, + "y": 183.40431213378906 + }, + "position": { + "x": 6.891316890716553, + "y": 4.9843621253967285 + }, + "predictedTarget": { + "x": 311.6115417480469, + "y": 206.33297729492188 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 61.150062561035156, + "y": 44.642005920410156 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 250.393798828125, + "y": 183.2076416015625 + }, + "position": { + "x": 7.399941921234131, + "y": 5.356115341186523 + }, + "predictedTarget": { + "x": 311.5415344238281, + "y": 206.39297485351563 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 61.67685317993164, + "y": 45.02703857421875 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 250.1259002685547, + "y": 183.0103759765625 + }, + "position": { + "x": 7.926732063293457, + "y": 5.741145610809326 + }, + "predictedTarget": { + "x": 311.4715270996094, + "y": 206.45297241210938 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 62.22180938720703, + "y": 45.42534637451172 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 249.85943603515625, + "y": 182.8135986328125 + }, + "position": { + "x": 8.471687316894531, + "y": 6.1394524574279785 + }, + "predictedTarget": { + "x": 311.4015197753906, + "y": 206.51296997070313 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 62.78493118286133, + "y": 45.83692932128906 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 249.59426879882813, + "y": 182.6160430908203 + }, + "position": { + "x": 9.034808158874512, + "y": 6.551036357879639 + }, + "predictedTarget": { + "x": 311.3315124511719, + "y": 206.57296752929688 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 63.366214752197266, + "y": 46.26179122924805 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 249.33126831054688, + "y": 182.4188232421875 + }, + "position": { + "x": 9.616093635559082, + "y": 6.975897312164307 + }, + "predictedTarget": { + "x": 311.25604248046875, + "y": 206.63296508789063 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 63.965667724609375, + "y": 46.699928283691406 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 249.06976318359375, + "y": 182.2215576171875 + }, + "position": { + "x": 10.215544700622559, + "y": 7.414035320281982 + }, + "predictedTarget": { + "x": 311.176025390625, + "y": 206.69297790527344 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 64.58328247070313, + "y": 47.151344299316406 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 248.80906677246094, + "y": 182.0242462158203 + }, + "position": { + "x": 10.833160400390625, + "y": 7.865449905395508 + }, + "predictedTarget": { + "x": 311.0960388183594, + "y": 206.7529754638672 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 65.21906280517578, + "y": 47.61603546142578 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 248.5500030517578, + "y": 181.82699584960938 + }, + "position": { + "x": 11.468941688537598, + "y": 8.330141067504883 + }, + "predictedTarget": { + "x": 311.0160217285156, + "y": 206.81297302246094 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 65.87300872802734, + "y": 48.09400177001953 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 248.29249572753906, + "y": 181.62954711914063 + }, + "position": { + "x": 12.12288761138916, + "y": 8.808109283447266 + }, + "predictedTarget": { + "x": 310.93603515625, + "y": 206.8729705810547 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 66.54512023925781, + "y": 48.58524703979492 + }, + "direction": 0.6311637759208679, + "dropPoint": { + "x": 248.03733825683594, + "y": 181.43260192871094 + }, + "position": { + "x": 12.794999122619629, + "y": 9.299354553222656 + }, + "predictedTarget": { + "x": 310.8560485839844, + "y": 206.93296813964844 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 67.1938705444336, + "y": 49.146522521972656 + }, + "direction": 0.6322066187858582, + "dropPoint": { + "x": 247.79469299316406, + "y": 181.43658447265625 + }, + "position": { + "x": 13.484749794006348, + "y": 9.804596900939941 + }, + "predictedTarget": { + "x": 310.7760314941406, + "y": 206.9929656982422 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 67.90177154541016, + "y": 49.665061950683594 + }, + "direction": 0.6322066187858582, + "dropPoint": { + "x": 247.55441284179688, + "y": 181.43978881835938 + }, + "position": { + "x": 14.192651748657227, + "y": 10.323134422302246 + }, + "predictedTarget": { + "x": 310.696044921875, + "y": 207.05296325683594 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 68.62782287597656, + "y": 50.196895599365234 + }, + "direction": 0.6322066187858582, + "dropPoint": { + "x": 247.31524658203125, + "y": 181.44174194335938 + }, + "position": { + "x": 14.918704986572266, + "y": 10.854968070983887 + }, + "predictedTarget": { + "x": 310.61602783203125, + "y": 207.1129608154297 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 69.3126220703125, + "y": 50.822998046875 + }, + "direction": 0.6336945295333862, + "dropPoint": { + "x": 247.07870483398438, + "y": 181.44349670410156 + }, + "position": { + "x": 15.662096977233887, + "y": 11.401204109191895 + }, + "predictedTarget": { + "x": 310.5360412597656, + "y": 207.17295837402344 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 70.07414245605469, + "y": 51.3825569152832 + }, + "direction": 0.6336945295333862, + "dropPoint": { + "x": 246.8432159423828, + "y": 181.44384765625 + }, + "position": { + "x": 16.423620223999023, + "y": 11.960762977600098 + }, + "predictedTarget": { + "x": 310.4505615234375, + "y": 207.2274627685547 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 70.85379791259766, + "y": 51.955440521240234 + }, + "direction": 0.6336945295333862, + "dropPoint": { + "x": 246.6097869873047, + "y": 181.44395446777344 + }, + "position": { + "x": 17.203275680541992, + "y": 12.533644676208496 + }, + "predictedTarget": { + "x": 310.3605651855469, + "y": 207.2774658203125 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 71.59341430664063, + "y": 52.620697021484375 + }, + "direction": 0.6351472735404968, + "dropPoint": { + "x": 246.3789825439453, + "y": 181.44259643554688 + }, + "position": { + "x": 18.00020980834961, + "y": 13.121007919311523 + }, + "predictedTarget": { + "x": 310.2705383300781, + "y": 207.3274688720703 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 72.40845489501953, + "y": 53.221412658691406 + }, + "direction": 0.6351472735404968, + "dropPoint": { + "x": 246.14944458007813, + "y": 181.4408416748047 + }, + "position": { + "x": 18.815256118774414, + "y": 13.721720695495605 + }, + "predictedTarget": { + "x": 310.1805419921875, + "y": 207.37747192382813 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 73.24161529541016, + "y": 53.835472106933594 + }, + "direction": 0.6351472735404968, + "dropPoint": { + "x": 245.92266845703125, + "y": 181.43824768066406 + }, + "position": { + "x": 19.648414611816406, + "y": 14.335782051086426 + }, + "predictedTarget": { + "x": 310.0905456542969, + "y": 207.42747497558594 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 74.0360107421875, + "y": 54.53994369506836 + }, + "direction": 0.6365633606910706, + "dropPoint": { + "x": 245.69735717773438, + "y": 181.43472290039063 + }, + "position": { + "x": 20.498796463012695, + "y": 14.964397430419922 + }, + "predictedTarget": { + "x": 310.00054931640625, + "y": 207.4774627685547 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 74.90447998046875, + "y": 55.18193435668945 + }, + "direction": 0.6365633606910706, + "dropPoint": { + "x": 245.4650421142578, + "y": 181.42930603027344 + }, + "position": { + "x": 21.367271423339844, + "y": 15.606388092041016 + }, + "predictedTarget": { + "x": 309.9105529785156, + "y": 207.5274658203125 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 75.79105377197266, + "y": 55.83729934692383 + }, + "direction": 0.6365633606910706, + "dropPoint": { + "x": 245.23495483398438, + "y": 181.4230194091797 + }, + "position": { + "x": 22.25383949279785, + "y": 16.26175308227539 + }, + "predictedTarget": { + "x": 309.820556640625, + "y": 207.5774688720703 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 76.63836669921875, + "y": 56.58350372314453 + }, + "direction": 0.637986958026886, + "dropPoint": { + "x": 245.00782775878906, + "y": 181.41590881347656 + }, + "position": { + "x": 23.157548904418945, + "y": 16.931779861450195 + }, + "predictedTarget": { + "x": 309.7305603027344, + "y": 207.62747192382813 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 77.56015014648438, + "y": 57.266929626464844 + }, + "direction": 0.637986958026886, + "dropPoint": { + "x": 244.7821807861328, + "y": 181.40811157226563 + }, + "position": { + "x": 24.07933235168457, + "y": 17.61520767211914 + }, + "predictedTarget": { + "x": 309.64056396484375, + "y": 207.67747497558594 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 78.50000762939453, + "y": 57.96376037597656 + }, + "direction": 0.637986958026886, + "dropPoint": { + "x": 244.55892944335938, + "y": 181.39944458007813 + }, + "position": { + "x": 25.019189834594727, + "y": 18.312036514282227 + }, + "predictedTarget": { + "x": 309.5450744628906, + "y": 207.7274627685547 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 79.40205383300781, + "y": 58.749244689941406 + }, + "direction": 0.6393700838088989, + "dropPoint": { + "x": 244.3380889892578, + "y": 181.3899383544922 + }, + "position": { + "x": 25.976137161254883, + "y": 19.023590087890625 + }, + "predictedTarget": { + "x": 309.445068359375, + "y": 207.7774658203125 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 80.37705993652344, + "y": 59.47422409057617 + }, + "direction": 0.6393700838088989, + "dropPoint": { + "x": 244.11952209472656, + "y": 181.3798065185547 + }, + "position": { + "x": 26.951141357421875, + "y": 19.74856948852539 + }, + "predictedTarget": { + "x": 309.3450622558594, + "y": 207.8274688720703 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 81.3701171875, + "y": 60.21262741088867 + }, + "direction": 0.6393700838088989, + "dropPoint": { + "x": 243.90408325195313, + "y": 181.36888122558594 + }, + "position": { + "x": 27.94420051574707, + "y": 20.48697280883789 + }, + "predictedTarget": { + "x": 309.24505615234375, + "y": 207.87747192382813 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 82.32704162597656, + "y": 61.0372428894043 + }, + "direction": 0.640707790851593, + "dropPoint": { + "x": 243.69052124023438, + "y": 181.35704040527344 + }, + "position": { + "x": 28.954309463500977, + "y": 21.240154266357422 + }, + "predictedTarget": { + "x": 309.1450500488281, + "y": 207.92747497558594 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 83.35519409179688, + "y": 61.80387496948242 + }, + "direction": 0.640707790851593, + "dropPoint": { + "x": 243.4793701171875, + "y": 181.34461975097656 + }, + "position": { + "x": 29.98245620727539, + "y": 22.006786346435547 + }, + "predictedTarget": { + "x": 309.0450744628906, + "y": 207.9774627685547 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 84.40137481689453, + "y": 62.583953857421875 + }, + "direction": 0.640707790851593, + "dropPoint": { + "x": 243.4500274658203, + "y": 181.15509033203125 + }, + "position": { + "x": 31.02863883972168, + "y": 22.786867141723633 + }, + "predictedTarget": { + "x": 308.945068359375, + "y": 208.0274658203125 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 85.46559143066406, + "y": 63.37748718261719 + }, + "direction": 0.640707790851593, + "dropPoint": { + "x": 243.42161560058594, + "y": 180.96624755859375 + }, + "position": { + "x": 32.09286117553711, + "y": 23.580398559570313 + }, + "predictedTarget": { + "x": 308.8450622558594, + "y": 208.0774688720703 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 86.59197998046875, + "y": 64.1252212524414 + }, + "direction": 0.6396202445030212, + "dropPoint": { + "x": 243.39402770996094, + "y": 180.7786865234375 + }, + "position": { + "x": 33.17599868774414, + "y": 24.386201858520508 + }, + "predictedTarget": { + "x": 308.74505615234375, + "y": 208.12747192382813 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 87.69317626953125, + "y": 64.94445037841797 + }, + "direction": 0.6396202445030212, + "dropPoint": { + "x": 243.36753845214844, + "y": 180.59197998046875 + }, + "position": { + "x": 34.27718734741211, + "y": 25.205434799194336 + }, + "predictedTarget": { + "x": 308.6450500488281, + "y": 208.17747497558594 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 88.85408020019531, + "y": 65.72103881835938 + }, + "direction": 0.6385923624038696, + "dropPoint": { + "x": 243.3419189453125, + "y": 180.40634155273438 + }, + "position": { + "x": 35.397281646728516, + "y": 26.03694725036621 + }, + "predictedTarget": { + "x": 308.5450744628906, + "y": 208.2219696044922 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 89.99224853515625, + "y": 66.56596374511719 + }, + "direction": 0.6385923624038696, + "dropPoint": { + "x": 243.3173370361328, + "y": 180.22134399414063 + }, + "position": { + "x": 36.53544235229492, + "y": 26.88187026977539 + }, + "predictedTarget": { + "x": 308.445068359375, + "y": 208.26197814941406 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 91.19053649902344, + "y": 67.3675765991211 + }, + "direction": 0.6375541090965271, + "dropPoint": { + "x": 243.293701171875, + "y": 180.03782653808594 + }, + "position": { + "x": 37.692562103271484, + "y": 27.739004135131836 + }, + "predictedTarget": { + "x": 308.3450622558594, + "y": 208.30197143554688 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 92.36573791503906, + "y": 68.23809814453125 + }, + "direction": 0.6375541090965271, + "dropPoint": { + "x": 243.27102661132813, + "y": 179.85501098632813 + }, + "position": { + "x": 38.867759704589844, + "y": 28.60953140258789 + }, + "predictedTarget": { + "x": 308.24505615234375, + "y": 208.34197998046875 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 93.60137176513672, + "y": 69.06477355957031 + }, + "direction": 0.6365078091621399, + "dropPoint": { + "x": 243.24935913085938, + "y": 179.67405700683594 + }, + "position": { + "x": 40.06196212768555, + "y": 29.492202758789063 + }, + "predictedTarget": { + "x": 308.1450500488281, + "y": 208.38197326660156 + }, + "state": "ACCELERATING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 94.80763244628906, + "y": 69.95635986328125 + }, + "direction": 0.6365078091621399, + "dropPoint": { + "x": 243.2286834716797, + "y": 179.4936065673828 + }, + "position": { + "x": 41.268226623535156, + "y": 30.3837890625 + }, + "predictedTarget": { + "x": 308.0450744628906, + "y": 208.42198181152344 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 96.01390075683594, + "y": 70.84794616699219 + }, + "direction": 0.6365078091621399, + "dropPoint": { + "x": 243.02963256835938, + "y": 179.47142028808594 + }, + "position": { + "x": 42.474491119384766, + "y": 31.275375366210938 + }, + "predictedTarget": { + "x": 307.945068359375, + "y": 208.46197509765625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 97.22016906738281, + "y": 71.73953247070313 + }, + "direction": 0.6365078091621399, + "dropPoint": { + "x": 242.8314208984375, + "y": 179.44908142089844 + }, + "position": { + "x": 43.680755615234375, + "y": 32.166961669921875 + }, + "predictedTarget": { + "x": 307.8450622558594, + "y": 208.50198364257813 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 98.42642974853516, + "y": 72.63111877441406 + }, + "direction": 0.6365078091621399, + "dropPoint": { + "x": 242.63648986816406, + "y": 179.42684936523438 + }, + "position": { + "x": 44.887020111083984, + "y": 33.05854797363281 + }, + "predictedTarget": { + "x": 307.74505615234375, + "y": 208.54197692871094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 99.58953857421875, + "y": 73.58103942871094 + }, + "direction": 0.6375737190246582, + "dropPoint": { + "x": 242.44357299804688, + "y": 179.40435791015625 + }, + "position": { + "x": 46.09233474731445, + "y": 33.951419830322266 + }, + "predictedTarget": { + "x": 307.6450500488281, + "y": 208.5819854736328 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 100.79484558105469, + "y": 74.47390747070313 + }, + "direction": 0.6375737190246582, + "dropPoint": { + "x": 242.25192260742188, + "y": 179.38230895996094 + }, + "position": { + "x": 47.29764938354492, + "y": 34.84429168701172 + }, + "predictedTarget": { + "x": 307.5395812988281, + "y": 208.62197875976563 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 102.00016784667969, + "y": 75.36677551269531 + }, + "direction": 0.6375737190246582, + "dropPoint": { + "x": 242.0629119873047, + "y": 179.36032104492188 + }, + "position": { + "x": 48.50296401977539, + "y": 35.73716354370117 + }, + "predictedTarget": { + "x": 307.4295654296875, + "y": 208.6619873046875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 103.15744018554688, + "y": 76.32441711425781 + }, + "direction": 0.6387582421302795, + "dropPoint": { + "x": 241.8754119873047, + "y": 179.3385467529297 + }, + "position": { + "x": 49.707218170166016, + "y": 36.63146209716797 + }, + "predictedTarget": { + "x": 307.319580078125, + "y": 208.7019805908203 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 104.3616943359375, + "y": 77.21871948242188 + }, + "direction": 0.6387582421302795, + "dropPoint": { + "x": 241.68971252441406, + "y": 179.3167724609375 + }, + "position": { + "x": 50.91147232055664, + "y": 37.525760650634766 + }, + "predictedTarget": { + "x": 307.2095642089844, + "y": 208.7419891357422 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 105.56594848632813, + "y": 78.11302185058594 + }, + "direction": 0.6387582421302795, + "dropPoint": { + "x": 241.50599670410156, + "y": 179.2947540283203 + }, + "position": { + "x": 52.115726470947266, + "y": 38.42005920410156 + }, + "predictedTarget": { + "x": 307.0995788574219, + "y": 208.781982421875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 106.72274017333984, + "y": 79.0711441040039 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 241.32496643066406, + "y": 179.27305603027344 + }, + "position": { + "x": 53.31893539428711, + "y": 39.315765380859375 + }, + "predictedTarget": { + "x": 306.98956298828125, + "y": 208.8219757080078 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 107.92594909667969, + "y": 79.96685028076172 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 241.11451721191406, + "y": 179.0736083984375 + }, + "position": { + "x": 54.52214431762695, + "y": 40.21147155761719 + }, + "predictedTarget": { + "x": 306.8795471191406, + "y": 208.8619842529297 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 109.12915802001953, + "y": 80.86255645751953 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 240.90663146972656, + "y": 178.8762969970703 + }, + "position": { + "x": 55.7253532409668, + "y": 41.107177734375 + }, + "predictedTarget": { + "x": 306.7695617675781, + "y": 208.9019775390625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 110.33236694335938, + "y": 81.75826263427734 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 240.70018005371094, + "y": 178.6807098388672 + }, + "position": { + "x": 56.92856216430664, + "y": 42.00288391113281 + }, + "predictedTarget": { + "x": 306.6595458984375, + "y": 208.94198608398438 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 111.53557586669922, + "y": 82.65396881103516 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 240.496337890625, + "y": 178.48751831054688 + }, + "position": { + "x": 58.131771087646484, + "y": 42.898590087890625 + }, + "predictedTarget": { + "x": 306.549560546875, + "y": 208.9819793701172 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 112.73878479003906, + "y": 83.54967498779297 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 240.29344177246094, + "y": 178.29624938964844 + }, + "position": { + "x": 59.33498001098633, + "y": 43.79429626464844 + }, + "predictedTarget": { + "x": 306.4395446777344, + "y": 209.0164794921875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 113.9419937133789, + "y": 84.44538116455078 + }, + "direction": 0.6399266123771667, + "dropPoint": { + "x": 240.09307861328125, + "y": 178.10687255859375 + }, + "position": { + "x": 60.53818893432617, + "y": 44.69000244140625 + }, + "predictedTarget": { + "x": 306.3295593261719, + "y": 209.04647827148438 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 115.18734741210938, + "y": 85.284423828125 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 239.89532470703125, + "y": 177.91986083984375 + }, + "position": { + "x": 61.74232864379883, + "y": 45.58445739746094 + }, + "predictedTarget": { + "x": 306.21954345703125, + "y": 209.0764923095703 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 116.3914794921875, + "y": 86.17887878417969 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 239.69924926757813, + "y": 177.73431396484375 + }, + "position": { + "x": 62.946468353271484, + "y": 46.478912353515625 + }, + "predictedTarget": { + "x": 306.10955810546875, + "y": 209.1064910888672 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 117.59561920166016, + "y": 87.07333374023438 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 239.50576782226563, + "y": 177.55113220214844 + }, + "position": { + "x": 64.15060424804688, + "y": 47.37336730957031 + }, + "predictedTarget": { + "x": 305.9995422363281, + "y": 209.13648986816406 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 118.79975891113281, + "y": 87.96778869628906 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 239.3137969970703, + "y": 177.3699493408203 + }, + "position": { + "x": 65.35474395751953, + "y": 48.267822265625 + }, + "predictedTarget": { + "x": 305.8895568847656, + "y": 209.16648864746094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 120.00389862060547, + "y": 88.86224365234375 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 239.1363525390625, + "y": 177.34703063964844 + }, + "position": { + "x": 66.55888366699219, + "y": 49.16227722167969 + }, + "predictedTarget": { + "x": 305.779541015625, + "y": 209.1964874267578 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 121.20803833007813, + "y": 89.75669860839844 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 238.96095275878906, + "y": 177.32411193847656 + }, + "position": { + "x": 67.76302337646484, + "y": 50.056732177734375 + }, + "predictedTarget": { + "x": 305.6695556640625, + "y": 209.2264862060547 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 122.41217803955078, + "y": 90.65115356445313 + }, + "direction": 0.6388893127441406, + "dropPoint": { + "x": 238.78759765625, + "y": 177.3011474609375 + }, + "position": { + "x": 68.9671630859375, + "y": 50.95118713378906 + }, + "predictedTarget": { + "x": 305.5595397949219, + "y": 209.25648498535156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 123.5688705444336, + "y": 91.60940551757813 + }, + "direction": 0.6400571465492249, + "dropPoint": { + "x": 238.617431640625, + "y": 177.2783203125 + }, + "position": { + "x": 70.17025756835938, + "y": 51.847049713134766 + }, + "predictedTarget": { + "x": 305.4495544433594, + "y": 209.28648376464844 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 124.77196502685547, + "y": 92.50526428222656 + }, + "direction": 0.6400571465492249, + "dropPoint": { + "x": 238.44805908203125, + "y": 177.25570678710938 + }, + "position": { + "x": 71.37335205078125, + "y": 52.74291229248047 + }, + "predictedTarget": { + "x": 305.33953857421875, + "y": 209.3164825439453 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 125.97505950927734, + "y": 93.401123046875 + }, + "direction": 0.6400571465492249, + "dropPoint": { + "x": 238.2807159423828, + "y": 177.23306274414063 + }, + "position": { + "x": 72.57644653320313, + "y": 53.63877487182617 + }, + "predictedTarget": { + "x": 305.22955322265625, + "y": 209.3464813232422 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 127.12982940673828, + "y": 94.36180114746094 + }, + "direction": 0.6412447690963745, + "dropPoint": { + "x": 238.115478515625, + "y": 177.21041870117188 + }, + "position": { + "x": 73.77847290039063, + "y": 54.53606414794922 + }, + "predictedTarget": { + "x": 305.1195373535156, + "y": 209.37649536132813 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 128.33184814453125, + "y": 95.25909423828125 + }, + "direction": 0.6412447690963745, + "dropPoint": { + "x": 237.95205688476563, + "y": 177.18812561035156 + }, + "position": { + "x": 74.98049926757813, + "y": 55.433353424072266 + }, + "predictedTarget": { + "x": 305.0095520019531, + "y": 209.406494140625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 129.53387451171875, + "y": 96.15638732910156 + }, + "direction": 0.6412447690963745, + "dropPoint": { + "x": 237.7912139892578, + "y": 177.16587829589844 + }, + "position": { + "x": 76.18252563476563, + "y": 56.33064270019531 + }, + "predictedTarget": { + "x": 304.8995361328125, + "y": 209.43649291992188 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 130.6882781982422, + "y": 97.1174087524414 + }, + "direction": 0.6424135565757751, + "dropPoint": { + "x": 237.63194274902344, + "y": 177.14358520507813 + }, + "position": { + "x": 77.38350677490234, + "y": 57.22933578491211 + }, + "predictedTarget": { + "x": 304.78955078125, + "y": 209.46649169921875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 131.88925170898438, + "y": 98.01609802246094 + }, + "direction": 0.6424135565757751, + "dropPoint": { + "x": 237.61273193359375, + "y": 176.98670959472656 + }, + "position": { + "x": 78.58448791503906, + "y": 58.128028869628906 + }, + "predictedTarget": { + "x": 304.6795349121094, + "y": 209.49649047851563 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 133.13677978515625, + "y": 98.85252380371094 + }, + "direction": 0.6412714719772339, + "dropPoint": { + "x": 237.59349060058594, + "y": 176.83175659179688 + }, + "position": { + "x": 79.78649139404297, + "y": 59.025352478027344 + }, + "predictedTarget": { + "x": 304.5695495605469, + "y": 209.5264892578125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 134.3387908935547, + "y": 99.74984741210938 + }, + "direction": 0.6412714719772339, + "dropPoint": { + "x": 237.57455444335938, + "y": 176.67877197265625 + }, + "position": { + "x": 80.98849487304688, + "y": 59.92267608642578 + }, + "predictedTarget": { + "x": 304.45953369140625, + "y": 209.55648803710938 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 135.58682250976563, + "y": 100.5854263305664 + }, + "direction": 0.6401402354240417, + "dropPoint": { + "x": 237.5556182861328, + "y": 176.52789306640625 + }, + "position": { + "x": 82.19151306152344, + "y": 60.81863784790039 + }, + "predictedTarget": { + "x": 304.34954833984375, + "y": 209.58648681640625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 136.7898406982422, + "y": 101.48138427734375 + }, + "direction": 0.6401402354240417, + "dropPoint": { + "x": 237.5369415283203, + "y": 176.37881469726563 + }, + "position": { + "x": 83.39453125, + "y": 61.714599609375 + }, + "predictedTarget": { + "x": 304.2340393066406, + "y": 209.61099243164063 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 138.03842163085938, + "y": 102.31610870361328 + }, + "direction": 0.6390190124511719, + "dropPoint": { + "x": 237.51821899414063, + "y": 176.23159790039063 + }, + "position": { + "x": 84.59855651855469, + "y": 62.60921096801758 + }, + "predictedTarget": { + "x": 304.1140441894531, + "y": 209.63099670410156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 139.24244689941406, + "y": 103.21072387695313 + }, + "direction": 0.6390190124511719, + "dropPoint": { + "x": 237.49977111816406, + "y": 176.0863800048828 + }, + "position": { + "x": 85.80258178710938, + "y": 63.503822326660156 + }, + "predictedTarget": { + "x": 303.9940490722656, + "y": 209.6510009765625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 140.49151611328125, + "y": 104.04464721679688 + }, + "direction": 0.637908935546875, + "dropPoint": { + "x": 237.48129272460938, + "y": 175.9430389404297 + }, + "position": { + "x": 87.00759887695313, + "y": 64.3970947265625 + }, + "predictedTarget": { + "x": 303.8740539550781, + "y": 209.67098999023438 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 141.696533203125, + "y": 104.93791198730469 + }, + "direction": 0.637908935546875, + "dropPoint": { + "x": 237.4631805419922, + "y": 175.8018798828125 + }, + "position": { + "x": 88.21261596679688, + "y": 65.29036712646484 + }, + "predictedTarget": { + "x": 303.7540588378906, + "y": 209.6909942626953 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 142.94601440429688, + "y": 105.7711181640625 + }, + "direction": 0.636810839176178, + "dropPoint": { + "x": 237.4449920654297, + "y": 175.66241455078125 + }, + "position": { + "x": 89.41860961914063, + "y": 66.18231964111328 + }, + "predictedTarget": { + "x": 303.6340637207031, + "y": 209.71099853515625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 144.15200805664063, + "y": 106.66307067871094 + }, + "direction": 0.636810839176178, + "dropPoint": { + "x": 237.28944396972656, + "y": 175.63934326171875 + }, + "position": { + "x": 90.62460327148438, + "y": 67.07427215576172 + }, + "predictedTarget": { + "x": 303.5140380859375, + "y": 209.7310028076172 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 145.35800170898438, + "y": 107.55502319335938 + }, + "direction": 0.636810839176178, + "dropPoint": { + "x": 237.136474609375, + "y": 175.61630249023438 + }, + "position": { + "x": 91.83059692382813, + "y": 67.96622467041016 + }, + "predictedTarget": { + "x": 303.39404296875, + "y": 209.75099182128906 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 146.5152130126953, + "y": 108.51285552978516 + }, + "direction": 0.6380151510238647, + "dropPoint": { + "x": 236.98509216308594, + "y": 175.59295654296875 + }, + "position": { + "x": 93.03551483154297, + "y": 68.85962677001953 + }, + "predictedTarget": { + "x": 303.2740478515625, + "y": 209.77099609375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 147.72012329101563, + "y": 109.40625762939453 + }, + "direction": 0.6380151510238647, + "dropPoint": { + "x": 236.8360595703125, + "y": 175.57052612304688 + }, + "position": { + "x": 94.24043273925781, + "y": 69.7530288696289 + }, + "predictedTarget": { + "x": 303.154052734375, + "y": 209.79100036621094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 148.925048828125, + "y": 110.2996597290039 + }, + "direction": 0.6380151510238647, + "dropPoint": { + "x": 236.68812561035156, + "y": 175.54751586914063 + }, + "position": { + "x": 95.44535064697266, + "y": 70.64643096923828 + }, + "predictedTarget": { + "x": 303.03955078125, + "y": 209.8054962158203 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 150.08181762695313, + "y": 111.25792694091797 + }, + "direction": 0.639201819896698, + "dropPoint": { + "x": 236.54327392578125, + "y": 175.5250701904297 + }, + "position": { + "x": 96.64920806884766, + "y": 71.541259765625 + }, + "predictedTarget": { + "x": 302.9295654296875, + "y": 209.81549072265625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 151.28567504882813, + "y": 112.15275573730469 + }, + "direction": 0.639201819896698, + "dropPoint": { + "x": 236.39968872070313, + "y": 175.50250244140625 + }, + "position": { + "x": 97.85306549072266, + "y": 72.43608856201172 + }, + "predictedTarget": { + "x": 302.8195495605469, + "y": 209.82550048828125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 152.48953247070313, + "y": 113.0475845336914 + }, + "direction": 0.639201819896698, + "dropPoint": { + "x": 236.25872802734375, + "y": 175.48045349121094 + }, + "position": { + "x": 99.05692291259766, + "y": 73.33091735839844 + }, + "predictedTarget": { + "x": 302.70953369140625, + "y": 209.8354949951172 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 153.64605712890625, + "y": 114.00599670410156 + }, + "direction": 0.6403660774230957, + "dropPoint": { + "x": 236.11932373046875, + "y": 175.45790100097656 + }, + "position": { + "x": 100.25973510742188, + "y": 74.2271499633789 + }, + "predictedTarget": { + "x": 302.59954833984375, + "y": 209.84548950195313 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 154.848876953125, + "y": 114.90223693847656 + }, + "direction": 0.6403660774230957, + "dropPoint": { + "x": 235.9817657470703, + "y": 175.43597412109375 + }, + "position": { + "x": 101.4625473022461, + "y": 75.12338256835938 + }, + "predictedTarget": { + "x": 302.4895324707031, + "y": 209.85549926757813 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 156.05169677734375, + "y": 115.7984619140625 + }, + "direction": 0.6403660774230957, + "dropPoint": { + "x": 235.96359252929688, + "y": 175.30018615722656 + }, + "position": { + "x": 102.66535949707031, + "y": 76.01961517333984 + }, + "predictedTarget": { + "x": 302.3795471191406, + "y": 209.86549377441406 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 157.25450134277344, + "y": 116.6947021484375 + }, + "direction": 0.6403660774230957, + "dropPoint": { + "x": 235.94541931152344, + "y": 175.16671752929688 + }, + "position": { + "x": 103.86817169189453, + "y": 76.91584777832031 + }, + "predictedTarget": { + "x": 302.26953125, + "y": 209.87548828125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 158.5126495361328, + "y": 117.51655578613281 + }, + "direction": 0.6390044093132019, + "dropPoint": { + "x": 235.92730712890625, + "y": 175.03546142578125 + }, + "position": { + "x": 105.07220458984375, + "y": 77.81044006347656 + }, + "predictedTarget": { + "x": 302.1595458984375, + "y": 209.885498046875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 159.7166748046875, + "y": 118.41114807128906 + }, + "direction": 0.6390044093132019, + "dropPoint": { + "x": 235.90943908691406, + "y": 174.9058074951172 + }, + "position": { + "x": 106.27623748779297, + "y": 78.70503234863281 + }, + "predictedTarget": { + "x": 302.0495300292969, + "y": 209.89549255371094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 160.96726989746094, + "y": 119.24301147460938 + }, + "direction": 0.6378570199012756, + "dropPoint": { + "x": 235.89163208007813, + "y": 174.7783203125 + }, + "position": { + "x": 107.4813003540039, + "y": 79.5982437133789 + }, + "predictedTarget": { + "x": 301.9340515136719, + "y": 209.90548706054688 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 162.17233276367188, + "y": 120.13623046875 + }, + "direction": 0.6378570199012756, + "dropPoint": { + "x": 235.87408447265625, + "y": 174.65237426757813 + }, + "position": { + "x": 108.68636322021484, + "y": 80.491455078125 + }, + "predictedTarget": { + "x": 301.8140563964844, + "y": 209.91549682617188 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 163.42340087890625, + "y": 120.9673080444336 + }, + "direction": 0.6367213726043701, + "dropPoint": { + "x": 235.8565673828125, + "y": 174.52874755859375 + }, + "position": { + "x": 109.89244079589844, + "y": 81.38330078125 + }, + "predictedTarget": { + "x": 301.69403076171875, + "y": 209.9254913330078 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 164.6294708251953, + "y": 121.8591537475586 + }, + "direction": 0.6367213726043701, + "dropPoint": { + "x": 235.83929443359375, + "y": 174.40664672851563 + }, + "position": { + "x": 111.09851837158203, + "y": 82.275146484375 + }, + "predictedTarget": { + "x": 301.57403564453125, + "y": 209.93548583984375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 165.88095092773438, + "y": 122.68951416015625 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.82211303710938, + "y": 174.286865234375 + }, + "position": { + "x": 112.30559539794922, + "y": 83.16563415527344 + }, + "predictedTarget": { + "x": 301.45404052734375, + "y": 209.94549560546875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 167.08804321289063, + "y": 123.58000183105469 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.80517578125, + "y": 174.16879272460938 + }, + "position": { + "x": 113.5126724243164, + "y": 84.05612182617188 + }, + "predictedTarget": { + "x": 301.33404541015625, + "y": 209.9554901123047 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 168.29510498046875, + "y": 124.47048950195313 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.80963134765625, + "y": 174.16860961914063 + }, + "position": { + "x": 114.7197494506836, + "y": 84.94660949707031 + }, + "predictedTarget": { + "x": 301.2140197753906, + "y": 209.9654998779297 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 169.502197265625, + "y": 125.36097717285156 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.8140411376953, + "y": 174.16842651367188 + }, + "position": { + "x": 115.92682647705078, + "y": 85.83709716796875 + }, + "predictedTarget": { + "x": 301.0940246582031, + "y": 209.97549438476563 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 170.70925903320313, + "y": 126.25146484375 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.81845092773438, + "y": 174.16827392578125 + }, + "position": { + "x": 117.13390350341797, + "y": 86.72758483886719 + }, + "predictedTarget": { + "x": 300.9740295410156, + "y": 209.98548889160156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 171.91635131835938, + "y": 127.14195251464844 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.82284545898438, + "y": 174.1681365966797 + }, + "position": { + "x": 118.34098052978516, + "y": 87.61807250976563 + }, + "predictedTarget": { + "x": 300.8540344238281, + "y": 209.99549865722656 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 173.1234130859375, + "y": 128.03244018554688 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.82723999023438, + "y": 174.16802978515625 + }, + "position": { + "x": 119.54805755615234, + "y": 88.50856018066406 + }, + "predictedTarget": { + "x": 300.7340393066406, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 174.33050537109375, + "y": 128.9229278564453 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.83157348632813, + "y": 174.16790771484375 + }, + "position": { + "x": 120.75513458251953, + "y": 89.3990478515625 + }, + "predictedTarget": { + "x": 300.6140441894531, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 175.53756713867188, + "y": 129.81341552734375 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.83595275878906, + "y": 174.1678466796875 + }, + "position": { + "x": 121.96221160888672, + "y": 90.28953552246094 + }, + "predictedTarget": { + "x": 300.4940185546875, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 176.74465942382813, + "y": 130.7039031982422 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.84027099609375, + "y": 174.16778564453125 + }, + "position": { + "x": 123.1692886352539, + "y": 91.18002319335938 + }, + "predictedTarget": { + "x": 300.3740234375, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 177.95172119140625, + "y": 131.59439086914063 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.8446044921875, + "y": 174.16773986816406 + }, + "position": { + "x": 124.3763656616211, + "y": 92.07051086425781 + }, + "predictedTarget": { + "x": 300.2540283203125, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 179.1588134765625, + "y": 132.48487854003906 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.848876953125, + "y": 174.16770935058594 + }, + "position": { + "x": 125.58344268798828, + "y": 92.96099853515625 + }, + "predictedTarget": { + "x": 300.134033203125, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 180.36587524414063, + "y": 133.3753662109375 + }, + "direction": 0.6355987191200256, + "dropPoint": { + "x": 235.70321655273438, + "y": 174.03175354003906 + }, + "position": { + "x": 126.79051971435547, + "y": 93.85148620605469 + }, + "predictedTarget": { + "x": 300.0140380859375, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 181.6199493408203, + "y": 134.20208740234375 + }, + "direction": 0.6344349980354309, + "dropPoint": { + "x": 235.55999755859375, + "y": 173.8981475830078 + }, + "position": { + "x": 127.99862670898438, + "y": 94.74057006835938 + }, + "predictedTarget": { + "x": 299.89404296875, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 182.82806396484375, + "y": 135.09115600585938 + }, + "direction": 0.6344349980354309, + "dropPoint": { + "x": 235.41885375976563, + "y": 173.76602172851563 + }, + "position": { + "x": 129.2067413330078, + "y": 95.62965393066406 + }, + "predictedTarget": { + "x": 299.7740478515625, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 184.0361785888672, + "y": 135.98025512695313 + }, + "direction": 0.6344349980354309, + "dropPoint": { + "x": 235.28012084960938, + "y": 173.63623046875 + }, + "position": { + "x": 130.41485595703125, + "y": 96.51873779296875 + }, + "predictedTarget": { + "x": 299.654052734375, + "y": 210.0 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 185.24429321289063, + "y": 136.86932373046875 + }, + "direction": 0.6344349980354309, + "dropPoint": { + "x": 235.1431121826172, + "y": 173.50848388671875 + }, + "position": { + "x": 131.6229705810547, + "y": 97.40782165527344 + }, + "predictedTarget": { + "x": 299.5340270996094, + "y": 209.9945068359375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 186.45240783691406, + "y": 137.7584228515625 + }, + "direction": 0.6344349980354309, + "dropPoint": { + "x": 235.0081787109375, + "y": 173.38290405273438 + }, + "position": { + "x": 132.83108520507813, + "y": 98.29690551757813 + }, + "predictedTarget": { + "x": 299.4140319824219, + "y": 209.9844970703125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 187.6605224609375, + "y": 138.64749145507813 + }, + "direction": 0.6344349980354309, + "dropPoint": { + "x": 234.87530517578125, + "y": 173.25930786132813 + }, + "position": { + "x": 134.03919982910156, + "y": 99.18598937988281 + }, + "predictedTarget": { + "x": 299.2940368652344, + "y": 209.97450256347656 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 188.9102783203125, + "y": 139.4799346923828 + }, + "direction": 0.6334022879600525, + "dropPoint": { + "x": 234.744873046875, + "y": 173.1380615234375 + }, + "position": { + "x": 135.24822998046875, + "y": 100.07382202148438 + }, + "predictedTarget": { + "x": 299.1740417480469, + "y": 209.96450805664063 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 190.1193084716797, + "y": 140.36776733398438 + }, + "direction": 0.6334022879600525, + "dropPoint": { + "x": 234.61648559570313, + "y": 173.0184326171875 + }, + "position": { + "x": 136.45726013183594, + "y": 100.96165466308594 + }, + "predictedTarget": { + "x": 299.0540466308594, + "y": 209.95449829101563 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 191.32833862304688, + "y": 141.25559997558594 + }, + "direction": 0.6334022879600525, + "dropPoint": { + "x": 234.49050903320313, + "y": 172.90084838867188 + }, + "position": { + "x": 137.66629028320313, + "y": 101.8494873046875 + }, + "predictedTarget": { + "x": 298.93402099609375, + "y": 209.9445037841797 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 192.59225463867188, + "y": 142.06857299804688 + }, + "direction": 0.6320387125015259, + "dropPoint": { + "x": 234.59048461914063, + "y": 172.82144165039063 + }, + "position": { + "x": 138.87652587890625, + "y": 102.73567199707031 + }, + "predictedTarget": { + "x": 298.81402587890625, + "y": 209.9344940185547 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 193.84335327148438, + "y": 142.89889526367188 + }, + "direction": 0.631022036075592, + "dropPoint": { + "x": 234.68853759765625, + "y": 172.74371337890625 + }, + "position": { + "x": 140.08766174316406, + "y": 103.6206283569336 + }, + "predictedTarget": { + "x": 298.69403076171875, + "y": 209.92449951171875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 195.0950164794922, + "y": 143.72833251953125 + }, + "direction": 0.6300122141838074, + "dropPoint": { + "x": 234.78518676757813, + "y": 172.66775512695313 + }, + "position": { + "x": 141.29969787597656, + "y": 104.50436401367188 + }, + "predictedTarget": { + "x": 298.57403564453125, + "y": 209.9145050048828 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 196.34718322753906, + "y": 144.55697631835938 + }, + "direction": 0.6290110349655151, + "dropPoint": { + "x": 234.87973022460938, + "y": 172.59329223632813 + }, + "position": { + "x": 142.5126190185547, + "y": 105.38687896728516 + }, + "predictedTarget": { + "x": 298.45404052734375, + "y": 209.9044952392578 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 197.5601043701172, + "y": 145.43948364257813 + }, + "direction": 0.6290110349655151, + "dropPoint": { + "x": 234.97325134277344, + "y": 172.5208282470703 + }, + "position": { + "x": 143.7255401611328, + "y": 106.26939392089844 + }, + "predictedTarget": { + "x": 298.3340148925781, + "y": 209.89450073242188 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 198.85247802734375, + "y": 146.21255493164063 + }, + "direction": 0.6270242929458618, + "dropPoint": { + "x": 235.06399536132813, + "y": 172.45022583007813 + }, + "position": { + "x": 144.94020080566406, + "y": 107.14949798583984 + }, + "predictedTarget": { + "x": 298.2140197753906, + "y": 209.88449096679688 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 200.067138671875, + "y": 147.0926513671875 + }, + "direction": 0.6270242929458618, + "dropPoint": { + "x": 235.1537322998047, + "y": 172.38104248046875 + }, + "position": { + "x": 146.1548614501953, + "y": 108.02960205078125 + }, + "predictedTarget": { + "x": 298.0940246582031, + "y": 209.87449645996094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 201.359619140625, + "y": 147.86517333984375 + }, + "direction": 0.6250739693641663, + "dropPoint": { + "x": 235.24110412597656, + "y": 172.31396484375 + }, + "position": { + "x": 147.37124633789063, + "y": 108.90734100341797 + }, + "predictedTarget": { + "x": 297.9740295410156, + "y": 209.864501953125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 202.57598876953125, + "y": 148.742919921875 + }, + "direction": 0.6250739693641663, + "dropPoint": { + "x": 235.32705688476563, + "y": 172.24794006347656 + }, + "position": { + "x": 148.58763122558594, + "y": 109.78507995605469 + }, + "predictedTarget": { + "x": 297.8540344238281, + "y": 209.85450744628906 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 203.8685760498047, + "y": 149.5148468017578 + }, + "direction": 0.6231585741043091, + "dropPoint": { + "x": 235.41131591796875, + "y": 172.18423461914063 + }, + "position": { + "x": 149.80569458007813, + "y": 110.66048431396484 + }, + "predictedTarget": { + "x": 297.7340393066406, + "y": 209.84449768066406 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 205.08663940429688, + "y": 150.39024353027344 + }, + "direction": 0.6231585741043091, + "dropPoint": { + "x": 235.31027221679688, + "y": 172.16259765625 + }, + "position": { + "x": 151.0237579345703, + "y": 111.535888671875 + }, + "predictedTarget": { + "x": 297.6140441894531, + "y": 209.83450317382813 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 206.30470275878906, + "y": 151.26565551757813 + }, + "direction": 0.6231585741043091, + "dropPoint": { + "x": 235.21066284179688, + "y": 172.14056396484375 + }, + "position": { + "x": 152.2418212890625, + "y": 112.41129302978516 + }, + "predictedTarget": { + "x": 297.4940490722656, + "y": 209.8245086669922 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 207.47586059570313, + "y": 152.20623779296875 + }, + "direction": 0.6243380904197693, + "dropPoint": { + "x": 235.11383056640625, + "y": 172.11878967285156 + }, + "position": { + "x": 153.45884704589844, + "y": 113.28813171386719 + }, + "predictedTarget": { + "x": 297.3740234375, + "y": 209.8144989013672 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 208.69288635253906, + "y": 153.08306884765625 + }, + "direction": 0.6243380904197693, + "dropPoint": { + "x": 235.0184326171875, + "y": 172.09765625 + }, + "position": { + "x": 154.67587280273438, + "y": 114.16497039794922 + }, + "predictedTarget": { + "x": 297.2540283203125, + "y": 209.80450439453125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 209.909912109375, + "y": 153.95989990234375 + }, + "direction": 0.6243380904197693, + "dropPoint": { + "x": 234.92539978027344, + "y": 172.0763397216797 + }, + "position": { + "x": 155.8928985595703, + "y": 115.04180908203125 + }, + "predictedTarget": { + "x": 297.134033203125, + "y": 209.78900146484375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 211.08119201660156, + "y": 154.90017700195313 + }, + "direction": 0.6254869699478149, + "dropPoint": { + "x": 234.83424377441406, + "y": 172.05523681640625 + }, + "position": { + "x": 157.10891723632813, + "y": 115.9200439453125 + }, + "predictedTarget": { + "x": 297.0140380859375, + "y": 209.76901245117188 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 212.29721069335938, + "y": 155.77841186523438 + }, + "direction": 0.6254869699478149, + "dropPoint": { + "x": 234.74472045898438, + "y": 172.03456115722656 + }, + "position": { + "x": 158.32493591308594, + "y": 116.79827880859375 + }, + "predictedTarget": { + "x": 296.89404296875, + "y": 209.74900817871094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 213.5132293701172, + "y": 156.65664672851563 + }, + "direction": 0.6254869699478149, + "dropPoint": { + "x": 234.65731811523438, + "y": 172.01382446289063 + }, + "position": { + "x": 159.54095458984375, + "y": 117.676513671875 + }, + "predictedTarget": { + "x": 296.7740478515625, + "y": 209.72900390625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 214.68479919433594, + "y": 157.5963592529297 + }, + "direction": 0.6266013383865356, + "dropPoint": { + "x": 234.57235717773438, + "y": 171.993408203125 + }, + "position": { + "x": 160.75599670410156, + "y": 118.55610656738281 + }, + "predictedTarget": { + "x": 296.6540222167969, + "y": 209.70901489257813 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 215.89984130859375, + "y": 158.4759521484375 + }, + "direction": 0.6266013383865356, + "dropPoint": { + "x": 234.48873901367188, + "y": 171.97340393066406 + }, + "position": { + "x": 161.97103881835938, + "y": 119.43569946289063 + }, + "predictedTarget": { + "x": 296.5340270996094, + "y": 209.6890106201172 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 217.11488342285156, + "y": 159.3555450439453 + }, + "direction": 0.6266013383865356, + "dropPoint": { + "x": 234.47238159179688, + "y": 171.89337158203125 + }, + "position": { + "x": 163.1860809326172, + "y": 120.31529235839844 + }, + "predictedTarget": { + "x": 296.4140319824219, + "y": 209.66900634765625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 218.32992553710938, + "y": 160.23513793945313 + }, + "direction": 0.6266013383865356, + "dropPoint": { + "x": 234.45599365234375, + "y": 171.81565856933594 + }, + "position": { + "x": 164.401123046875, + "y": 121.19488525390625 + }, + "predictedTarget": { + "x": 296.2940368652344, + "y": 209.6490020751953 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 219.60372924804688, + "y": 161.03341674804688 + }, + "direction": 0.6251277327537537, + "dropPoint": { + "x": 234.4395751953125, + "y": 171.74014282226563 + }, + "position": { + "x": 165.61746215820313, + "y": 122.07268524169922 + }, + "predictedTarget": { + "x": 296.17401123046875, + "y": 209.62901306152344 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 220.820068359375, + "y": 161.91122436523438 + }, + "direction": 0.6251277327537537, + "dropPoint": { + "x": 234.42369079589844, + "y": 171.6659393310547 + }, + "position": { + "x": 166.83380126953125, + "y": 122.95048522949219 + }, + "predictedTarget": { + "x": 296.05401611328125, + "y": 209.6090087890625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 222.08416748046875, + "y": 162.7227783203125 + }, + "direction": 0.6239281296730042, + "dropPoint": { + "x": 234.40782165527344, + "y": 171.5940399169922 + }, + "position": { + "x": 168.0511932373047, + "y": 123.82682800292969 + }, + "predictedTarget": { + "x": 295.93951416015625, + "y": 209.58900451660156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 223.30154418945313, + "y": 163.59912109375 + }, + "direction": 0.6239281296730042, + "dropPoint": { + "x": 234.39263916015625, + "y": 171.5236358642578 + }, + "position": { + "x": 169.26858520507813, + "y": 124.70317077636719 + }, + "predictedTarget": { + "x": 295.82952880859375, + "y": 209.5690155029297 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 224.5658416748047, + "y": 164.41021728515625 + }, + "direction": 0.6227478981018066, + "dropPoint": { + "x": 234.37722778320313, + "y": 171.4554443359375 + }, + "position": { + "x": 170.48699951171875, + "y": 125.57807159423828 + }, + "predictedTarget": { + "x": 295.7195129394531, + "y": 209.54901123046875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 225.7842559814453, + "y": 165.28512573242188 + }, + "direction": 0.6227478981018066, + "dropPoint": { + "x": 234.36227416992188, + "y": 171.38876342773438 + }, + "position": { + "x": 171.70541381835938, + "y": 126.45297241210938 + }, + "predictedTarget": { + "x": 295.6095275878906, + "y": 209.5290069580078 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 227.048583984375, + "y": 166.09600830078125 + }, + "direction": 0.6215905547142029, + "dropPoint": { + "x": 234.3472900390625, + "y": 171.32415771484375 + }, + "position": { + "x": 172.9248504638672, + "y": 127.32646942138672 + }, + "predictedTarget": { + "x": 295.49951171875, + "y": 209.50900268554688 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 228.26803588867188, + "y": 166.96949768066406 + }, + "direction": 0.6215905547142029, + "dropPoint": { + "x": 234.33282470703125, + "y": 171.26113891601563 + }, + "position": { + "x": 174.144287109375, + "y": 128.19996643066406 + }, + "predictedTarget": { + "x": 295.3895263671875, + "y": 209.48899841308594 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 229.53477478027344, + "y": 167.77687072753906 + }, + "direction": 0.6203962564468384, + "dropPoint": { + "x": 234.31642150878906, + "y": 171.1934051513672 + }, + "position": { + "x": 175.36476135253906, + "y": 129.07200622558594 + }, + "predictedTarget": { + "x": 295.2795104980469, + "y": 209.468994140625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 230.7552490234375, + "y": 168.64891052246094 + }, + "direction": 0.6203962564468384, + "dropPoint": { + "x": 234.30056762695313, + "y": 171.1273193359375 + }, + "position": { + "x": 176.58523559570313, + "y": 129.9440460205078 + }, + "predictedTarget": { + "x": 295.1695251464844, + "y": 209.44900512695313 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 232.0244140625, + "y": 169.45269775390625 + }, + "direction": 0.6191645860671997, + "dropPoint": { + "x": 234.28466796875, + "y": 171.06346130371094 + }, + "position": { + "x": 177.80677795410156, + "y": 130.8145751953125 + }, + "predictedTarget": { + "x": 295.05950927734375, + "y": 209.4290008544922 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 233.24595642089844, + "y": 170.32322692871094 + }, + "direction": 0.6191645860671997, + "dropPoint": { + "x": 234.2692413330078, + "y": 171.00094604492188 + }, + "position": { + "x": 179.0283203125, + "y": 131.6851043701172 + }, + "predictedTarget": { + "x": 294.94952392578125, + "y": 209.40899658203125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 234.51522827148438, + "y": 171.12669372558594 + }, + "direction": 0.6179553866386414, + "dropPoint": { + "x": 234.25357055664063, + "y": 170.94068908691406 + }, + "position": { + "x": 180.25091552734375, + "y": 132.5541534423828 + }, + "predictedTarget": { + "x": 294.8395080566406, + "y": 209.3834991455078 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 235.73782348632813, + "y": 171.99574279785156 + }, + "direction": 0.6179553866386414, + "dropPoint": { + "x": 234.2386474609375, + "y": 170.88186645507813 + }, + "position": { + "x": 181.4735107421875, + "y": 133.42320251464844 + }, + "predictedTarget": { + "x": 294.7295227050781, + "y": 209.35350036621094 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 237.0072021484375, + "y": 172.7989044189453 + }, + "direction": 0.6167684197425842, + "dropPoint": { + "x": 234.22372436523438, + "y": 170.82530212402344 + }, + "position": { + "x": 182.6971435546875, + "y": 134.29080200195313 + }, + "predictedTarget": { + "x": 294.6195068359375, + "y": 209.32350158691406 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 238.2308349609375, + "y": 173.66650390625 + }, + "direction": 0.6167684197425842, + "dropPoint": { + "x": 234.2093505859375, + "y": 170.77020263671875 + }, + "position": { + "x": 183.9207763671875, + "y": 135.1584014892578 + }, + "predictedTarget": { + "x": 294.509521484375, + "y": 209.2935028076172 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 239.50018310546875, + "y": 174.46954345703125 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.1949462890625, + "y": 170.7171630859375 + }, + "position": { + "x": 185.14541625976563, + "y": 136.0245819091797 + }, + "predictedTarget": { + "x": 294.3995056152344, + "y": 209.2635040283203 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 240.72482299804688, + "y": 175.33572387695313 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.1810760498047, + "y": 170.66563415527344 + }, + "position": { + "x": 186.37005615234375, + "y": 136.89076232910156 + }, + "predictedTarget": { + "x": 294.28948974609375, + "y": 209.23350524902344 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 241.949462890625, + "y": 176.201904296875 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.18789672851563, + "y": 170.66854858398438 + }, + "position": { + "x": 187.59469604492188, + "y": 137.75694274902344 + }, + "predictedTarget": { + "x": 294.17950439453125, + "y": 209.20350646972656 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 243.17410278320313, + "y": 177.06808471679688 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.19467163085938, + "y": 170.67153930664063 + }, + "position": { + "x": 188.8193359375, + "y": 138.6231231689453 + }, + "predictedTarget": { + "x": 294.0694885253906, + "y": 209.1735076904297 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 244.39874267578125, + "y": 177.93426513671875 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.201416015625, + "y": 170.67457580566406 + }, + "position": { + "x": 190.04397583007813, + "y": 139.4893035888672 + }, + "predictedTarget": { + "x": 293.9595031738281, + "y": 209.1435089111328 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 245.62338256835938, + "y": 178.80044555664063 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.20819091796875, + "y": 170.67774963378906 + }, + "position": { + "x": 191.26861572265625, + "y": 140.35548400878906 + }, + "predictedTarget": { + "x": 293.8494873046875, + "y": 209.11351013183594 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 246.8480224609375, + "y": 179.6666259765625 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.21499633789063, + "y": 170.68087768554688 + }, + "position": { + "x": 192.49325561523438, + "y": 141.22166442871094 + }, + "predictedTarget": { + "x": 293.739501953125, + "y": 209.0780029296875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 248.07266235351563, + "y": 180.53280639648438 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.22164916992188, + "y": 170.68417358398438 + }, + "position": { + "x": 193.7178955078125, + "y": 142.0878448486328 + }, + "predictedTarget": { + "x": 293.6295166015625, + "y": 209.0380096435547 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 249.29730224609375, + "y": 181.39898681640625 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.2282257080078, + "y": 170.6874542236328 + }, + "position": { + "x": 194.94253540039063, + "y": 142.9540252685547 + }, + "predictedTarget": { + "x": 293.5195007324219, + "y": 208.9980010986328 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 250.52194213867188, + "y": 182.26516723632813 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.23471069335938, + "y": 170.69073486328125 + }, + "position": { + "x": 196.16717529296875, + "y": 143.82020568847656 + }, + "predictedTarget": { + "x": 293.4095153808594, + "y": 208.9580078125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 251.74658203125, + "y": 183.13134765625 + }, + "direction": 0.615606427192688, + "dropPoint": { + "x": 234.2412109375, + "y": 170.6942138671875 + }, + "position": { + "x": 197.39181518554688, + "y": 144.68638610839844 + }, + "predictedTarget": { + "x": 293.29949951171875, + "y": 208.91799926757813 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 253.0115509033203, + "y": 183.94046020507813 + }, + "direction": 0.6145797371864319, + "dropPoint": { + "x": 234.24758911132813, + "y": 170.6976318359375 + }, + "position": { + "x": 198.61734008789063, + "y": 145.5513153076172 + }, + "predictedTarget": { + "x": 293.18951416015625, + "y": 208.8780059814453 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 254.23707580566406, + "y": 184.80538940429688 + }, + "direction": 0.6145797371864319, + "dropPoint": { + "x": 234.23170471191406, + "y": 170.6526641845703 + }, + "position": { + "x": 199.84286499023438, + "y": 146.41624450683594 + }, + "predictedTarget": { + "x": 293.0794982910156, + "y": 208.83799743652344 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 255.5124053955078, + "y": 185.5996551513672 + }, + "direction": 0.6133100390434265, + "dropPoint": { + "x": 234.21572875976563, + "y": 170.60983276367188 + }, + "position": { + "x": 201.06948852539063, + "y": 147.2796173095703 + }, + "predictedTarget": { + "x": 292.9695129394531, + "y": 208.79800415039063 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 256.739013671875, + "y": 186.46302795410156 + }, + "direction": 0.6133100390434265, + "dropPoint": { + "x": 234.20034790039063, + "y": 170.5682830810547 + }, + "position": { + "x": 202.29611206054688, + "y": 148.1429901123047 + }, + "predictedTarget": { + "x": 292.8595275878906, + "y": 208.75799560546875 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 258.01422119140625, + "y": 187.25732421875 + }, + "direction": 0.6120696663856506, + "dropPoint": { + "x": 234.18479919433594, + "y": 170.5289764404297 + }, + "position": { + "x": 203.5238037109375, + "y": 149.0048370361328 + }, + "predictedTarget": { + "x": 292.74951171875, + "y": 208.71800231933594 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 259.2419128417969, + "y": 188.11917114257813 + }, + "direction": 0.6120696663856506, + "dropPoint": { + "x": 234.17005920410156, + "y": 170.49098205566406 + }, + "position": { + "x": 204.75149536132813, + "y": 149.86668395996094 + }, + "predictedTarget": { + "x": 292.64501953125, + "y": 208.67799377441406 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 260.5169372558594, + "y": 188.91346740722656 + }, + "direction": 0.6108580827713013, + "dropPoint": { + "x": 234.15530395507813, + "y": 170.45513916015625 + }, + "position": { + "x": 205.980224609375, + "y": 150.72703552246094 + }, + "predictedTarget": { + "x": 292.5450134277344, + "y": 208.63800048828125 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 261.74566650390625, + "y": 189.77381896972656 + }, + "direction": 0.6108580827713013, + "dropPoint": { + "x": 234.14137268066406, + "y": 170.42059326171875 + }, + "position": { + "x": 207.20895385742188, + "y": 151.58738708496094 + }, + "predictedTarget": { + "x": 292.44500732421875, + "y": 208.59800720214844 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 263.0204162597656, + "y": 190.56837463378906 + }, + "direction": 0.6096786856651306, + "dropPoint": { + "x": 234.12734985351563, + "y": 170.38829040527344 + }, + "position": { + "x": 208.43870544433594, + "y": 152.4462890625 + }, + "predictedTarget": { + "x": 292.34503173828125, + "y": 208.55799865722656 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 264.25018310546875, + "y": 191.42727661132813 + }, + "direction": 0.6096786856651306, + "dropPoint": { + "x": 234.11378479003906, + "y": 170.35699462890625 + }, + "position": { + "x": 209.66845703125, + "y": 153.30519104003906 + }, + "predictedTarget": { + "x": 292.2450256347656, + "y": 208.51800537109375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 265.5244140625, + "y": 192.22238159179688 + }, + "direction": 0.6085359454154968, + "dropPoint": { + "x": 234.10043334960938, + "y": 170.32797241210938 + }, + "position": { + "x": 210.89918518066406, + "y": 154.16268920898438 + }, + "predictedTarget": { + "x": 292.14501953125, + "y": 208.47799682617188 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 266.7551574707031, + "y": 193.0798797607422 + }, + "direction": 0.6085359454154968, + "dropPoint": { + "x": 234.1614227294922, + "y": 170.3545684814453 + }, + "position": { + "x": 212.12991333007813, + "y": 155.0201873779297 + }, + "predictedTarget": { + "x": 292.0450134277344, + "y": 208.43800354003906 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 267.9858703613281, + "y": 193.9373779296875 + }, + "direction": 0.6085359454154968, + "dropPoint": { + "x": 234.22006225585938, + "y": 170.38116455078125 + }, + "position": { + "x": 213.3606414794922, + "y": 155.877685546875 + }, + "predictedTarget": { + "x": 291.94500732421875, + "y": 208.39801025390625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 269.2703552246094, + "y": 194.71762084960938 + }, + "direction": 0.6071534752845764, + "dropPoint": { + "x": 234.2768096923828, + "y": 170.40794372558594 + }, + "position": { + "x": 214.59255981445313, + "y": 156.73348999023438 + }, + "predictedTarget": { + "x": 291.84503173828125, + "y": 208.35800170898438 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 270.5022888183594, + "y": 195.57342529296875 + }, + "direction": 0.6071534752845764, + "dropPoint": { + "x": 234.3319549560547, + "y": 170.43338012695313 + }, + "position": { + "x": 215.82447814941406, + "y": 157.58929443359375 + }, + "predictedTarget": { + "x": 291.7450256347656, + "y": 208.31800842285156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 271.73419189453125, + "y": 196.42922973632813 + }, + "direction": 0.6071534752845764, + "dropPoint": { + "x": 234.38511657714844, + "y": 170.45896911621094 + }, + "position": { + "x": 217.056396484375, + "y": 158.44509887695313 + }, + "predictedTarget": { + "x": 291.64501953125, + "y": 208.2725067138672 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 273.017333984375, + "y": 197.211181640625 + }, + "direction": 0.6058332920074463, + "dropPoint": { + "x": 234.43600463867188, + "y": 170.48455810546875 + }, + "position": { + "x": 218.28944396972656, + "y": 159.2992706298828 + }, + "predictedTarget": { + "x": 291.5450134277344, + "y": 208.22250366210938 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 274.2503967285156, + "y": 198.06536865234375 + }, + "direction": 0.6058332920074463, + "dropPoint": { + "x": 234.48573303222656, + "y": 170.50897216796875 + }, + "position": { + "x": 219.52249145507813, + "y": 160.1534423828125 + }, + "predictedTarget": { + "x": 291.44500732421875, + "y": 208.17250061035156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 275.4834289550781, + "y": 198.91952514648438 + }, + "direction": 0.6058332920074463, + "dropPoint": { + "x": 234.53326416015625, + "y": 170.5333251953125 + }, + "position": { + "x": 220.7555389404297, + "y": 161.0076141357422 + }, + "predictedTarget": { + "x": 291.3450012207031, + "y": 208.12249755859375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 276.76513671875, + "y": 199.70335388183594 + }, + "direction": 0.6045769453048706, + "dropPoint": { + "x": 234.57870483398438, + "y": 170.55772399902344 + }, + "position": { + "x": 221.98965454101563, + "y": 161.8602294921875 + }, + "predictedTarget": { + "x": 291.2450256347656, + "y": 208.072509765625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 277.999267578125, + "y": 200.55596923828125 + }, + "direction": 0.6045769453048706, + "dropPoint": { + "x": 234.62277221679688, + "y": 170.58079528808594 + }, + "position": { + "x": 223.22377014160156, + "y": 162.7128448486328 + }, + "predictedTarget": { + "x": 291.14501953125, + "y": 208.0225067138672 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 279.27374267578125, + "y": 201.35009765625 + }, + "direction": 0.6035329103469849, + "dropPoint": { + "x": 234.60577392578125, + "y": 170.55886840820313 + }, + "position": { + "x": 224.45877075195313, + "y": 163.56417846679688 + }, + "predictedTarget": { + "x": 291.0450134277344, + "y": 207.97250366210938 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 280.50872802734375, + "y": 202.20143127441406 + }, + "direction": 0.6035329103469849, + "dropPoint": { + "x": 234.58944702148438, + "y": 170.53819274902344 + }, + "position": { + "x": 225.6937713623047, + "y": 164.41551208496094 + }, + "predictedTarget": { + "x": 290.94500732421875, + "y": 207.92250061035156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 281.7925109863281, + "y": 202.98193359375 + }, + "direction": 0.6022695899009705, + "dropPoint": { + "x": 234.57305908203125, + "y": 170.51979064941406 + }, + "position": { + "x": 226.9298553466797, + "y": 165.26528930664063 + }, + "predictedTarget": { + "x": 290.8450012207031, + "y": 207.87249755859375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 283.0285949707031, + "y": 203.8317108154297 + }, + "direction": 0.6022695899009705, + "dropPoint": { + "x": 234.55758666992188, + "y": 170.50228881835938 + }, + "position": { + "x": 228.1659393310547, + "y": 166.1150665283203 + }, + "predictedTarget": { + "x": 290.7450256347656, + "y": 207.822509765625 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 284.3117980957031, + "y": 204.61285400390625 + }, + "direction": 0.601046621799469, + "dropPoint": { + "x": 234.5420684814453, + "y": 170.4870147705078 + }, + "position": { + "x": 229.40306091308594, + "y": 166.9633331298828 + }, + "predictedTarget": { + "x": 290.6505126953125, + "y": 207.7725067138672 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 285.5489196777344, + "y": 205.46112060546875 + }, + "direction": 0.601046621799469, + "dropPoint": { + "x": 234.52745056152344, + "y": 170.47256469726563 + }, + "position": { + "x": 230.6401824951172, + "y": 167.8115997314453 + }, + "predictedTarget": { + "x": 290.5605163574219, + "y": 207.72250366210938 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 286.831298828125, + "y": 206.24327087402344 + }, + "direction": 0.5998696684837341, + "dropPoint": { + "x": 234.51283264160156, + "y": 170.4602813720703 + }, + "position": { + "x": 231.8782958984375, + "y": 168.6584014892578 + }, + "predictedTarget": { + "x": 290.47052001953125, + "y": 207.67250061035156 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 288.0694274902344, + "y": 207.09007263183594 + }, + "direction": 0.5998696684837341, + "dropPoint": { + "x": 234.49920654296875, + "y": 170.44879150390625 + }, + "position": { + "x": 233.1164093017578, + "y": 169.5052032470703 + }, + "predictedTarget": { + "x": 290.3804931640625, + "y": 207.62249755859375 + }, + "state": "MOVING", + "targetIndex": 0 + }, + { + "aimPoint": { + "x": 289.35064697265625, + "y": 207.87374877929688 + }, + "direction": 0.598746657371521, + "dropPoint": { + "x": 234.48561096191406, + "y": 170.4394073486328 + }, + "position": { + "x": 234.35546875, + "y": 170.35061645507813 + }, + "predictedTarget": { + "x": 290.2904968261719, + "y": 207.572509765625 + }, + "state": "MOVING", + "targetIndex": 0 + } + ], + "totalSteps": 241 +} \ No newline at end of file