diff --git a/data/inference-outcome.csv b/data/inference-outcome.csv new file mode 100644 index 00000000..35d51ccc --- /dev/null +++ b/data/inference-outcome.csv @@ -0,0 +1,1871 @@ +,transaction,best_vendor,best_account,confidence +2,7375524016070717,6891738899426960,101155069755498,0.8820305 +9,7406310341674089,6891738899431434,101155069755498,0.9972274 +10,7393116202138345,6891738899431434,101155069755498,0.99865675 +11,7419504481208074,6891738899431434,101155069755498,0.99880815 +12,7410708388184670,6891738899431434,101155069755498,0.9974873 +13,7419504481218904,6891738899431434,101155069755498,0.9982944 +14,7419504481207955,6891738899431434,101155069755498,0.9982961 +15,7393116202139150,6891738899430508,101155069755498,0.9683728 +43,7393116202119634,6891738899431499,101155069755498,0.98397344 +44,7204000201967862,6891738899431499,101155069755498,0.99966 +45,7384320109106309,6891738899431499,101155069755498,0.9995789 +46,7278766992720605,6891738899431499,101155069755498,0.99992275 +47,7454688853344701,6891738899431499,101155069755498,0.9996809 +48,7384320109084176,6891738899431499,101155069755498,0.99981064 +49,7265572853191149,6891738899431499,101155069755498,0.99878305 +50,7195204108925870,6891738899431499,101155069755498,0.9998323 +51,7265572853180808,6891738899431499,101155069755498,0.9994603 +52,7459086899859663,6891738899431499,101155069755498,0.99929535 +53,7296359178777838,6891738899431499,101155069755498,0.9997775 +54,7393116202118754,6891738899431499,101155069755498,0.99986696 +55,7353533783487642,6891738899431499,101155069755498,0.99982566 +56,7463484946370446,6891738899431499,101155069755498,0.99935395 +57,7441494713784294,6891738899431499,101155069755498,0.99964607 +58,7300757225308029,6891738899431499,101155069755498,0.99945027 +59,7353533783476503,6891738899431499,101155069755498,0.99924797 +60,7300757225311308,6891738899431499,101155069755498,0.99970347 +61,7287563085773279,6891738899431499,101155069755498,0.9997032 +62,7212796294988315,6891738899431499,101155069755498,0.999845 +63,7353533783487801,6891738899431499,101155069755498,0.9997894 +64,7406310341676762,6891738899431499,101155069755498,0.9499903 +65,7423902527749145,6891738899431499,101155069755498,0.9996456 +66,7318349411369342,6891738899431499,101155069755498,0.9995807 +67,7459086899859815,6891738899431499,101155069755498,0.99935335 +68,7401912295165083,6891738899431499,101155069755498,0.99973696 +69,7388718155600749,6891738899431499,101155069755498,0.99982697 +70,7265572853191105,6891738899431499,101155069755498,0.99993837 +71,7371125969557199,6891738899431499,101155069755498,0.9998623 +72,7555843923185794,6891738899431499,101155069755498,0.9998801 +73,7357931830004992,6891738899431499,101155069755498,0.9993605 +74,7353533783487813,6891738899431499,101155069755498,0.9998192 +75,7401912295165014,6891738899431499,101155069755498,0.97123575 +76,7234786527584605,6891738899431499,101155069755498,0.9996537 +77,7300757225306962,6891738899431499,101155069755498,0.9995807 +78,7384320109087217,6891738899431499,101155069755498,0.99652666 +79,7472281039392856,6891738899431499,101155069755498,0.99935323 +80,7379922062584624,6891738899431499,101155069755498,0.99979204 +81,7437096667294162,6891738899431499,101155069755498,0.99980944 +82,7287563085747385,6891738899431499,101155069755498,0.9974221 +83,7393116202113882,6891738899431499,101155069755498,0.99820983 +84,7472281039392895,6891738899431499,101155069755498,0.9988764 +85,7234786527577233,6891738899431499,101155069755498,0.9981317 +86,7459086899859751,6891738899431499,101155069755498,0.99887735 +87,7459086899859703,6891738899431499,101155069755498,0.9992949 +88,7204000201967910,6891738899431499,101155069755498,0.999426 +89,7287563085747313,6891738899431499,101155069755498,0.9999025 +90,7357931830014297,6891738899431499,101155069755498,0.9992261 +91,7503067365024257,6891738899431499,101155069755498,0.9986803 +92,7230388481073915,6891738899431499,101155069755498,0.9996538 +93,7371125969558760,6891738899431499,101155069755498,0.9999217 +94,7327145504388516,6891738899431499,101155069755498,0.9998989 +95,7371125969549167,6891738899431499,101155069755498,0.99973696 +96,7432698620769790,6891738899431499,101155069755498,0.96603274 +97,7459086899850257,6891738899431499,101155069755498,0.99086505 +98,7331543550909023,6891738899431499,101155069755498,0.9999008 +99,7173213876371317,6891738899431499,101155069755498,0.9996743 +100,7371125969557225,6891738899431499,101155069755498,0.99599695 +101,7388718155600692,6891738899431499,101155069755498,0.9997477 +102,7393116202118786,6891738899431499,101155069755498,0.9985055 +103,7265572853191113,6891738899431499,101155069755498,0.9999397 +104,7287563085774234,6891738899431499,101155069755498,0.9995807 +105,7384320109084175,6891738899431499,101155069755498,0.99956876 +106,7278766992720417,6891738899431499,101155069755498,0.9975631 +107,7371125969556963,6891738899431499,101155069755498,0.99987257 +108,7410708388195262,6891738899431499,101155069755498,0.9995969 +109,7401912295164979,6891738899431499,101155069755498,0.9709839 +110,7371125969555589,6891738899431499,101155069755498,0.9961612 +111,7401912295164970,6891738899431499,101155069755498,0.96404606 +112,7419504481229795,6891738899431499,101155069755498,0.99968016 +113,7300757225306899,6891738899431499,101155069755498,0.9995809 +114,7463484946370997,6891738899431499,101155069755498,0.9992944 +115,7366727923049406,6891738899431499,101155069755498,0.99973375 +116,7388718155601791,6891738899431499,101155069755498,0.9998932 +117,7296359178781865,6891738899431499,101155069755498,0.99858165 +118,7428300574243492,6891738899431499,101155069755498,0.96879107 +119,7195204108925876,6891738899431499,101155069755498,0.9998203 +120,7287563085754557,6891738899431499,101155069755498,0.9977252 +121,7555843923185774,6891738899431499,101155069755498,0.99985933 +122,7278766992720581,6891738899431499,101155069755498,0.9999242 +123,7287563085754514,6891738899431499,101155069755498,0.9998776 +124,7463484946370953,6891738899431499,101155069755498,0.9988764 +125,7371125969552918,6891738899431499,101155069755498,0.9994604 +126,7234786527584616,6891738899431499,101155069755498,0.9996538 +127,7371125969555637,6891738899431499,101155069755498,0.99990857 +128,7454688853339535,6891738899431499,101155069755498,0.99937075 +129,7498669318502603,6891738899431499,101155069755498,0.99840456 +130,7274368946207419,6891738899431499,101155069755498,0.9999138 +131,7472281039392834,6891738899431499,101155069755498,0.9993537 +132,7437096667267542,6891738899431499,101155069755498,0.9997049 +133,7419504481218887,6891738899431499,101155069755498,0.999423 +134,7300757225311342,6891738899431499,101155069755498,0.9997032 +135,7366727923042183,6891738899431499,101155069755498,0.9993162 +136,7467882992890463,6891738899431499,101155069755498,0.99988484 +137,7520659551076135,6891738899431499,101155069755498,0.99992216 +138,7419504481229785,6891738899431108,101155069755498,0.9076722 +139,7256776760165601,6874146713381684,101155069755498,0.90578693 +140,7256776760165640,6874146713381684,101155069755498,0.87459755 +141,7388718155600206,6874146713381684,101155069755498,0.93064946 +142,7432698620764161,6891738899427024,101155069755498,0.9913657 +144,7309553318323835,6891738899431297,101155069755498,0.99797994 +145,7195204108937229,6891738899433273,101155069755498,0.9966893 +146,7234786527562323,6891738899433273,101155069755498,0.9972765 +147,7393116202141652,6891738899431492,101155069755498,0.9959746 +148,7353533783504120,6891738899430721,101155069755498,0.99609333 +151,7371125969557050,6874146713381364,101155069755498,0.999905 +152,7278766992720689,6874146713381364,101155069755498,0.9998981 +153,7265572853193239,6874146713381364,101155069755498,0.9997154 +154,7428300574252127,6874146713381364,101155069755498,0.9935759 +155,7388718155601786,6874146713381364,101155069755498,0.9997948 +156,7516261504546438,6874146713381364,101155069755498,0.9951061 +157,7287563085747377,6874146713381364,101155069755498,0.99988973 +158,7287563085754527,6874146713381364,101155069755498,0.99984777 +159,7274368946213260,6874146713381364,101155069755498,0.9998816 +160,7371125969558750,6874146713381364,101155069755498,0.9999032 +161,7274368946207442,6874146713381364,101155069755498,0.9997305 +162,7375524016066652,6874146713381364,101155069755498,0.9999157 +163,7375524016066474,6874146713381364,101155069755498,0.9998097 +164,7507465411524394,6874146713381364,101155069755498,0.99005973 +165,7362329876534270,6874146713381364,101155069755498,0.99989176 +166,7256776760160405,6891738899426920,101155069755498,0.99968016 +167,7265572853189856,6891738899426920,101155069755498,0.99935347 +168,7476679085908956,6891738899426920,101155069755498,0.9996321 +169,7357931829996174,6891738899426920,101155069755498,0.99968696 +170,7287563085747236,6891738899426920,101155069755498,0.99972516 +172,7278766992738893,6882942806404219,101155069755498,0.96263045 +174,7362329876535665,6891738899432322,101155069755498,0.9928093 +175,7529455644107178,6891738899432322,101155069755498,0.99032193 +176,7371125969552907,6891738899432278,101155069755498,0.8260893 +177,7353533783487914,6891738899433014,101155069755508,0.97364 +178,7261174806676906,101155069755482,101155069755508,0.9990036 +179,7353533783499931,101155069755482,101155069755508,0.9970192 +180,7173213876375254,101155069755482,101155069755508,0.99866664 +181,7300757225304971,101155069755482,101155069755508,0.9959721 +182,7375524016055632,101155069755482,101155069755508,0.9983303 +183,7274368946202213,101155069755482,101155069755508,0.9986665 +184,7503067365024226,101155069755482,101155069755508,0.9976386 +185,7560241969711904,101155069755482,101155069755508,0.98745793 +186,7300757225306722,6891738899432835,101155069755508,0.9991553 +187,7256776760145017,6891738899432835,101155069755508,0.9993457 +188,7428300574251142,6891738899432835,101155069755508,0.9989147 +189,7300757225306981,6891738899432835,101155069755508,0.99905306 +190,7322747457869210,6891738899432835,101155069755508,0.9989881 +191,7423902527743833,6891738899432835,101155069755508,0.9992099 +192,7230388481059910,6891738899432835,101155069755508,0.9976494 +193,7186408015914362,6891738899432835,101155069755508,0.9992099 +194,7195204108948058,6891738899432835,101155069755508,0.99926084 +195,7300757225309674,6891738899432835,101155069755508,0.99914944 +196,7190806062435001,6891738899432835,101155069755508,0.99927396 +197,7234786527584687,6891738899432835,101155069755508,0.9991493 +198,7252378713628635,6891738899432835,101155069755508,0.9992182 +199,7256776760145003,6891738899432835,101155069755508,0.999316 +200,7256776760140770,6891738899432835,101155069755508,0.9990233 +201,7300757225306733,6891738899432835,101155069755508,0.999257 +202,7204000201958003,6891738899432835,101155069755508,0.99927396 +203,7287563085774318,6891738899432835,101155069755508,0.9992304 +204,7476679085906140,6891738899432835,101155069755508,0.99335974 +205,7247980667118720,6891738899432835,101155069755508,0.99920005 +206,7459086899863592,6891738899432835,101155069755508,0.99500763 +207,7195204108948121,6891738899432835,101155069755508,0.9992607 +208,7190806062409346,6891738899432835,101155069755508,0.99209845 +209,7212796294989986,6891738899432835,101155069755508,0.99927396 +210,7318349411369335,6891738899432835,101155069755508,0.99925345 +211,7256776760143613,6891738899432835,101155069755508,0.9987972 +212,7195204108927402,6891738899432835,101155069755508,0.9992099 +213,7300757225307939,6891738899432835,101155069755508,0.99927264 +214,7300757225306862,6891738899432835,101155069755508,0.9992254 +215,7190806062435087,6891738899432835,101155069755508,0.9992099 +216,7287563085774337,6891738899432835,101155069755508,0.9992254 +217,7441494713793280,6891738899432835,101155069755508,0.9989147 +218,7256776760141271,6891738899432835,101155069755508,0.9989837 +219,7313951364844467,6891738899432835,101155069755508,0.9991493 +220,7195204108948115,6891738899432835,101155069755508,0.99927396 +221,7300757225307987,6891738899432835,101155069755508,0.99913687 +222,7296359178799765,6891738899432835,101155069755508,0.9992725 +223,7450290806816330,6891738899432835,101155069755508,0.9108708 +224,7195204108948185,6891738899432835,101155069755508,0.9992304 +225,7300757225311495,6891738899432835,101155069755508,0.9992254 +226,7230388481073997,6891738899432835,101155069755508,0.9989837 +227,7287563085773274,6891738899432835,101155069755508,0.99928826 +228,7274368946213107,6891738899432835,101155069755508,0.99591225 +229,7212796294989823,6891738899432835,101155069755508,0.99926347 +230,7256776760140744,6891738899432835,101155069755508,0.99921715 +231,7256776760140757,6891738899432835,101155069755508,0.9991493 +232,7256776760140841,6891738899432835,101155069755508,0.9989837 +233,7256776760140775,6891738899432835,101155069755508,0.9991493 +234,7300757225309582,6891738899432835,101155069755508,0.9989837 +235,7287563085773289,6891738899432835,101155069755508,0.9991167 +236,7300757225306976,6891738899432835,101155069755508,0.9992637 +237,7204000201967878,6891738899432835,101155069755508,0.9992662 +238,7195204108948210,6891738899432835,101155069755508,0.9990233 +239,7569038062739187,6891738899432835,101155069755508,0.9924476 +240,7234786527586098,6891738899432835,101155069755508,0.99921715 +241,7318349411369433,6891738899432835,101155069755508,0.9989837 +242,7520659551067393,6891738899432835,101155069755508,0.9924326 +244,7322747457873481,6891738899432835,101155069755508,0.99927264 +245,7300757225311387,6891738899432835,101155069755508,0.9992304 +246,7173213876371315,6891738899432835,101155069755508,0.99927396 +247,7503067365011967,6891738899432835,101155069755508,0.9995067 +248,7234786527584543,6891738899432835,101155069755508,0.9991429 +249,7441494713793253,6891738899432835,101155069755508,0.9989147 +250,7375524016071457,6891738899432835,101155069755508,0.9890372 +251,7186408015914369,6891738899432835,101155069755508,0.99927396 +252,7437096667270130,6891738899432835,101155069755508,0.99873 +253,7300757225306786,6891738899432835,101155069755508,0.9991326 +254,7423902527739761,6891738899432835,101155069755508,0.9989147 +255,7291961132288852,6891738899432835,101155069755508,0.99922025 +256,7190806062434209,6891738899432835,101155069755508,0.99925786 +257,7300757225307073,6891738899432835,101155069755508,0.99905294 +258,7252378713628612,6891738899432835,101155069755508,0.99933773 +259,7322747457873492,6891738899432835,101155069755508,0.99922025 +260,7195204108947769,6891738899432835,101155069755508,0.99921715 +261,7384320109087090,6891738899432835,101155069755508,0.9957377 +262,7234786527586058,6891738899432835,101155069755508,0.99921715 +263,7190806062434210,6891738899432835,101155069755508,0.99934584 +264,7287563085774308,6891738899432835,101155069755508,0.99927264 +265,7287563085773222,6891738899432835,101155069755508,0.99922025 +266,7243582620610884,6891738899432835,101155069755508,0.99925774 +267,7287563085774323,6891738899432835,101155069755508,0.9989837 +268,7199602155459080,6891738899432835,101155069755508,0.9991429 +269,7375524016066543,6891738899432835,101155069755508,0.9957482 +270,7300757225308023,6891738899432835,101155069755508,0.9992674 +271,7296359178799694,6891738899432835,101155069755508,0.99890304 +272,7234786527584540,6891738899432835,101155069755508,0.99921715 +273,7190806062434255,6891738899432835,101155069755508,0.99933773 +274,7300757225309572,6891738899432835,101155069755508,0.99905354 +275,7296359178796160,6891738899432835,101155069755508,0.99905294 +276,7247980667118799,6891738899432835,101155069755508,0.9989837 +277,7190806062435023,6891738899432835,101155069755508,0.99928635 +278,7204000201957941,6891738899432835,101155069755508,0.99922633 +279,7287563085773204,6891738899432835,101155069755508,0.9989837 +280,7230388481073002,6891738899432835,101155069755508,0.99921834 +281,7234786527586077,6891738899432835,101155069755508,0.99921715 +282,7195204108948206,6891738899432835,101155069755508,0.9992637 +283,7186408015914303,6891738899432835,101155069755508,0.99922645 +284,7195204108927420,6891738899432835,101155069755508,0.9992662 +285,7190806062434940,6891738899432835,101155069755508,0.9992766 +286,7195204108927408,6891738899432835,101155069755508,0.99927396 +287,7318349411369394,6891738899432835,101155069755508,0.99914753 +288,7195204108947777,6891738899432835,101155069755508,0.99922645 +289,7520659551073583,6891738899432835,101155069755508,0.9966538 +290,7230388481074598,6891738899432835,101155069755508,0.9991374 +291,7419504481229827,6891738899432835,101155069755508,0.9987301 +292,7287563085773227,6891738899432835,101155069755508,0.99927753 +293,7318349411369398,6891738899432835,101155069755508,0.9992034 +294,7173213876371364,6891738899432835,101155069755508,0.99927396 +295,7388718155601310,6891738899432835,101155069755508,0.9993311 +296,7300757225307080,6891738899432835,101155069755508,0.9992248 +297,7234786527586005,6891738899432835,101155069755508,0.9991374 +298,7415106434707179,6891738899432835,101155069755508,0.99924624 +299,7247980667119537,6891738899432835,101155069755508,0.9991374 +300,7375524016071328,6891738899432835,101155069755508,0.9939902 +301,7199602155458906,6891738899432835,101155069755508,0.9992607 +302,7204000201969439,6891738899432835,101155069755508,0.9991153 +303,7283165039233379,6891738899432835,101155069755508,0.99937385 +304,7278766992732814,6891738899432835,101155069755508,0.9954852 +305,7309553318321931,6891738899432835,101155069755508,0.99362296 +306,7322747457873464,6891738899432835,101155069755508,0.9989015 +307,7529455644113295,6891738899432566,101155069755508,0.9983499 +308,7503067365011976,6891738899432566,101155069755508,0.9992981 +309,7428300574238390,6891738899432566,101155069755508,0.99900407 +310,7388718155600679,6891738899432566,101155069755508,0.99823856 +311,7393116202141162,6891738899432566,101155069755508,0.99852544 +312,7252378713625150,6891738899432566,101155069755508,0.9980819 +313,7252378713625141,6891738899432566,101155069755508,0.9973109 +314,7503067365011962,6891738899432566,101155069755508,0.9990921 +315,7256776760137881,6891738899432566,101155069755508,0.99787927 +316,7287563085747359,6891738899432566,101155069755508,0.99506605 +317,7327145504412157,6891738899432566,101155069755508,0.9988275 +318,7177611922887302,6891738899432566,101155069755508,0.9991874 +319,7190806062425114,6891738899432566,101155069755508,0.998884 +320,7401912295171495,6891738899432566,101155069755508,0.9982034 +321,7274368946207436,6891738899432566,101155069755508,0.9940971 +322,7177611922887380,6891738899432566,101155069755508,0.99888057 +323,7327145504412111,6891738899432566,101155069755508,0.9982608 +324,7529455644113290,6891738899432566,101155069755508,0.99792767 +325,7428300574238387,6891738899432566,101155069755508,0.9992206 +326,7379922062584700,6891738899432566,101155069755508,0.9953323 +327,7230388481073895,6891738899432566,101155069755508,0.99354845 +328,7371125969558982,6891738899432566,101155069755508,0.99424523 +329,7265572853193219,6891738899432566,101155069755508,0.99754983 +330,7327145504412138,6891738899432566,101155069755508,0.9988649 +331,7327145504412967,6891738899432566,101155069755508,0.9981645 +332,7269970899700465,6891738899432566,101155069755508,0.99515414 +333,7265572853192558,6891738899432566,101155069755508,0.99808466 +334,7393116202113991,6891738899432566,101155069755508,0.99423146 +335,7362329876535570,6891738899432566,101155069755508,0.9979849 +336,7190806062425125,6891738899432566,101155069755508,0.99946207 +337,7401912295171583,6891738899432566,101155069755508,0.9448945 +338,7393116202134894,6891738899432566,101155069755508,0.99842393 +339,7371125969557350,6891738899432566,101155069755508,0.994414 +340,7243582620598747,6891738899432566,101155069755508,0.9977477 +341,7287563085747308,6891738899432566,101155069755508,0.99383885 +342,7560241969717553,6891738899432566,101155069755508,0.9994025 +343,7327145504412152,6891738899432566,101155069755508,0.99858296 +344,7362329876535575,6891738899432566,101155069755508,0.9986261 +345,7503067365011958,6891738899432566,101155069755508,0.9990895 +346,7560241969717587,6891738899432566,101155069755508,0.998871 +347,7362329876535562,6891738899432566,101155069755508,0.99828583 +348,7388718155624566,6891738899432566,101155069755508,0.9987822 +349,7428300574238829,6891738899432566,101155069755508,0.99900633 +350,7327145504412159,6891738899432566,101155069755508,0.99852496 +351,7247980667124815,6891738899432566,101155069755508,0.9970162 +352,7393116202141172,6891738899432566,101155069755508,0.99820733 +353,7393116202134893,6891738899432566,101155069755508,0.9990356 +354,7547047830157925,6891738899432566,101155069755508,0.9986772 +355,7190806062425133,6891738899432566,101155069755508,0.99924207 +356,7190806062420303,6891738899432566,101155069755508,0.9994118 +357,7256776760137914,6891738899432566,101155069755508,0.99819714 +359,7212796294988273,6891738899432566,101155069755508,0.99443746 +360,7371125969555048,6891738899432566,101155069755508,0.99748826 +361,7560241969717562,6891738899432566,101155069755508,0.9992125 +362,7371125969556985,6891738899432566,101155069755508,0.9952691 +363,7256776760137874,6891738899432566,101155069755508,0.9985513 +364,7437096667294525,6874146713382768,101155069755508,0.996182 +365,7459086899850412,6874146713382768,101155069755508,0.99617165 +366,7300757225291166,6874146713382768,101155069755508,0.9988199 +367,7432698620769726,6874146713382768,101155069755508,0.99855155 +368,7313951364850822,6874146713382768,101155069755508,0.99832195 +369,7459086899850441,6874146713382768,101155069755508,0.9961701 +370,7432698620769717,6874146713382768,101155069755508,0.9985505 +371,7313951364850989,6874146713382768,101155069755508,0.998323 +372,7300757225291178,6874146713382768,101155069755508,0.9988201 +373,7318349411365243,6874146713382768,101155069755508,0.99872345 +374,7335941597429112,6874146713382768,101155069755508,0.9985898 +375,7335941597422189,6874146713382768,101155069755508,0.9983203 +376,7331543550904263,6874146713382768,101155069755508,0.99764854 +377,7362329876532149,6874146713382768,101155069755508,0.99860555 +378,7313951364850967,6874146713382768,101155069755508,0.9983176 +379,7375524016070867,6891738899432833,101155069755508,0.99819607 +380,7318349411377352,6891738899432833,101155069755508,0.99779785 +381,7401912295148400,6891738899432833,101155069755508,0.9904565 +382,7397514248633076,6891738899432833,101155069755508,0.9987613 +383,7243582620599783,6891738899432833,101155069755508,0.9986141 +384,7371125969551756,6891738899432833,101155069755508,0.9991372 +385,7516261504546425,6891738899432833,101155069755508,0.98995376 +386,7564640016221493,6891738899432833,101155069755508,0.9982722 +387,7423902527729800,6891738899432833,101155069755508,0.99732375 +388,7221592388027918,6891738899432833,101155069755508,0.9980896 +389,7322747457871588,6891738899432833,101155069755508,0.99752945 +390,7331543550908359,6891738899432833,101155069755508,0.998468 +391,7182009969405600,6891738899432833,101155069755508,0.99313265 +392,7450290806836877,6900534992449855,101155069755508,0.9620501 +393,7459086899863600,6874146713380882,101155069755508,0.8309146 +394,7516261504544552,6874146713380882,101155069755508,0.9080236 +395,7230388481059901,6874146713380882,101155069755508,0.97070944 +396,7177611922878808,6891738899431701,101155069755508,0.8207027 +397,7459086899861845,6891738899431701,101155069755508,0.98915976 +398,7498669318503892,6891738899431701,101155069755508,0.84226143 +399,7481077132431712,6891738899431701,101155069755508,0.8207425 +405,7547047830175105,6891738899431532,4085785217347644,0.99666256 +406,7305155271832687,6891738899432463,4085785217347644,0.9995616 +407,7335941597429080,6891738899432463,4085785217347644,0.99944586 +408,7335941597422206,6891738899432463,4085785217347644,0.99944586 +409,7247980667124762,6891738899432463,4085785217347644,0.9992774 +410,7371125969559015,6891738899431774,4085785217347644,0.9986761 +411,7300757225311375,6874146713382657,4085785217347644,0.9997328 +412,7322747457867710,6874146713382657,4085785217347644,0.9997373 +413,7313951364844823,6874146713382657,4085785217347644,0.9997521 +414,7322747457867809,6874146713382657,4085785217347644,0.99972373 +415,7313951364844867,6874146713382657,4085785217347644,0.9997682 +416,7300757225311477,6874146713382657,4085785217347644,0.9997838 +417,7322747457867622,6874146713382657,4085785217347644,0.99978393 +418,7322747457867795,6874146713382657,4085785217347644,0.9997234 +419,7300757225311457,6874146713382657,4085785217347644,0.9997832 +420,7322747457867699,6874146713382657,4085785217347644,0.9995952 +421,7186408015909615,6874146713381270,4085785217347644,0.99972814 +422,7182009969404893,6874146713381270,4085785217347644,0.9993406 +423,7529455644099198,6891738899425541,4085785217347644,0.9994252 +424,7384320109091349,6891738899431018,4085785217347662,0.9944041 +425,7208398248493496,6891738899431018,4085785217347662,0.9430324 +426,7467882992897857,6891738899431018,4085785217347662,0.9595148 +427,7300757225311318,6891738899431018,4085785217347662,0.99113184 +428,7463484946369472,6891738899431018,4085785217347662,0.956374 +429,7393116202139805,6891738899431899,4085785217347663,0.99749315 +431,7305155271814857,6896136945937614,4085785217347666,0.9974591 +432,7265572853180819,6896136945937614,4085785217347666,0.9981623 +433,7313951364850860,6896136945937614,4085785217347666,0.9982292 +434,7349135736987561,6896136945937614,4085785217347666,0.9831646 +435,7362329876525195,6896136945937614,4085785217347666,0.99642015 +436,7362329876525190,6896136945937614,4085785217347666,0.9970517 +437,7313951364850870,6896136945937614,4085785217347666,0.99743515 +438,7459086899850385,6896136945937614,4085785217347666,0.99626094 +439,7472281039403504,6896136945937614,4085785217347666,0.9971596 +440,7375524016055475,6896136945937614,4085785217347666,0.9930139 +441,7406310341679920,6896136945937614,4085785217347666,0.9984413 +442,7300757225317378,6896136945937614,4085785217347666,0.9974362 +443,7362329876530838,6896136945937614,4085785217347666,0.99733317 +444,7397514248650746,6896136945937614,4085785217347666,0.9883845 +445,7507465411539446,6896136945937614,4085785217347666,0.9977875 +446,7353533783475517,6896136945937614,4085785217347666,0.99930143 +447,7459086899853799,6896136945937614,4085785217347666,0.9917446 +448,7265572853180856,6896136945937614,4085785217347666,0.99818486 +449,7287563085745569,6896136945937614,4085785217347666,0.99572766 +450,7357931830012248,6896136945937614,4085785217347666,0.9992167 +451,7463484946359869,6896136945937614,4085785217347666,0.9967301 +452,7164417783333170,6896136945937614,4085785217347666,0.9963201 +453,7450290806838832,6896136945937614,4085785217347666,0.99722123 +454,7401912295171680,6896136945937614,4085785217347666,0.99821633 +455,7230388481064667,6896136945937614,4085785217347666,0.99866307 +456,7234786527576239,6896136945937614,4085785217347666,0.9946695 +457,7406310341661110,6896136945937614,4085785217347666,0.9846705 +458,7437096667294174,6896136945937614,4085785217347666,0.9996369 +459,7300757225317457,6896136945937614,4085785217347666,0.99743736 +460,7340339643939119,6896136945937614,4085785217347666,0.9888095 +461,7516261504558029,6896136945937614,4085785217347666,0.9908618 +462,7463484946370434,6896136945937614,4085785217347666,0.9995796 +463,7481077132427097,6896136945937614,4085785217347666,0.9944353 +464,7230388481068723,6896136945937614,4085785217347666,0.9989184 +465,7313951364850845,6896136945937614,4085785217347666,0.9974354 +466,7300757225317383,6896136945937614,4085785217347666,0.9974362 +467,7371125969545105,6896136945937614,4085785217347666,0.99796754 +468,7393116202132419,6896136945937614,4085785217347666,0.99652416 +469,7551445876686494,6896136945937614,4085785217347666,0.97494566 +470,7256776760158668,6896136945937614,4085785217347666,0.9974394 +471,7379922062576628,6896136945937614,4085785217347666,0.99907386 +472,7410708388184647,6896136945937614,4085785217347666,0.99624556 +473,7309553318324181,6896136945937614,4085785217347666,0.99900013 +474,7406310341679904,6896136945937614,4085785217347666,0.99844056 +475,7410708388178803,6896136945937614,4085785217347666,0.9997873 +476,7300757225317402,6896136945937614,4085785217347666,0.9974361 +477,7353533783499837,6896136945937614,4085785217347666,0.99757737 +478,7472281039398451,6896136945937614,4085785217347666,0.98984504 +479,7300757225317393,6896136945937614,4085785217347666,0.9975189 +480,7313951364850850,6896136945937614,4085785217347666,0.9974354 +481,7511863458044110,6896136945937614,4085785217347666,0.9943297 +482,7300757225317415,6896136945937614,4085785217347666,0.99743587 +483,7265572853180828,6896136945937614,4085785217347666,0.99823713 +484,7287563085771915,6896136945937614,4085785217347666,0.99767417 +485,7445892760297672,6896136945937614,4085785217347666,0.99828315 +486,7349135736987554,6896136945937614,4085785217347666,0.99317414 +487,7349135736965459,6896136945937614,4085785217347666,0.9981071 +488,7454688853334828,6896136945937614,4085785217347666,0.99912757 +489,7269970899703946,6896136945937614,4085785217347666,0.9975701 +490,7300757225317453,6896136945937614,4085785217347666,0.997437 +491,7300757225317352,6896136945937614,4085785217347666,0.9974367 +492,7459086899859809,6896136945937614,4085785217347666,0.9967704 +493,7256776760158664,6896136945937614,4085785217347666,0.99823725 +494,7357931830015384,6896136945937614,4085785217347666,0.99319506 +495,7560241969699655,6896136945937614,4085785217347666,0.9984781 +496,7472281039398484,6896136945937614,4085785217347666,0.99175876 +497,7573436109243977,6896136945937614,4085785217347666,0.99730694 +498,7225990434555879,6896136945937614,4085785217347666,0.99871004 +499,7313951364850875,6896136945937614,4085785217347666,0.9974353 +500,7313951364850825,6896136945937614,4085785217347666,0.99743575 +501,7507465411539463,6896136945937614,4085785217347666,0.9938135 +502,7300757225317407,6896136945937614,4085785217347666,0.99743587 +503,7331543550920355,6896136945937614,4085785217347666,0.98015726 +504,7423902527733393,6896136945937614,4085785217347666,0.9977842 +505,7397514248653225,6896136945937614,4085785217347666,0.9975721 +506,7393116202139838,6896136945937614,4085785217347666,0.9916407 +507,7393116202139856,6896136945937614,4085785217347666,0.99055356 +508,7353533783499934,6896136945937614,4085785217347666,0.994183 +509,7428300574265394,6896136945937614,4085785217347666,0.9985619 +510,7445892760306611,6891738899430553,4085785217347666,0.9960967 +511,7186408015906675,6891738899430553,4085785217347666,0.9894007 +512,7283165039253665,6891738899430553,4085785217347666,0.9948467 +513,7445892760317758,6891738899430741,4085785217347668,0.99875 +514,7437096667294696,6891738899430741,4085785217347668,0.9990206 +515,7393116202119525,6891738899430741,4085785217347668,0.99968183 +516,7516261504558015,6891738899433148,4085785217347668,0.9897626 +519,7481077132431749,6896136945937655,4085785217347716,0.9995795 +520,7353533783494174,6896136945937655,4085785217347716,0.9994648 +521,7481077132431759,6896136945937655,4085785217347716,0.99963856 +522,7371125969559265,6891738899432703,4085785217347716,0.9967913 +523,7371125969559226,6891738899432703,4085785217347716,0.99738806 +524,7327145504406367,6900534992448969,4085785217347716,0.99938476 +525,7283165039253893,6900534992448969,4085785217347716,0.9994518 +526,7560241969710927,6900534992448969,4085785217347716,0.9994338 +527,7401912295171519,6891738899433217,4085785217347716,0.9873453 +528,7450290806837000,6891738899431149,4085785217347716,0.9998004 +529,7410708388178664,6874146713382634,4085785217347729,0.995751 +530,7401912295156846,6874146713382634,4085785217347729,0.99575114 +531,7401912295156821,6874146713382634,4085785217347729,0.99575114 +532,7401912295156721,6874146713382634,4085785217347729,0.995751 +533,7410708388178684,6874146713382634,4085785217347729,0.995751 +534,7410708388178655,6874146713382634,4085785217347729,0.99575114 +535,7401912295156690,6874146713382634,4085785217347729,0.995751 +538,7322747457867712,6891738899431763,4085785217347738,0.9952213 +539,7401912295170761,6891738899431763,4085785217347738,0.88004035 +540,7300757225317349,6891738899431763,4085785217347738,0.9998659 +542,7296359178777889,6874146713381313,4085785217347745,0.99927026 +543,7252378713625055,6874146713381313,4085785217347745,0.9997185 +544,7190806062425732,6874146713381313,4085785217347745,0.99415624 +545,7494271271986787,6874146713381313,4085785217347745,0.9997845 +546,7379922062584518,6874146713381313,4085785217347745,0.9900367 +547,7331543550920652,6874146713381313,4085785217347745,0.99933016 +548,7327145504409020,6874146713381313,4085785217347745,0.99973184 +549,7322747457891763,6874146713381313,4085785217347745,0.9980823 +550,7353533783492613,6874146713381313,4085785217347745,0.99968266 +551,7327145504409014,6874146713381313,4085785217347745,0.99972695 +552,7555843923185745,6874146713381313,4085785217347745,0.9980671 +553,7481077132431543,6874146713381313,4085785217347745,0.99975294 +554,7283165039253887,6874146713381313,4085785217347745,0.99286085 +555,7327145504408924,6874146713381313,4085785217347745,0.9994692 +556,7212796295007935,6874146713381313,4085785217347745,0.99969935 +557,7327145504406192,6874146713381313,4085785217347745,0.99918467 +558,7463484946370488,6874146713381313,4085785217347745,0.9987349 +559,7397514248645081,6874146713381313,4085785217347745,0.9994137 +560,7274368946212403,6874146713381313,4085785217347745,0.9996296 +561,7371125969563556,6874146713381313,4085785217347745,0.999315 +562,7327145504412206,6874146713381313,4085785217347745,0.99856794 +563,7481077132422699,6874146713381313,4085785217347745,0.9992291 +564,7463484946370383,6874146713381313,4085785217347745,0.998919 +565,7353533783497416,6874146713381313,4085785217347745,0.9997546 +566,7265572853181951,6874146713381313,4085785217347745,0.9979068 +567,7525057597593353,6874146713381313,4085785217347745,0.99964094 +568,7463484946370958,6874146713381313,4085785217347745,0.9988181 +569,7437096667294179,6874146713381313,4085785217347745,0.99967813 +570,7186408015914208,6874146713381313,4085785217347745,0.9992137 +571,7419504481229574,6874146713381313,4085785217347745,0.9994765 +572,7362329876534220,6874146713381313,4085785217347745,0.9993055 +573,7459086899855567,6874146713381313,4085785217347745,0.99966216 +574,7243582620599777,6874146713381313,4085785217347745,0.9997913 +575,7459086899859764,6874146713381313,4085785217347745,0.99868554 +576,7533853690618523,6874146713381313,4085785217347745,0.99975616 +577,7494271271986763,6874146713381313,4085785217347745,0.9940943 +578,7463484946370476,6874146713381313,4085785217347745,0.9986847 +579,7560241969710139,6874146713381313,4085785217347745,0.994166 +580,7428300574238832,6874146713381313,4085785217347745,0.9910228 +581,7265572853185989,6874146713381313,4085785217347745,0.9987109 +582,7388718155600685,6874146713381313,4085785217347745,0.9997732 +583,7401912295159180,6874146713381313,4085785217347745,0.99927956 +584,7349135736968028,6874146713381313,4085785217347745,0.9997472 +585,7516261504563440,6874146713381313,4085785217347745,0.9979443 +586,7296359178777927,6874146713381313,4085785217347745,0.99927026 +587,7463484946371094,6874146713381313,4085785217347745,0.99884063 +588,7494271271986713,6874146713381313,4085785217347745,0.99975663 +589,7560241969710232,6874146713381313,4085785217347745,0.99791485 +590,7190806062434276,6874146713381313,4085785217347745,0.9987469 +591,7344737690463308,6874146713381313,4085785217347745,0.99938834 +592,7287563085745496,6874146713381313,4085785217347745,0.999548 +593,7520659551061719,6874146713381313,4085785217347745,0.9998671 +594,7199602155446145,6874146713381313,4085785217347745,0.9996681 +595,7375524016070820,6874146713381313,4085785217347745,0.9978969 +596,7199602155440810,6874146713381313,4085785217347745,0.99975294 +597,7353533783497538,6874146713381313,4085785217347745,0.99003977 +598,7459086899860108,6874146713381313,4085785217347745,0.99818075 +599,7186408015909608,6874146713381313,4085785217347745,0.9995944 +600,7344737690463209,6874146713381313,4085785217347745,0.9933549 +601,7463484946370490,6874146713381313,4085785217347745,0.99865794 +602,7357931830005114,6874146713381313,4085785217347745,0.9972499 +603,7463484946370485,6874146713381313,4085785217347745,0.9986608 +604,7247980667108697,6874146713381313,4085785217347745,0.9996772 +605,7269970899705066,6874146713381313,4085785217347745,0.9995364 +606,7428300574238408,6874146713381313,4085785217347745,0.9998406 +607,7388718155600673,6874146713381313,4085785217347745,0.999777 +608,7388718155622518,6874146713381313,4085785217347745,0.99938726 +609,7450290806821132,6874146713381313,4085785217347745,0.9995741 +610,7511863458053500,6874146713381313,4085785217347745,0.9996381 +611,7195204108937219,6874146713381313,4085785217347745,0.99791485 +612,7551445876686518,6874146713381313,4085785217347745,0.9972499 +613,7243582620602256,6874146713381313,4085785217347745,0.9995691 +614,7423902527742865,6874146713381313,4085785217347745,0.99959 +615,7498669318483702,6874146713381313,4085785217347745,0.99972755 +616,7401912295164813,6874146713381313,4085785217347745,0.99922633 +617,7472281039392810,6874146713381313,4085785217347745,0.9988103 +618,7494271271986767,6874146713381313,4085785217347745,0.99408686 +619,7265572853181942,6874146713381313,4085785217347745,0.9993105 +620,7419504481209753,6874146713381313,4085785217347745,0.99959606 +621,7305155271833327,6874146713381313,4085785217347745,0.99968433 +622,7366727923042094,6891738899426872,4085785217347752,0.98099077 +623,7467882992891266,6891738899426872,4085785217347752,0.9904553 +624,7415106434695589,6900534992449861,4085785217347753,0.9958715 +625,7371125969559130,6891738899431191,4085785217347753,0.9995415 +626,7384320109091323,6891738899431191,4085785217347753,0.9996389 +627,7463484946386313,6891738899431191,4085785217347753,0.99927944 +628,7485475178942163,6891738899431191,4085785217347753,0.9992467 +629,7397514248645072,6891738899431191,4085785217347753,0.9996656 +630,7419504481208013,6891738899431191,4085785217347753,0.9993968 +631,7428300574265337,6891738899431191,4085785217347753,0.9971814 +632,7353533783475467,6874146713381355,4085785217347753,0.9994361 +633,7331543550908783,6874146713381355,4085785217347753,0.9993992 +634,7401912295159156,6874146713381355,4085785217347753,0.9995721 +635,7375524016071417,6874146713381355,4085785217347753,0.9995721 +636,7406310341676906,6891738899430892,4085785217347780,0.9969131 +637,7401912295163142,6891738899430892,4085785217347780,0.99637836 +638,7331543550908439,6874146713382780,4085785217347785,0.9680378 +639,7393116202141091,6874146713382780,4085785217347785,0.96406454 +640,7168815829857622,6891738899431732,4085785217347791,0.9967656 +641,7182009969390853,6891738899431732,4085785217347791,0.9974136 +642,7573436109244663,6891738899431732,4085785217347791,0.9968731 +643,7507465411517128,6891738899431732,4085785217347791,0.99061185 +644,7428300574265467,6891738899431732,4085785217347791,0.97379446 +645,7182009969390762,6891738899431732,4085785217347791,0.9974136 +646,7182009969390767,6891738899431732,4085785217347791,0.9967656 +647,7445892760317779,6891738899431732,4085785217347791,0.9975216 +648,7459086899853607,6891738899430454,4085785217347792,0.99888045 +649,7287563085769091,6891738899430454,4085785217347792,0.99889296 +650,7357931830015291,6896136945937136,4085785217347802,0.9990569 +651,7353533783500361,6896136945937136,4085785217347802,0.9990569 +652,7340339643952322,6896136945937136,4085785217347802,0.9998635 +653,7234786527587765,6896136945937136,4085785217347802,0.99505866 +654,7393116202141112,6896136945937136,4085785217347802,0.99508804 +655,7472281039392886,6900534992448981,4085785217347803,0.9954137 +656,7353533783487752,6900534992448981,4085785217347803,0.9947725 +657,7375524016070748,6900534992448981,4085785217347803,0.97532666 +658,7261174806677999,6900534992448981,4085785217347803,0.9955818 +659,7278766992732975,6900534992448981,4085785217347803,0.99600816 +660,7511863458053072,6900534992448981,4085785217347803,0.9789627 +661,7375524016070674,6900534992448981,4085785217347803,0.9926116 +662,7401912295166406,6900534992448981,4085785217347803,0.995666 +663,7459086899859725,6900534992448981,4085785217347803,0.994572 +664,7410708388176282,6900534992448981,4085785217347803,0.9947436 +665,7401912295165055,6900534992448981,4085785217347803,0.99387264 +666,7520659551076142,6900534992448981,4085785217347803,0.99350005 +667,7278766992720468,6900534992448981,4085785217347803,0.9942061 +668,7375524016066641,6900534992448981,4085785217347803,0.9943778 +669,7507465411539468,6900534992448981,4085785217347803,0.99502665 +670,7261174806681819,6900534992448981,4085785217347803,0.9945537 +671,7564640016220236,6900534992448981,4085785217347803,0.995027 +672,7437096667294140,6900534992448981,4085785217347803,0.99456453 +673,7401912295170514,6900534992448981,4085785217347803,0.99558145 +674,7269970899702695,6900534992448981,4085785217347803,0.97819704 +675,7221592388027930,6900534992448981,4085785217347803,0.99565256 +676,7463484946370499,6900534992448981,4085785217347803,0.99571335 +677,7261174806672684,6900534992448981,4085785217347803,0.9936021 +678,7384320109087181,6900534992448981,4085785217347803,0.99622923 +679,7371125969549184,6900534992448981,4085785217347803,0.99387276 +680,7516261504546571,6900534992448981,4085785217347803,0.98929113 +681,7384320109096444,6900534992448981,4085785217347803,0.9956657 +682,7375524016066607,6900534992448981,4085785217347803,0.99421644 +683,7327145504408937,6900534992448981,4085785217347803,0.99448484 +684,7423902527733267,6900534992448981,4085785217347803,0.9955329 +685,7503067365024154,6891738899431738,4085785217347803,0.99960953 +686,7371125969557333,6891738899431738,4085785217347803,0.99965656 +687,7375524016073709,6891738899431738,4085785217347803,0.99912566 +688,7529455644099148,6891738899431738,4085785217347803,0.9990532 +689,7269970899704492,6891738899431738,4085785217347803,0.9995461 +690,7287563085749353,6891738899431738,4085785217347803,0.9992888 +691,7296359178777830,6891738899431738,4085785217347803,0.99923146 +692,7529455644096593,6891738899431738,4085785217347803,0.9995759 +693,7366727923050323,6891738899431738,4085785217347803,0.99948263 +694,7256776760162705,6891738899431738,4085785217347803,0.9996488 +695,7507465411539527,6891738899431738,4085785217347803,0.9993793 +696,7388718155600585,6891738899431738,4085785217347803,0.99931824 +697,7177611922878957,6900534992449937,4085785217347807,0.9967775 +698,7265572853181962,6900534992449937,4085785217347807,0.9974312 +700,7454688853347469,6874146713381638,4085785217347814,0.99253076 +701,7507465411524449,6874146713381638,4085785217347814,0.98478436 +702,7507465411524446,6874146713381638,4085785217347814,0.9839491 +703,7353533783475537,6891738899425615,4085785217347814,0.9960383 +704,7190806062434216,6891738899425615,4085785217347814,0.99674606 +705,7278766992743951,6891738899425615,4085785217347814,0.9976447 +706,7375524016052576,6891738899425615,4085785217347814,0.9983694 +707,7305155271817362,6891738899425615,4085785217347814,0.9966612 +708,7375524016052556,6891738899425615,4085785217347814,0.99821424 +709,7520659551085634,6891738899425615,4085785217347814,0.995767 +710,7463484946386338,6891738899425615,4085785217347814,0.99801385 +711,7234786527563212,6891738899425615,4085785217347814,0.99668545 +712,7520659551085616,6891738899425615,4085785217347814,0.9961515 +713,7362329876517135,6891738899425615,4085785217347814,0.99570674 +714,7401912295148547,6891738899425615,4085785217347814,0.99474144 +715,7190806062409354,6891738899425615,4085785217347814,0.99586356 +716,7498669318483591,6891738899425615,4085785217347814,0.99706787 +717,7309553318321938,6891738899425615,4085785217347814,0.9975726 +718,7375524016055530,6891738899431634,4085785217347822,0.9997087 +719,7331543550920337,6891738899431634,4085785217347822,0.9995166 +720,7379922062581728,6891738899431634,4085785217347822,0.99902177 +721,7204000201969341,6891738899431634,4085785217347822,0.9995578 +722,7182009969406487,6891738899431634,4085785217347822,0.99982363 +723,7516261504568405,6891738899431634,4085785217347822,0.9995154 +724,7498669318509730,6891738899431634,4085785217347822,0.9998215 +725,7371125969551575,6891738899431634,4085785217347822,0.99990356 +726,7318349411365227,6891738899431634,4085785217347822,0.9999021 +727,7362329876532135,6891738899431634,4085785217347822,0.9998988 +728,7256776760162502,6891738899431634,4085785217347822,0.9987425 +729,7476679085910791,6891738899431634,4085785217347822,0.99988854 +730,7529455644099298,6891738899431712,4085785217347822,0.99776936 +731,7503067365024255,6891738899431712,4085785217347822,0.996887 +732,7520659551074188,6891738899431712,4085785217347822,0.9818295 +733,7503067365024185,6891738899431712,4085785217347822,0.9968861 +734,7489873225479737,6874146713381327,4085785217347822,0.9942983 +735,7459086899853535,6874146713381327,4085785217347822,0.99438924 +736,7459086899853540,6874146713381327,4085785217347822,0.9943982 +737,7393116202113734,6874146713381327,4085785217347822,0.9962986 +743,7274368946214346,6891738899425472,4090183263858182,0.90031844 +744,7401912295150956,6891738899431639,4090183263858208,0.9985461 +745,7397514248645164,6891738899431639,4090183263858208,0.9989334 +746,7459086899855444,6891738899431639,4090183263858208,0.99932456 +747,7362329876530865,6891738899431639,4090183263858208,0.99967194 +748,7503067365023591,6891738899431639,4090183263858208,0.99913603 +749,7327145504408994,6891738899431639,4090183263858208,0.9998387 +750,7349135736985112,6891738899431639,4090183263858208,0.99954045 +751,7318349411376941,6891738899431639,4090183263858208,0.9998599 +752,7379922062578956,6891738899431639,4090183263858208,0.9989334 +753,7234786527576269,6891738899431639,4090183263858208,0.9997588 +754,7397514248655911,6891738899431639,4090183263858208,0.9992285 +755,7406310341679802,6891738899431639,4090183263858208,0.99987483 +756,7234786527587791,6891738899431639,4090183263858208,0.99880564 +757,7547047830153242,6891738899431639,4090183263858208,0.9998041 +758,7204000201963871,6891738899431639,4090183263858208,0.99986804 +759,7560241969711898,6891738899431639,4090183263858208,0.99864584 +760,7498669318502663,6891738899431639,4090183263858208,0.99619836 +761,7538251737147873,6891738899431639,4090183263858208,0.99816114 +762,7564640016225732,6891738899431639,4090183263858208,0.9985726 +763,7481077132422746,6891738899431639,4090183263858208,0.9991147 +764,7406310341676806,6891738899431639,4090183263858208,0.9997428 +765,7269970899703823,6891738899431639,4090183263858208,0.9998547 +766,7212796294988395,6891738899431639,4090183263858208,0.9998963 +767,7234786527587835,6891738899431639,4090183263858208,0.9988475 +768,7472281039396748,6891738899431639,4090183263858208,0.9996276 +769,7331543550908810,6891738899431639,4090183263858208,0.9998417 +770,7529455644096590,6891738899431639,4090183263858208,0.9990526 +771,7423902527730996,6891738899431639,4090183263858208,0.99985504 +772,7573436109244069,6891738899431639,4090183263858208,0.9990526 +773,7397514248645170,6891738899431639,4090183263858208,0.9989334 +774,7366727923050317,6891738899431639,4090183263858208,0.9991253 +775,7362329876513673,6891738899431639,4090183263858208,0.99857664 +776,7397514248650721,6891738899431639,4090183263858208,0.9998005 +777,7375524016081203,6891738899431639,4090183263858208,0.9983051 +778,7384320109096427,6891738899431639,4090183263858208,0.9997129 +779,7375524016071373,6891738899431639,4090183263858208,0.9993268 +780,7406310341679867,6891738899431639,4090183263858208,0.9998734 +781,7538251737147907,6891738899431639,4090183263858208,0.99896145 +782,7256776760137998,6891738899431639,4090183263858208,0.99784374 +783,7256776760137948,6891738899431639,4090183263858208,0.9991167 +784,7529455644096543,6891738899431639,4090183263858208,0.99859494 +785,7357931830010669,6891738899431639,4090183263858208,0.9998149 +786,7357931830012236,6891738899431639,4090183263858208,0.9997894 +787,7357931830004909,6891738899431639,4090183263858208,0.99857664 +788,7375524016081132,6891738899431639,4090183263858208,0.9985933 +789,7186408015914373,6891738899431639,4090183263858208,0.99973994 +790,7401912295159175,6891738899431639,4090183263858208,0.99989045 +791,7393116202119612,6891738899431639,4090183263858208,0.9998548 +792,7375524016070816,6891738899431639,4090183263858208,0.9994198 +793,7182009969404942,6891738899431639,4090183263858208,0.9997758 +794,7384320109091436,6891738899431639,4090183263858208,0.9989334 +795,7393116202117221,6891738899431639,4090183263858208,0.99914944 +796,7397514248655896,6891738899431639,4090183263858208,0.99960726 +797,7375524016073789,6891738899431639,4090183263858208,0.9991027 +798,7234786527574933,6891738899431639,4090183263858208,0.9985227 +799,7375524016071407,6891738899431639,4090183263858208,0.99985456 +800,7366727923044254,6891738899431639,4090183263858208,0.9980453 +801,7445892760315015,6891738899431639,4090183263858208,0.99834466 +802,7406310341680400,6891738899431639,4090183263858208,0.99984527 +803,7168815829844139,6891738899431639,4090183263858208,0.99964046 +804,7278766992728614,6891738899431639,4090183263858208,0.999363 +805,7547047830177157,6891738899431639,4090183263858208,0.99859613 +806,7516261504555932,6900534992448855,4090183263858267,0.9956151 +807,7494271271986650,6900534992448855,4090183263858267,0.99785006 +808,7498669318494521,6900534992448855,4090183263858267,0.9953387 +809,7349135736987548,6900534992448957,4090183263858267,0.99868196 +810,7393116202134973,6874146713381741,4090183263858279,0.9989755 +813,7393116202134927,6891738899431717,4090183263858279,0.99781966 +814,7419504481229841,6874146713382681,4090183263858279,0.99722725 +816,7287563085771947,6891738899432128,4090183263858299,0.9883128 +817,7287563085745509,6891738899431771,4090183263858543,0.9938273 +818,7349135736965501,6891738899431492,4090183263858543,0.94982874 +819,7349135736965577,6891738899431492,4090183263858543,0.9498285 +820,7349135736965454,6891738899431492,4090183263858543,0.94982743 +821,7322747457890515,6891738899431492,4090183263858543,0.9500488 +822,7401912295166319,6891738899431492,4090183263858543,0.99570566 +823,7261174806672633,6891738899431492,4090183263858543,0.95073795 +824,7349135736965448,6891738899431492,4090183263858543,0.94982743 +825,7393116202139118,6891738899431492,4090183263858543,0.9969903 +826,7349135736985070,6891738899431492,4090183263858543,0.99201804 +827,7371125969555679,6891738899431492,4090183263858543,0.99503064 +828,7349135736965508,6891738899431492,4090183263858543,0.94982874 +829,7410708388194102,6891738899431492,4090183263858543,0.9959209 +830,7322747457890565,6891738899431492,4090183263858543,0.9498313 +831,7349135736965591,6891738899431492,4090183263858543,0.9499222 +832,7419504481214746,6891738899431492,4090183263858543,0.9977463 +833,7560241969699635,6891738899431492,4090183263858543,0.975662 +834,7459086899850840,6891738899431492,4090183263858543,0.9956246 +835,7393116202126651,6891738899431492,4090183263858543,0.95923096 +836,7401912295163131,6891738899431492,4090183263858543,0.99717134 +837,7349135736965473,6891738899431492,4090183263858543,0.9499102 +838,7349135736965549,6891738899431492,4090183263858543,0.94994843 +839,7322747457890487,6891738899431492,4090183263858543,0.9498587 +840,7401912295171089,6891738899431492,4090183263858543,0.99550503 +841,7393116202141623,6891738899431492,4090183263858543,0.99722314 +842,7529455644107170,6891738899431256,4090183263858547,0.99692506 +843,7247980667136065,6891738899431256,4090183263858547,0.9966677 +844,7538251737120417,6891738899431256,4090183263858547,0.9970771 +845,7247980667136062,6891738899431256,4090183263858547,0.9966678 +846,7511863458053674,6891738899431256,4090183263858547,0.9970772 +847,7419504481222345,6891738899431256,4090183263858547,0.9992107 +848,7511863458053687,6891738899431256,4090183263858547,0.9970772 +849,7529455644107182,6891738899431256,4090183263858547,0.99692506 +850,7247980667136057,6891738899431256,4090183263858547,0.9966677 +851,7529455644107175,6891738899431256,4090183263858547,0.9969252 +852,7182009969405492,6891738899431256,4090183263858547,0.9990509 +853,7450290806836835,6891738899427041,4090183263858567,0.911374 +855,7274368946202260,6891738899427041,4090183263858567,0.8624367 +856,7498669318483729,6891738899427041,4090183263858567,0.8409075 +857,7327145504409006,6891738899427041,4090183263858567,0.873714 +859,7230388481069973,6891738899431679,4090183263858567,0.9991301 +860,7503067365011972,6891738899431679,4090183263858567,0.9992347 +862,7274368946212499,6891738899431679,4090183263858567,0.90539 +863,7327145504409095,6891738899431679,4090183263858567,0.99913555 +864,7560241969717552,6891738899430818,4090183263858567,0.99969876 +865,7419504481222877,6896136945937024,4090183263858572,0.9682711 +868,7296359178781896,6874146713381684,4090183263858578,0.90113986 +874,7296359178781973,6874146713381684,4090183263858578,0.9010842 +875,7393116202132334,6874146713381684,4090183263858578,0.81961995 +877,7300757225298715,6874146713381684,4090183263858578,0.88944024 +878,7168815829857595,6891738899425607,4090183263858578,0.9886022 +879,7287563085745452,6891738899425607,4090183263858578,0.9878285 +880,7564640016232846,6891738899425607,4090183263858578,0.9902644 +881,7498669318495733,6891738899431844,4090183263858583,0.99343723 +882,7498669318495740,6891738899431844,4090183263858583,0.99343747 +883,7498669318495755,6891738899431844,4090183263858583,0.99343747 +884,7507465411517106,6891738899431844,4090183263858583,0.99343747 +885,7507465411517101,6891738899431844,4090183263858583,0.99343723 +886,7507465411517098,6891738899431844,4090183263858583,0.99343723 +887,7498669318495726,6891738899431844,4090183263858583,0.99343723 +888,7498669318495713,6891738899431844,4090183263858583,0.99343747 +889,7498669318495746,6891738899431844,4090183263858583,0.99343723 +890,7498669318495722,6891738899431844,4090183263858583,0.99343747 +891,7507465411517096,6891738899431844,4090183263858583,0.99343723 +892,7498669318495748,6891738899431844,4090183263858583,0.99343747 +893,7318349411376983,6882942806404175,4090183263858592,0.9923793 +894,7230388481064681,6882942806404175,4090183263858592,0.99817836 +895,7291961132261638,6882942806404175,4090183263858592,0.9963103 +896,7529455644110579,6882942806404175,4090183263858592,0.99822265 +897,7379922062576760,6882942806404175,4090183263858592,0.96268445 +898,7503067365006088,6882942806404175,4090183263858592,0.97991884 +899,7247980667108722,6882942806404175,4090183263858592,0.9994148 +900,7186408015914356,6882942806404175,4090183263858592,0.9944147 +901,7529455644099478,6882942806404175,4090183263858592,0.9830912 +902,7300757225309610,6882942806404175,4090183263858592,0.9954678 +903,7547047830177277,6882942806404175,4090183263858592,0.9976555 +904,7362329876534312,6882942806404175,4090183263858592,0.82263166 +905,7371125969554970,6882942806404175,4090183263858592,0.9995529 +906,7239184574099299,6882942806404175,4090183263858592,0.9971738 +907,7243582620606592,6882942806404175,4090183263858592,0.9995338 +908,7410708388176270,6882942806404175,4090183263858592,0.9993749 +909,7393116202126634,6882942806404175,4090183263858592,0.9950789 +910,7256776760138027,6882942806404175,4090183263858592,0.9925269 +911,7371125969545116,6882942806404175,4090183263858592,0.9908982 +912,7375524016070848,6882942806404175,4090183263858592,0.99908686 +913,7353533783500472,6882942806404175,4090183263858592,0.96907246 +914,7401912295159139,6882942806404175,4090183263858592,0.992496 +915,7507465411539474,6882942806404175,4090183263858592,0.9979572 +916,7384320109100664,6882942806404175,4090183263858592,0.97055286 +917,7190806062434196,6882942806404175,4090183263858592,0.9986272 +918,7406310341661112,6882942806404175,4090183263858592,0.99878293 +919,7401912295166426,6882942806404175,4090183263858592,0.9989255 +920,7454688853339399,6882942806404175,4090183263858592,0.9914232 +921,7542649783634671,6882942806404175,4090183263858592,0.99594045 +922,7406310341682421,6882942806404175,4090183263858592,0.9964694 +923,7529455644113503,6882942806404175,4090183263858592,0.9877806 +925,7195204108937377,6882942806404175,4090183263858592,0.97557133 +926,7547047830177271,6882942806404175,4090183263858592,0.9989286 +927,7481077132432406,6882942806404175,4090183263858592,0.95871407 +928,7265572853193067,6882942806404175,4090183263858592,0.99922264 +929,7511863458044390,6882942806404175,4090183263858592,0.9944149 +930,7432698620769785,6882942806404175,4090183263858592,0.99042726 +931,7204000201956740,6882942806404175,4090183263858592,0.99588335 +932,7454688853339360,6882942806404175,4090183263858592,0.9853022 +933,7252378713636422,6882942806404175,4090183263858592,0.9633218 +934,7573436109243981,6882942806404175,4090183263858592,0.9968742 +935,7410708388188401,6882942806404175,4090183263858592,0.99686384 +936,7300757225306791,6882942806404175,4090183263858592,0.985783 +937,7256776760162494,6882942806404175,4090183263858592,0.9992053 +938,7261174806681922,6882942806404175,4090183263858592,0.9990362 +939,7309553318338038,6882942806404175,4090183263858592,0.9286939 +940,7247980667108795,6882942806404175,4090183263858592,0.99952245 +941,7247980667108827,6882942806404175,4090183263858592,0.9994142 +942,7199602155446116,6882942806404175,4090183263858592,0.9949549 +943,7542649783634663,6882942806404175,4090183263858592,0.9960504 +944,7410708388176292,6882942806404175,4090183263858592,0.999508 +945,7393116202132453,6882942806404175,4090183263858592,0.99882096 +946,7243582620606581,6882942806404175,4090183263858592,0.99691355 +947,7309553318332684,6882942806404175,4090183263858592,0.9990388 +948,7406310341682490,6882942806404175,4090183263858592,0.995874 +949,7300757225314449,6882942806404175,4090183263858592,0.9982327 +950,7256776760162556,6882942806404175,4090183263858592,0.9957295 +951,7182009969390807,6882942806404175,4090183263858592,0.9964928 +952,7234786527574900,6882942806404175,4090183263858592,0.9964445 +953,7243582620602190,6882942806404175,4090183263858592,0.99946433 +954,7415106434698437,6882942806404175,4090183263858592,0.9990633 +955,7322747457873570,6882942806404175,4090183263858592,0.9861601 +957,7551445876687220,6882942806404175,4090183263858592,0.9964557 +958,7507465411539472,6882942806404175,4090183263858592,0.99843246 +959,7375524016070796,6882942806404175,4090183263858592,0.99673694 +960,7327145504412164,6882942806404175,4090183263858592,0.9963018 +961,7388718155600289,6882942806404175,4090183263858592,0.9984869 +962,7406310341679893,6882942806404175,4090183263858592,0.9935881 +963,7498669318495630,6882942806404175,4090183263858592,0.96844876 +964,7507465411539469,6882942806404175,4090183263858592,0.9972933 +965,7353533783499816,6882942806404175,4090183263858592,0.9467096 +966,7182009969390842,6882942806404175,4090183263858592,0.9980147 +967,7243582620606710,6882942806404175,4090183263858592,0.9989104 +968,7247980667108746,6882942806404175,4090183263858592,0.99958354 +969,7459086899850374,6882942806404175,4090183263858592,0.98473006 +970,7419504481208316,6882942806404175,4090183263858592,0.9810198 +971,7410708388194276,6882942806404175,4090183263858592,0.9963761 +972,7186408015914211,6882942806404175,4090183263858592,0.9913694 +973,7573436109244134,6882942806404175,4090183263858592,0.99863845 +974,7393116202113934,6882942806404175,4090183263858592,0.99878913 +975,7327145504412218,6882942806404175,4090183263858592,0.9972817 +976,7349135736989760,6882942806404175,4090183263858592,0.99144894 +977,7261174806653920,6882942806404175,4090183263858592,0.9969887 +978,7564640016220198,6882942806404175,4090183263858592,0.99399614 +979,7533853690611236,6882942806404175,4090183263858592,0.99239665 +980,7511863458044227,6882942806404175,4090183263858592,0.9958973 +981,7379922062581691,6882942806404175,4090183263858592,0.999212 +982,7199602155446171,6882942806404175,4090183263858592,0.99770606 +983,7173213876371387,6882942806404175,4090183263858592,0.9969591 +984,7309553318324274,6882942806404175,4090183263858592,0.99776185 +985,7419504481207148,6882942806404175,4090183263858592,0.99340713 +986,7397514248655832,6882942806404175,4090183263858592,0.9992865 +987,7379922062581760,6882942806404175,4090183263858592,0.9967283 +988,7397514248655892,6882942806404175,4090183263858592,0.9992238 +989,7410708388178674,6882942806404175,4090183263858592,0.9989285 +990,7564640016220232,6882942806404175,4090183263858592,0.9980063 +991,7366727923050374,6882942806404175,4090183263858592,0.99740523 +992,7234786527574924,6882942806404175,4090183263858592,0.99950385 +993,7445892760297542,6882942806404175,4090183263858592,0.99594057 +994,7397514248655790,6882942806404175,4090183263858592,0.9987753 +995,7371125969554977,6882942806404175,4090183263858592,0.99944216 +996,7542649783634631,6882942806404175,4090183263858592,0.99696594 +997,7256776760137865,6882942806404175,4090183263858592,0.9989446 +998,7261174806678037,6882942806404175,4090183263858592,0.99898976 +999,7564640016220221,6882942806404175,4090183263858592,0.9987684 +1000,7283165039250341,6882942806404175,4090183263858592,0.982864 +1001,7511863458044352,6882942806404175,4090183263858592,0.99319273 +1002,7410708388188376,6882942806404175,4090183263858592,0.9968702 +1003,7503067365025746,6882942806404175,4090183263858592,0.9935616 +1005,7261174806672630,6882942806404175,4090183263858592,0.9953241 +1006,7459086899861486,6882942806404175,4090183263858592,0.9980198 +1007,7261174806678086,6882942806404175,4090183263858592,0.9990088 +1008,7318349411369418,6882942806404175,4090183263858592,0.99209595 +1009,7182009969390802,6882942806404175,4090183263858592,0.99737656 +1010,7287563085773245,6882942806404175,4090183263858592,0.9917093 +1011,7507465411539431,6882942806404175,4090183263858592,0.9966798 +1012,7459086899855542,6882942806404175,4090183263858592,0.99082935 +1013,7357931830015411,6882942806404175,4090183263858592,0.9833022 +1014,7247980667108806,6882942806404175,4090183263858592,0.9994624 +1015,7410708388176228,6882942806404175,4090183263858592,0.99946934 +1016,7371125969557128,6882942806404175,4090183263858592,0.99815565 +1017,7393116202118739,6882942806404175,4090183263858592,0.99944717 +1018,7520659551067716,6882942806404175,4090183263858592,0.9957775 +1019,7190806062412083,6882942806404175,4090183263858592,0.9789499 +1020,7406310341661060,6882942806404175,4090183263858592,0.9995524 +1021,7393116202117274,6882942806404175,4090183263858592,0.9833241 +1022,7256776760137981,6882942806404175,4090183263858592,0.99643916 +1023,7173213876371340,6882942806404175,4090183263858592,0.99743253 +1024,7525057597589577,6882942806404175,4090183263858592,0.9960718 +1025,7265572853181963,6882942806404175,4090183263858592,0.9912134 +1026,7401912295170794,6882942806404175,4090183263858592,0.9910678 +1027,7573436109242809,6882942806404175,4090183263858592,0.99144894 +1028,7230388481073953,6882942806404175,4090183263858592,0.9960775 +1029,7406310341682456,6882942806404175,4090183263858592,0.99598783 +1030,7256776760140812,6882942806404175,4090183263858592,0.99602145 +1031,7393116202135026,6882942806404175,4090183263858592,0.9914908 +1032,7529455644096558,6882942806404175,4090183263858592,0.99765223 +1033,7278766992739022,6882942806404175,4090183263858592,0.993669 +1034,7529455644096555,6882942806404175,4090183263858592,0.99863607 +1035,7516261504545915,6882942806404175,4090183263858592,0.99395627 +1036,7393116202132318,6882942806404175,4090183263858592,0.99933076 +1037,7287563085747263,6882942806404175,4090183263858592,0.9989298 +1038,7327145504412172,6882942806404175,4090183263858592,0.9691131 +1039,7190806062433621,6882942806404175,4090183263858592,0.99779344 +1040,7410708388188349,6882942806404175,4090183263858592,0.9973283 +1041,7401912295166476,6882942806404175,4090183263858592,0.99926716 +1042,7300757225307964,6882942806404175,4090183263858592,0.997563 +1043,7190806062433580,6882942806404175,4090183263858592,0.99826163 +1044,7190806062434239,6882942806404175,4090183263858592,0.9986326 +1046,7318349411369465,6882942806404175,4090183263858592,0.98324955 +1047,7410708388188319,6882942806404175,4090183263858592,0.99796706 +1048,7366727923050294,6882942806404175,4090183263858592,0.9994998 +1049,7322747457890587,6882942806404175,4090183263858592,0.9958405 +1050,7256776760137891,6882942806404175,4090183263858592,0.99950325 +1051,7256776760137926,6882942806404175,4090183263858592,0.99957675 +1052,7529455644096599,6882942806404175,4090183263858592,0.9933826 +1053,7177611922880022,6882942806404175,4090183263858592,0.9976198 +1054,7239184574099340,6882942806404175,4090183263858592,0.9993494 +1055,7459086899850353,6882942806404175,4090183263858592,0.9938445 +1056,7353533783478145,6882942806404175,4090183263858592,0.97209203 +1057,7265572853193101,6882942806404175,4090183263858592,0.9987765 +1058,7384320109110841,6882942806404175,4090183263858592,0.9992895 +1060,7450290806825966,6882942806404175,4090183263858592,0.9980178 +1061,7247980667108832,6882942806404175,4090183263858592,0.99915016 +1062,7366727923050264,6882942806404175,4090183263858592,0.99928707 +1063,7353533783495280,6882942806404175,4090183263858592,0.99379057 +1064,7401912295156838,6882942806404175,4090183263858592,0.99573743 +1065,7511863458045291,6882942806404175,4090183263858592,0.9952638 +1066,7507465411520379,6882942806404175,4090183263858592,0.96479523 +1067,7230388481074508,6882942806404175,4090183263858592,0.998061 +1068,7547047830154082,6882942806404175,4090183263858592,0.9959561 +1069,7234786527576327,6882942806404175,4090183263858592,0.9906365 +1071,7195204108948136,6882942806404175,4090183263858592,0.9944623 +1072,7401912295170806,6882942806404175,4090183263858592,0.99311936 +1073,7177611922878898,6882942806404175,4090183263858592,0.9821891 +1074,7243582620606625,6882942806404175,4090183263858592,0.99947387 +1076,7397514248655850,6882942806404175,4090183263858592,0.99877673 +1077,7564640016220311,6882942806404175,4090183263858592,0.9963761 +1078,7393116202126663,6882942806404175,4090183263858592,0.99952626 +1079,7401912295164986,6882942806404175,4090183263858592,0.9917412 +1080,7463484946359859,6882942806404175,4090183263858592,0.99148375 +1081,7225990434559192,6882942806404175,4090183263858592,0.9592846 +1082,7265572853193072,6882942806404175,4090183263858592,0.9987753 +1083,7287563085745500,6882942806404175,4090183263858592,0.97117907 +1084,7239184574099413,6882942806404175,4090183263858592,0.9989312 +1085,7388718155620425,6882942806404175,4090183263858592,0.9994943 +1086,7287563085774283,6882942806404175,4090183263858592,0.99364907 +1087,7529455644110591,6882942806404175,4090183263858592,0.9983688 +1088,7507465411539470,6882942806404175,4090183263858592,0.99735874 +1089,7247980667108801,6882942806404175,4090183263858592,0.99824417 +1090,7278766992742757,6882942806404175,4090183263858592,0.9927556 +1091,7353533783495285,6882942806404175,4090183263858592,0.9870907 +1092,7186408015907331,6882942806404175,4090183263858592,0.9982407 +1093,7547047830154089,6882942806404175,4090183263858592,0.9951566 +1095,7243582620606657,6882942806404175,4090183263858592,0.9995043 +1096,7503067365010510,6882942806404175,4090183263858592,0.99313897 +1097,7384320109110872,6882942806404175,4090183263858592,0.99914134 +1098,7190806062434244,6882942806404175,4090183263858592,0.9967608 +1099,7278766992720777,6882942806404175,4090183263858592,0.9949527 +1101,7199602155446454,6882942806404175,4090183263858592,0.990341 +1102,7379922062581641,6882942806404175,4090183263858592,0.9990281 +1103,7349135736989784,6882942806404175,4090183263858592,0.9937723 +1104,7331543550920369,6882942806404175,4090183263858592,0.95537186 +1105,7379922062576768,6882942806404175,4090183263858592,0.96268445 +1106,7256776760138037,6882942806404175,4090183263858592,0.9991492 +1107,7410708388194297,6882942806404175,4090183263858592,0.99771297 +1108,7503067365025704,6882942806404175,4090183263858592,0.994772 +1109,7410708388194285,6882942806404175,4090183263858592,0.99690104 +1110,7353533783478118,6882942806404175,4090183263858592,0.94185513 +1111,7190806062433626,6882942806404175,4090183263858592,0.90341574 +1112,7239184574099278,6882942806404175,4090183263858592,0.99928147 +1113,7247980667108797,6882942806404175,4090183263858592,0.99892443 +1114,7551445876687218,6882942806404175,4090183263858592,0.99408215 +1115,7463484946386176,6882942806404175,4090183263858592,0.9976261 +1116,7318349411365234,6882942806404175,4090183263858592,0.9979602 +1117,7547047830153282,6882942806404175,4090183263858592,0.97778314 +1118,7256776760137901,6882942806404175,4090183263858592,0.99958307 +1119,7252378713632889,6882942806404175,4090183263858592,0.9995241 +1120,7327145504412212,6882942806404175,4090183263858592,0.9946682 +1121,7393116202134993,6882942806404175,4090183263858592,0.9914909 +1122,7243582620606586,6882942806404175,4090183263858592,0.99587375 +1124,7243582620606595,6882942806404175,4090183263858592,0.99644595 +1125,7261174806658434,6882942806404175,4090183263858592,0.9987245 +1126,7410708388188384,6882942806404175,4090183263858592,0.9964444 +1127,7410708388188377,6882942806404175,4090183263858592,0.99797016 +1128,7393116202118723,6882942806404175,4090183263858592,0.9991912 +1129,7261174806681940,6882942806404175,4090183263858592,0.99935585 +1130,7472281039417500,6882942806404175,4090183263858592,0.81857145 +1131,7397514248655877,6882942806404175,4090183263858592,0.9990362 +1132,7195204108937237,6882942806404175,4090183263858592,0.9897508 +1133,7393116202135007,6882942806404175,4090183263858592,0.989507 +1134,7322747457890547,6882942806404175,4090183263858592,0.99534047 +1135,7397514248655923,6882942806404175,4090183263858592,0.99922264 +1136,7274368946215848,6882942806404175,4090183263858592,0.998626 +1137,7261174806678018,6882942806404175,4090183263858592,0.9988005 +1138,7511863458053088,6882942806404175,4090183263858592,0.9870812 +1139,7274368946215816,6882942806404175,4090183263858592,0.9987684 +1140,7247980667108790,6882942806404175,4090183263858592,0.99892443 +1141,7406310341661106,6882942806404175,4090183263858592,0.99878293 +1142,7278766992728617,6882942806404175,4090183263858592,0.99819225 +1143,7177611922880480,6882942806404175,4090183263858592,0.99412054 +1144,7261174806678022,6882942806404175,4090183263858592,0.99859625 +1145,7366727923050287,6882942806404175,4090183263858592,0.99928623 +1146,7415106434708455,6882942806404175,4090183263858592,0.9850898 +1147,7283165039231452,6882942806404175,4090183263858592,0.9951761 +1148,7406310341661100,6882942806404175,4090183263858592,0.99867094 +1149,7182009969390832,6882942806404175,4090183263858592,0.99649954 +1150,7261174806681914,6882942806404175,4090183263858592,0.99840754 +1151,7230388481069077,6882942806404175,4090183263858592,0.9992962 +1152,7393116202127071,6882942806404175,4090183263858592,0.9968732 +1153,7388718155624502,6882942806404175,4090183263858592,0.9965005 +1154,7560241969700020,6882942806404175,4090183263858592,0.9937133 +1155,7234786527576316,6882942806404175,4090183263858592,0.9793594 +1156,7269970899690681,6882942806404175,4090183263858592,0.9937627 +1157,7388718155600728,6882942806404175,4090183263858592,0.998102 +1158,7481077132422596,6882942806404175,4090183263858592,0.98301333 +1159,7247980667127319,6882942806404175,4090183263858592,0.97187763 +1161,7195204108947648,6882942806404175,4090183263858592,0.9985274 +1162,7168815829857596,6882942806404175,4090183263858592,0.9984767 +1165,7401912295148660,6882942806404175,4090183263858592,0.99510694 +1167,7256776760138046,6882942806404175,4090183263858592,0.9995604 +1168,7388718155625411,6882942806404175,4090183263858592,0.99893075 +1169,7393116202126587,6882942806404175,4090183263858592,0.9961804 +1170,7234786527577293,6882942806404175,4090183263858592,0.99384177 +1171,7349135736965449,6882942806404175,4090183263858592,0.9950695 +1172,7212796294989845,6882942806404175,4090183263858592,0.9985305 +1173,7472281039417475,6882942806404175,4090183263858592,0.8180098 +1174,7397514248655901,6882942806404175,4090183263858592,0.99928844 +1175,7208398248478502,6882942806404175,4090183263858592,0.9779739 +1176,7230388481069085,6882942806404175,4090183263858592,0.9991887 +1177,7322747457890604,6882942806404175,4090183263858592,0.9947465 +1178,7564640016220250,6882942806404175,4090183263858592,0.9988004 +1179,7419504481221956,6882942806404175,4090183263858592,0.99795735 +1180,7529455644096562,6882942806404175,4090183263858592,0.9976555 +1181,7393116202132433,6882942806404175,4090183263858592,0.99582064 +1182,7247980667108711,6882942806404175,4090183263858592,0.99928445 +1183,7384320109091382,6882942806404175,4090183263858592,0.9977671 +1184,7234786527574910,6882942806404175,4090183263858592,0.9993673 +1185,7186408015893907,6882942806404175,4090183263858592,0.9795284 +1186,7243582620598759,6882942806404175,4090183263858592,0.99797016 +1187,7393116202126641,6882942806404175,4090183263858592,0.9990056 +1188,7243582620606688,6882942806404175,4090183263858592,0.99944216 +1189,7384320109095458,6882942806404175,4090183263858592,0.996837 +1190,7243582620606549,6882942806404175,4090183263858592,0.9991436 +1191,7366727923050300,6882942806404175,4090183263858592,0.9994135 +1192,7384320109095276,6882942806404175,4090183263858592,0.997607 +1193,7230388481069838,6882942806404175,4090183263858592,0.9990434 +1194,7186408015909602,6882942806404175,4090183263858592,0.9808435 +1195,7560241969710848,6882942806404175,4090183263858592,0.99726725 +1197,7278766992743770,6882942806404175,4090183263858592,0.80674964 +1198,7261174806681959,6882942806404175,4090183263858592,0.9984119 +1199,7256776760137860,6882942806404175,4090183263858592,0.99865556 +1200,7459086899855609,6882942806404175,4090183263858592,0.99717253 +1201,7313951364848931,6882942806404175,4090183263858592,0.99707866 +1202,7182009969390779,6882942806404175,4090183263858592,0.99767464 +1203,7204000201967864,6882942806404175,4090183263858592,0.989646 +1204,7551445876687210,6882942806404175,4090183263858592,0.9981706 +1205,7261174806653891,6882942806404175,4090183263858592,0.9969009 +1206,7287563085745585,6882942806404175,4090183263858592,0.99440324 +1207,7415106434698416,6882942806404175,4090183263858592,0.9986658 +1208,7256776760138033,6882942806404175,4090183263858592,0.99904054 +1209,7296359178777843,6882942806404175,4090183263858592,0.9977182 +1210,7300757225311411,6882942806404175,4090183263858592,0.9917087 +1211,7256776760141356,6882942806404175,4090183263858592,0.9702342 +1212,7327145504412118,6882942806404175,4090183263858592,0.9862331 +1213,7256776760137886,6882942806404175,4090183263858592,0.9992323 +1214,7520659551076112,6882942806404175,4090183263858592,0.9837546 +1215,7397514248638770,6882942806404175,4090183263858592,0.996646 +1216,7520659551076497,6882942806404175,4090183263858592,0.9837134 +1217,7199602155446162,6882942806404175,4090183263858592,0.99400276 +1218,7428300574265512,6882942806404175,4090183263858592,0.9961867 +1219,7305155271832698,6882942806404175,4090183263858592,0.99796104 +1220,7261174806678144,6882942806404175,4090183263858592,0.99928397 +1221,7318349411369331,6882942806404175,4090183263858592,0.9956541 +1222,7401912295165025,6882942806404175,4090183263858592,0.9784182 +1223,7384320109087270,6882942806404175,4090183263858592,0.9994992 +1224,7182009969390884,6882942806404175,4090183263858592,0.9984748 +1225,7230388481069173,6882942806404175,4090183263858592,0.9971956 +1226,7520659551074295,6882942806404175,4090183263858592,0.99863845 +1227,7459086899859670,6882942806404175,4090183263858592,0.975573 +1228,7494271271986601,6882942806404175,4090183263858592,0.991104 +1230,7459086899855449,6882942806404175,4090183263858592,0.9977431 +1231,7393116202126664,6882942806404175,4090183263858592,0.99864215 +1232,7230388481069053,6882942806404175,4090183263858592,0.99903166 +1233,7278766992738889,6882942806404175,4090183263858592,0.99389786 +1234,7274368946207452,6882942806404175,4090183263858592,0.98929197 +1235,7406310341661020,6882942806404175,4090183263858592,0.9994999 +1236,7393116202138292,6882942806404175,4090183263858592,0.9718829 +1237,7564640016220143,6882942806404175,4090183263858592,0.99843246 +1239,7463484946380128,6882942806404175,4090183263858592,0.99237293 +1240,7401912295148431,6882942806404175,4090183263858592,0.972313 +1241,7388718155624513,6882942806404175,4090183263858592,0.9972156 +1242,7511863458044347,6882942806404175,4090183263858592,0.9931988 +1243,7204000201967982,6882942806404175,4090183263858592,0.99795234 +1244,7287563085747366,6882942806404175,4090183263858592,0.99876875 +1245,7230388481069220,6882942806404175,4090183263858592,0.99920243 +1246,7353533783478127,6882942806404175,4090183263858592,0.9553711 +1247,7410708388176281,6882942806404175,4090183263858592,0.9968141 +1248,7357931830005061,6882942806404175,4090183263858592,0.97741264 +1249,7274368946215860,6882942806404175,4090183263858592,0.9992673 +1250,7204000201967936,6882942806404175,4090183263858592,0.99499196 +1251,7300757225309501,6882942806404175,4090183263858592,0.98308474 +1252,7265572853193109,6882942806404175,4090183263858592,0.99541557 +1253,7243582620606615,6882942806404175,4090183263858592,0.99933857 +1254,7507465411539455,6882942806404175,4090183263858592,0.9764282 +1255,7507465411539471,6882942806404175,4090183263858592,0.9984701 +1256,7300757225306743,6882942806404175,4090183263858592,0.9832313 +1257,7393116202126660,6882942806404175,4090183263858592,0.9995529 +1258,7261174806678030,6882942806404175,4090183263858592,0.9989255 +1259,7511863458044281,6882942806404175,4090183263858592,0.9943715 +1260,7204000201957870,6882942806404175,4090183263858592,0.9917528 +1261,7247980667108718,6882942806404175,4090183263858592,0.99894613 +1263,7168815829855656,6882942806404175,4090183263858592,0.9990275 +1264,7182009969390836,6882942806404175,4090183263858592,0.9980117 +1265,7472281039392903,6882942806404175,4090183263858592,0.94741684 +1266,7305155271832711,6882942806404175,4090183263858592,0.9965031 +1267,7243582620602173,6882942806404175,4090183263858592,0.9964616 +1268,7547047830177124,6882942806404175,4090183263858592,0.99840766 +1269,7256776760137870,6882942806404175,4090183263858592,0.9938355 +1270,7208398248478429,6882942806404175,4090183263858592,0.985261 +1271,7472281039392862,6882942806404175,4090183263858592,0.8187587 +1272,7393116202113802,6882942806404175,4090183263858592,0.99332994 +1273,7503067365010541,6882942806404175,4090183263858592,0.9928306 +1274,7415106434698406,6882942806404175,4090183263858592,0.9982931 +1275,7318349411352562,6882942806404175,4090183263858592,0.9863897 +1276,7335941597434734,6882942806404175,4090183263858592,0.9659257 +1277,7547047830177185,6882942806404175,4090183263858592,0.9984119 +1278,7401912295166420,6882942806404175,4090183263858592,0.99933463 +1279,7287563085745413,6882942806404175,4090183263858592,0.99312097 +1280,7547047830177226,6882942806404175,4090183263858592,0.9982243 +1281,7212796294989983,6882942806404175,4090183263858592,0.99795145 +1282,7261174806681953,6882942806404175,4090183263858592,0.99903786 +1283,7388718155600364,6882942806404175,4090183263858592,0.9966978 +1284,7419504481212748,6882942806404175,4090183263858592,0.9947989 +1285,7291961132288717,6882942806404175,4090183263858592,0.99019605 +1286,7287563085760953,6882942806404175,4090183263858592,0.9955382 +1287,7410708388176265,6882942806404175,4090183263858592,0.99947864 +1288,7353533783476069,6882942806404175,4090183263858592,0.9966587 +1289,7243582620606559,6882942806404175,4090183263858592,0.9995285 +1290,7168815829855631,6882942806404175,4090183263858592,0.8700235 +1291,7454688853347421,6882942806404175,4090183263858592,0.9957605 +1292,7366727923050276,6882942806404175,4090183263858592,0.9995524 +1293,7331543550924002,6882942806404175,4090183263858592,0.9196226 +1294,7274368946215832,6882942806404175,4090183263858592,0.99890447 +1295,7261174806678065,6882942806404175,4090183263858592,0.9958028 +1297,7199602155446108,6882942806404175,4090183263858592,0.99502325 +1298,7357931830014324,6882942806404175,4090183263858592,0.93096435 +1299,7503067365024229,6882942806404175,4090183263858592,0.9952362 +1300,7247980667118790,6882942806404175,4090183263858592,0.9944317 +1301,7375524016073995,6882942806404175,4090183263858592,0.9993849 +1302,7291961132280353,6882942806404175,4090183263858592,0.99814427 +1303,7375524016074061,6882942806404175,4090183263858592,0.9994943 +1304,7564640016220329,6882942806404175,4090183263858592,0.9979572 +1305,7401912295171567,6882942806404175,4090183263858592,0.96937144 +1306,7573436109243972,6882942806404175,4090183263858592,0.97366333 +1307,7459086899865488,6882942806404175,4090183263858592,0.9983889 +1308,7256776760141320,6882942806404175,4090183263858592,0.979362 +1309,7564640016232827,6882942806404175,4090183263858592,0.9640571 +1310,7472281039417467,6882942806404175,4090183263858592,0.8189706 +1311,7190806062425187,6882942806404175,4090183263858592,0.9989396 +1312,7520659551076439,6882942806404175,4090183263858592,0.98327154 +1313,7384320109087109,6882942806404175,4090183263858592,0.9904358 +1314,7393116202141250,6882942806404175,4090183263858592,0.995708 +1315,7230388481069157,6882942806404175,4090183263858592,0.9993905 +1316,7252378713632948,6882942806404175,4090183263858592,0.99945265 +1317,7573436109244007,6882942806404175,4090183263858592,0.9989266 +1318,7463484946380139,6882942806404175,4090183263858592,0.99245983 +1319,7234786527574919,6882942806404175,4090183263858592,0.9989178 +1320,7507465411539489,6882942806404175,4090183263858592,0.9980064 +1321,7375524016074003,6882942806404175,4090183263858592,0.9993749 +1322,7278766992717785,6882942806404175,4090183263858592,0.9951337 +1323,7243582620598776,6882942806404175,4090183263858592,0.99732435 +1324,7300757225306754,6882942806404175,4090183263858592,0.9966364 +1325,7362329876535625,6882942806404175,4090183263858592,0.98296124 +1326,7432698620769808,6882942806404175,4090183263858592,0.99623847 +1327,7401912295166377,6882942806404175,4090183263858592,0.9986259 +1328,7199602155459100,6882942806404175,4090183263858592,0.9869178 +1329,7397514248655838,6882942806404175,4090183263858592,0.999356 +1330,7397514248655879,6882942806404175,4090183263858592,0.99903786 +1331,7564640016220243,6882942806404175,4090183263858592,0.99402446 +1332,7467882992890549,6882942806404175,4090183263858592,0.959962 +1334,7551445876687165,6882942806404175,4090183263858592,0.99049616 +1335,7406310341679859,6882942806404175,4090183263858592,0.98188525 +1336,7296359178799657,6882942806404175,4090183263858592,0.99625444 +1337,7335941597441580,6882942806404175,4090183263858592,0.99235606 +1338,7410708388176190,6882942806404175,4090183263858592,0.99944717 +1339,7186408015909140,6882942806404175,4090183263858592,0.9708902 +1340,7511863458044270,6882942806404175,4090183263858592,0.9944149 +1341,7410708388178720,6882942806404175,4090183263858592,0.9956533 +1342,7573436109242785,6882942806404175,4090183263858592,0.9932051 +1343,7410708388188345,6882942806404175,4090183263858592,0.99643916 +1344,7459086899859808,6882942806404175,4090183263858592,0.9111218 +1345,7247980667108769,6882942806404175,4090183263858592,0.99881065 +1346,7357931830015319,6882942806404175,4090183263858592,0.90693283 +1347,7243582620598756,6882942806404175,4090183263858592,0.9973284 +1348,7243582620602248,6882942806404175,4090183263858592,0.9994048 +1349,7516261504558077,6882942806404175,4090183263858592,0.88317734 +1351,7511863458044103,6882942806404175,4090183263858592,0.9934261 +1352,7415106434698525,6882942806404175,4090183263858592,0.9992244 +1353,7410708388188403,6882942806404175,4090183263858592,0.99732435 +1354,7564640016220186,6882942806404175,4090183263858592,0.99821186 +1355,7177611922879157,6882942806404175,4090183263858592,0.9944482 +1356,7573436109244106,6882942806404175,4090183263858592,0.99863607 +1357,7388718155624467,6882942806404175,4090183263858592,0.9967801 +1358,7313951364844429,6882942806404175,4090183263858592,0.9869278 +1359,7335941597433396,6882942806404175,4090183263858592,0.99571806 +1360,7393116202126668,6882942806404175,4090183263858592,0.9987826 +1361,7467882992891436,6882942806404175,4090183263858592,0.9683072 +1362,7208398248478456,6882942806404175,4090183263858592,0.9878014 +1363,7507465411539515,6882942806404175,4090183263858592,0.9985915 +1366,7511863458040115,6882942806404175,4090183263858592,0.9935865 +1367,7551445876686549,6882942806404175,4090183263858592,0.97648865 +1368,7415106434697909,6882942806404175,4090183263858592,0.9911413 +1369,7252378713624959,6882942806404175,4090183263858592,0.99660957 +1370,7199602155458908,6882942806404175,4090183263858592,0.9894581 +1371,7247980667108846,6882942806404175,4090183263858592,0.9993666 +1372,7261174806681958,6882942806404175,4090183263858592,0.9992238 +1373,7481077132433334,6882942806404175,4090183263858592,0.99893993 +1374,7344737690452538,6882942806404175,4090183263858592,0.9729637 +1375,7300757225306789,6882942806404175,4090183263858592,0.9970372 +1376,7432698620780962,6882942806404175,4090183263858592,0.9985267 +1377,7243582620598761,6882942806404175,4090183263858592,0.99796706 +1378,7472281039392949,6882942806404175,4090183263858592,0.81770307 +1379,7401912295166382,6882942806404175,4090183263858592,0.9985965 +1380,7177611922878854,6882942806404175,4090183263858592,0.9822031 +1381,7384320109091391,6882942806404175,4090183263858592,0.99450266 +1382,7393116202126670,6882942806404175,4090183263858592,0.9961796 +1383,7419504481207960,6882942806404175,4090183263858592,0.98923534 +1384,7199602155446157,6882942806404175,4090183263858592,0.99403423 +1385,7287563085745436,6882942806404175,4090183263858592,0.98800105 +1386,7393116202126654,6882942806404175,4090183263858592,0.9987581 +1387,7560241969708982,6882942806404175,4090183263858592,0.99213177 +1388,7401912295166395,6882942806404175,4090183263858592,0.99890447 +1389,7247980667108820,6882942806404175,4090183263858592,0.9989505 +1390,7401912295156795,6882942806404175,4090183263858592,0.9967096 +1391,7190806062434257,6882942806404175,4090183263858592,0.9967643 +1392,7239184574099387,6882942806404175,4090183263858592,0.9995161 +1393,7353533783504670,6882942806404175,4090183263858592,0.99149734 +1394,7476679085912961,6882942806404175,4090183263858592,0.99260336 +1395,7498669318503963,6882942806404175,4090183263858592,0.9807351 +1397,7401912295166453,6882942806404175,4090183263858592,0.99913484 +1398,7300757225306777,6882942806404175,4090183263858592,0.99628204 +1399,7573436109244128,6882942806404175,4090183263858592,0.9968702 +1400,7406310341682448,6882942806404175,4090183263858592,0.9969886 +1401,7529455644096546,6882942806404175,4090183263858592,0.9982243 +1402,7243582620599881,6882942806404175,4090183263858592,0.9423365 +1403,7459086899865492,6882942806404175,4090183263858592,0.99839765 +1404,7529455644096537,6882942806404175,4090183263858592,0.9982272 +1405,7190806062434215,6882942806404175,4090183263858592,0.9986325 +1406,7287563085772746,6882942806404175,4090183263858592,0.99881727 +1407,7410708388176243,6882942806404175,4090183263858592,0.9993849 +1408,7384320109096452,6882942806404175,4090183263858592,0.999335 +1409,7230388481064642,6882942806404175,4090183263858592,0.99775416 +1410,7393116202118706,6882942806404175,4090183263858592,0.99934727 +1411,7476679085906251,6882942806404175,4090183263858592,0.99880135 +1412,7182009969397112,6882942806404175,4090183263858592,0.9607907 +1413,7230388481064691,6882942806404175,4090183263858592,0.9960686 +1414,7388718155624476,6882942806404175,4090183263858592,0.99678 +1415,7190806062434114,6882942806404175,4090183263858592,0.9980641 +1416,7428300574238769,6882942806404175,4090183263858592,0.9945075 +1417,7393116202126672,6882942806404175,4090183263858592,0.9994992 +1418,7573436109244075,6882942806404175,4090183263858592,0.99822706 +1419,7300757225306799,6882942806404175,4090183263858592,0.99028337 +1421,7450290806816403,6882942806404175,4090183263858592,0.99827754 +1422,7393116202139793,6882942806404175,4090183263858592,0.9592872 +1423,7507465411539339,6882942806404175,4090183263858592,0.99443024 +1424,7305155271832624,6882942806404175,4090183263858592,0.9965011 +1425,7190806062433642,6882942806404175,4090183263858592,0.992761 +1426,7243582620606573,6882942806404175,4090183263858592,0.99716055 +1427,7300757225308097,6882942806404175,4090183263858592,0.9947826 +1428,7476679085912859,6882942806404175,4090183263858592,0.99262625 +1429,7445892760297554,6882942806404175,4090183263858592,0.9962463 +1430,7261174806655442,6882942806404175,4090183263858592,0.9986469 +1431,7406310341661010,6882942806404175,4090183263858592,0.9994438 +1432,7256776760138022,6882942806404175,4090183263858592,0.9992824 +1433,7410708388176208,6882942806404175,4090183263858592,0.999435 +1434,7516261504570287,6882942806404175,4090183263858592,0.9906819 +1435,7375524016071065,6882942806404175,4090183263858592,0.99643373 +1436,7234786527562272,6882942806404175,4090183263858592,0.98535943 +1437,7507465411521407,6882942806404175,4090183263858592,0.97251546 +1438,7401912295166389,6882942806404175,4090183263858592,0.99919134 +1439,7366727923050382,6882942806404175,4090183263858592,0.99941254 +1440,7406310341679870,6882942806404175,4090183263858592,0.9821775 +1441,7261174806681929,6882942806404175,4090183263858592,0.9993548 +1442,7327145504412302,6882942806404175,4090183263858592,0.99586344 +1443,7195204108948041,6882942806404175,4090183263858592,0.9983012 +1444,7472281039392860,6882942806404175,4090183263858592,0.8184947 +1445,7243582620606610,6882942806404175,4090183263858592,0.9991277 +1446,7190806062434190,6882942806404175,4090183263858592,0.9963013 +1447,7547047830177241,6882942806404175,4090183263858592,0.99686384 +1448,7362329876531335,6882942806404175,4090183263858592,0.9962612 +1449,7261174806672752,6882942806404175,4090183263858592,0.9934541 +1450,7375524016063687,6882942806404175,4090183263858592,0.99573 +1451,7173213876375240,6882942806404175,4090183263858592,0.99180084 +1452,7322747457870071,6882942806404175,4090183263858592,0.98239994 +1453,7335941597433390,6882942806404175,4090183263858592,0.994584 +1454,7256776760138050,6882942806404175,4090183263858592,0.9995771 +1455,7261174806653910,6882942806404175,4090183263858592,0.99771297 +1456,7485475178942196,6882942806404175,4090183263858592,0.9988662 +1457,7406310341661104,6882942806404175,4090183263858592,0.99944216 +1458,7393116202118694,6882942806404175,4090183263858592,0.9992048 +1459,7256776760137990,6882942806404175,4090183263858592,0.9995208 +1460,7261174806678012,6882942806404175,4090183263858592,0.9991172 +1461,7247980667108738,6882942806404175,4090183263858592,0.9995609 +1462,7261174806677974,6882942806404175,4090183263858592,0.9981706 +1463,7388718155600343,6882942806404175,4090183263858592,0.9947126 +1464,7459086899847371,6882942806404175,4090183263858592,0.95768064 +1465,7182009969390746,6882942806404175,4090183263858592,0.9976705 +1466,7419504481208414,6882942806404175,4090183263858592,0.98272645 +1467,7168815829855627,6882942806404175,4090183263858592,0.86879003 +1468,7564640016220183,6882942806404175,4090183263858592,0.99847025 +1469,7393116202132317,6882942806404175,4090183263858592,0.99354726 +1470,7186408015907385,6882942806404175,4090183263858592,0.9977672 +1471,7296359178796166,6882942806404175,4090183263858592,0.9832313 +1472,7234786527577318,6882942806404175,4090183263858592,0.98988265 +1473,7463484946386258,6882942806404175,4090183263858592,0.99756086 +1474,7415106434700102,6882942806404175,4090183263858592,0.99941254 +1475,7410708388184576,6882942806404175,4090183263858592,0.99006826 +1476,7450290806825933,6882942806404175,4090183263858592,0.99795425 +1477,7243582620602234,6882942806404175,4090183263858592,0.99598783 +1478,7208398248478513,6882942806404175,4090183263858592,0.99629694 +1479,7547047830177233,6882942806404175,4090183263858592,0.99765235 +1480,7261174806678097,6882942806404175,4090183263858592,0.9991347 +1481,7472281039396687,6882942806404175,4090183263858592,0.9245484 +1482,7401912295166387,6882942806404175,4090183263858592,0.99934727 +1483,7265572853193077,6882942806404175,4090183263858592,0.9991116 +1484,7239184574099252,6882942806404175,4090183263858592,0.9995432 +1485,7225990434559241,6882942806404175,4090183263858592,0.9692091 +1486,7397514248655870,6882942806404175,4090183263858592,0.9993548 +1487,7261174806681907,6882942806404175,4090183263858592,0.99910873 +1488,7212796294988308,6882942806404175,4090183263858592,0.9974032 +1489,7388718155625531,6882942806404175,4090183263858592,0.9942983 +1490,7401912295166460,6882942806404175,4090183263858592,0.99920636 +1491,7401912295166468,6882942806404175,4090183263858592,0.9991173 +1492,7419504481208314,6882942806404175,4090183263858592,0.9693611 +1493,7243582620599836,6882942806404175,4090183263858592,0.9946238 +1494,7410708388178812,6882942806404175,4090183263858592,0.9915138 +1495,7529455644113160,6882942806404175,4090183263858592,0.998844 +1496,7230388481064648,6882942806404175,4090183263858592,0.999074 +1497,7186408015907366,6882942806404175,4090183263858592,0.9982888 +1498,7564640016232994,6882942806404175,4090183263858592,0.966499 +1499,7410708388188450,6882942806404175,4090183263858592,0.98034614 +1501,7476679085906169,6882942806404175,4090183263858592,0.99880683 +1502,7375524016077450,6882942806404175,4090183263858592,0.9903376 +1503,7564640016220138,6882942806404175,4090183263858592,0.99266124 +1504,7401912295170767,6882942806404175,4090183263858592,0.99327856 +1505,7393116202126605,6882942806404175,4090183263858592,0.9961798 +1506,7432698620772250,6882942806404175,4090183263858592,0.9946038 +1507,7388718155620880,6882942806404175,4090183263858592,0.9915138 +1508,7195204108948061,6882942806404175,4090183263858592,0.9954372 +1509,7463484946380137,6882942806404175,4090183263858592,0.9926197 +1510,7375524016070832,6882942806404175,4090183263858592,0.9968725 +1511,7419504481209847,6882942806404175,4090183263858592,0.994368 +1512,7401912295166441,6882942806404175,4090183263858592,0.99928385 +1513,7190806062434119,6882942806404175,4090183263858592,0.9926892 +1514,7322747457870173,6882942806404175,4090183263858592,0.99762946 +1515,7243582620606725,6882942806404175,4090183263858592,0.9990526 +1516,7182009969390750,6882942806404175,4090183263858592,0.9973732 +1517,7507465411520214,6882942806404175,4090183263858592,0.99048764 +1518,7384320109110710,6882942806404175,4090183263858592,0.9785064 +1519,7564640016220193,6882942806404175,4090183263858592,0.9964695 +1520,7256776760137934,6882942806404175,4090183263858592,0.9987943 +1521,7247980667119556,6882942806404175,4090183263858592,0.9963683 +1522,7247980667108777,6882942806404175,4090183263858592,0.99824667 +1523,7313951364850817,6882942806404175,4090183263858592,0.99811447 +1524,7397514248657844,6882942806404175,4090183263858592,0.9977695 +1525,7190806062435082,6882942806404175,4090183263858592,0.9975535 +1526,7256776760137985,6882942806404175,4090183263858592,0.9994617 +1527,7274368946213654,6882942806404175,4090183263858592,0.9951415 +1528,7375524016073976,6882942806404175,4090183263858592,0.999435 +1529,7283165039233194,6882942806404175,4090183263858592,0.99852645 +1530,7349135736965568,6882942806404175,4090183263858592,0.99632037 +1531,7357931830005065,6882942806404175,4090183263858592,0.97792953 +1532,7415106434691264,6882942806404175,4090183263858592,0.997024 +1533,7476679085912971,6882942806404175,4090183263858592,0.9924724 +1534,7182009969405113,6882942806404175,4090183263858592,0.9974993 +1535,7234786527586088,6882942806404175,4090183263858592,0.99661547 +1536,7256776760162558,6882942806404175,4090183263858592,0.99857056 +1537,7190806062433657,6882942806404175,4090183263858592,0.9960782 +1538,7186408015893914,6882942806404175,4090183263858592,0.9809441 +1539,7247980667108841,6882942806404175,4090183263858592,0.99888664 +1540,7410708388193494,6882942806404175,4090183263858592,0.99368805 +1542,7401912295156734,6882942806404175,4090183263858592,0.9989266 +1543,7547047830157993,6882942806404175,4090183263858592,0.99723524 +1544,7247980667108786,6882942806404175,4090183263858592,0.99865353 +1546,7243582620599822,6882942806404175,4090183263858592,0.9800608 +1548,7357931830005076,6882942806404175,4090183263858592,0.97648877 +1549,7406310341661030,6882942806404175,4090183263858592,0.9995258 +1550,7182009969390874,6882942806404175,4090183263858592,0.9565266 +1551,7186408015914333,6882942806404175,4090183263858592,0.98419464 +1552,7322747457894114,6882942806404175,4090183263858592,0.9946344 +1553,7256776760137958,6882942806404175,4090183263858592,0.9992312 +1554,7454688853339363,6882942806404175,4090183263858592,0.98012984 +1555,7256776760137904,6882942806404175,4090183263858592,0.99905795 +1556,7507465411530642,6882942806404175,4090183263858592,0.9951444 +1558,7437096667283276,6882942806404175,4090183263858592,0.98808634 +1559,7371125969554962,6882942806404175,4090183263858592,0.9994438 +1560,7454688853347415,6882942806404175,4090183263858592,0.9957652 +1561,7261174806653917,6882942806404175,4090183263858592,0.99764615 +1562,7542649783634679,6882942806404175,4090183263858592,0.997044 +1563,7375524016073954,6882942806404175,4090183263858592,0.999508 +1564,7388718155619688,6882942806404175,4090183263858592,0.99773645 +1565,7397514248655819,6882942806404175,4090183263858592,0.9994135 +1566,7406310341682479,6882942806404175,4090183263858592,0.99764615 +1567,7296359178777904,6874146713382665,4090183263858592,0.9820857 +1568,7186408015914354,6874146713382665,4090183263858592,0.976823 +1569,7204000201979335,6891738899432775,4090183263858599,0.9989893 +1570,7384320109100659,6891738899432775,4090183263858599,0.99865544 +1572,7388718155609362,6891738899432720,4090183263858619,0.994087 +1575,7186408015906779,6891738899432720,4090183263858619,0.841166 +1577,7366727923050314,6882942806404146,4090183263858619,0.9901337 +1578,7406310341674090,6891738899431728,4090183263858621,0.97164303 +1579,7371125969549286,6891738899431728,4090183263858621,0.97640264 +1580,7349135736984824,6891738899431728,4090183263858621,0.97532654 +1581,7349135736984757,6891738899431728,4090183263858621,0.9753287 +1582,7353533783504134,6891738899431728,4090183263858621,0.9764 +1583,7406310341674142,6891738899431728,4090183263858621,0.9716448 +1590,7230388481068727,6891738899432071,4090183263858628,0.9985967 +1594,7388718155601792,6891738899432071,4090183263858628,0.9968934 +1595,7393116202119567,6891738899432071,4090183263858628,0.9950139 +1596,7525057597594435,6891738899432071,4090183263858628,0.99941623 +1598,7454688853339479,6891738899432071,4090183263858628,0.9833409 +1600,7397514248650609,6891738899432071,4090183263858628,0.99914265 +1603,7204000201960973,6891738899432071,4090183263858628,0.9284748 +1604,7204000201961007,6891738899432071,4090183263858628,0.999567 +1605,7379922062574650,6891738899431956,4090183263858628,0.952374 +1606,7397514248650736,6891738899431797,4090183263858628,0.99906904 +1607,7230388481068738,6891738899431797,4090183263858628,0.99931216 +1608,7459086899850734,6891738899431642,4090183263858687,0.997678 +1609,7296359178796106,6891738899431642,4090183263858687,0.9980704 +1610,7296359178796084,6891738899431642,4090183263858687,0.9980703 +1611,7445892760317693,6891738899431642,4090183263858687,0.9983103 +1612,7489873225479650,6891738899431642,4090183263858687,0.99664956 +1613,7503067365006093,6891738899431642,4090183263858687,0.9978314 +1614,7362329876513581,6891738899431642,4090183263858687,0.9979963 +1615,7415106434695980,6891738899431642,4090183263858687,0.9941519 +1616,7371125969555594,6891738899431642,4090183263858687,0.9976883 +1617,7520659551068995,6891738899431642,4090183263858687,0.9985331 +1618,7450290806816275,6891738899431642,4090183263858687,0.99795246 +1619,7459086899850323,6891738899431642,4090183263858687,0.9959817 +1620,7445892760317667,6891738899431642,4090183263858687,0.9983095 +1621,7371125969555042,6891738899431642,4090183263858687,0.99817884 +1622,7371125969555641,6891738899431642,4090183263858687,0.99768806 +1623,7459086899850721,6891738899431642,4090183263858687,0.99801815 +1624,7393116202117389,6891738899431642,4090183263858687,0.9981592 +1625,7384320109104960,6891738899431642,4090183263858687,0.99883837 +1626,7445892760317704,6891738899431642,4090183263858687,0.998309 +1627,7498669318509622,6891738899431642,4090183263858687,0.9979361 +1628,7371125969555025,6891738899431642,4090183263858687,0.9973508 +1629,7379922062578883,6891738899431642,4090183263858687,0.99768853 +1630,7357931830020264,6891738899431642,4090183263858687,0.9979965 +1631,7450290806816269,6891738899431642,4090183263858687,0.9979539 +1632,7459086899850344,6891738899431642,4090183263858687,0.995981 +1633,7287563085772760,6891738899431642,4090183263858687,0.99807173 +1634,7520659551076256,6891738899431642,4090183263858687,0.9955232 +1635,7269970899702608,6891738899431642,4090183263858687,0.9969374 +1636,7371125969555102,6891738899431642,4090183263858687,0.99817884 +1637,7366727923047753,6891738899431642,4090183263858687,0.9981785 +1638,7371125969555092,6891738899431642,4090183263858687,0.99817836 +1639,7401912295166325,6891738899431642,4090183263858687,0.99483216 +1640,7379922062574580,6891738899431642,4090183263858687,0.9983242 +1641,7287563085772767,6891738899431642,4090183263858687,0.9980716 +1642,7287563085772741,6891738899431642,4090183263858687,0.99807173 +1643,7195204108942527,6891738899431642,4090183263858687,0.99847716 +1644,7362329876531229,6891738899431642,4090183263858687,0.99785787 +1645,7489873225479646,6891738899431642,4090183263858687,0.9985006 +1646,7379922062574591,6891738899431642,4090183263858687,0.99832517 +1647,7265572853193163,6891738899431642,4090183263858687,0.9983525 +1648,7459086899850328,6891738899431642,4090183263858687,0.9959818 +1649,7287563085772734,6891738899431642,4090183263858687,0.9980718 +1650,7520659551069003,6891738899431642,4090183263858687,0.99853384 +1651,7445892760315962,6891738899431642,4090183263858687,0.9972191 +1652,7401912295163137,6891738899431642,4090183263858687,0.9941527 +1653,7256776760146845,6891738899431642,4090183263858687,0.99834716 +1654,7463484946359883,6891738899431642,4090183263858687,0.99801815 +1655,7503067365006095,6891738899431642,4090183263858687,0.997832 +1656,7445892760315990,6891738899431642,4090183263858687,0.9972178 +1657,7388718155605662,6891738899431642,4090183263858687,0.99817836 +1658,7503067365006103,6891738899431642,4090183263858687,0.99287146 +1659,7362329876513582,6891738899431642,4090183263858687,0.99786466 +1660,7379922062572260,6891738899431642,4090183263858687,0.99832636 +1661,7327145504406432,6891738899431642,4090183263858687,0.9953055 +1662,7327145504406356,6891738899431642,4090183263858687,0.99648535 +1663,7445892760315999,6891738899431642,4090183263858687,0.9963742 +1664,7450290806816268,6891738899431642,4090183263858687,0.99795365 +1665,7498669318509625,6891738899431642,4090183263858687,0.99793637 +1666,7384320109104958,6891738899431642,4090183263858687,0.99847203 +1667,7393116202117406,6891738899431642,4090183263858687,0.99800617 +1668,7520659551068945,6891738899431642,4090183263858687,0.99626774 +1669,7511863458044432,6891738899431642,4090183263858687,0.998218 +1670,7371125969555062,6891738899431642,4090183263858687,0.99817896 +1671,7459086899850725,6891738899431642,4090183263858687,0.99615806 +1672,7459086899850303,6891738899431642,4090183263858687,0.9959799 +1673,7520659551069001,6891738899431642,4090183263858687,0.99853396 +1674,7503067365006090,6891738899431642,4090183263858687,0.99783164 +1675,7239184574102048,6891738899431642,4090183263858687,0.9985732 +1676,7371125969555029,6891738899431642,4090183263858687,0.99817884 +1677,7371125969555686,6891738899431642,4090183263858687,0.9976883 +1678,7366727923031790,6891738899431642,4090183263858687,0.9981407 +1679,7379922062578897,6891738899431642,4090183263858687,0.99768853 +1680,7296359178796099,6891738899431642,4090183263858687,0.99807173 +1681,7357931830020270,6891738899431642,4090183263858687,0.9979995 +1682,7459086899850788,6891738899431642,4090183263858687,0.99636406 +1683,7445892760317698,6891738899431642,4090183263858687,0.99555296 +1684,7362329876513579,6891738899431642,4090183263858687,0.9978642 +1685,7445892760317679,6891738899431642,4090183263858687,0.9983103 +1686,7366727923031785,6891738899431642,4090183263858687,0.9934794 +1687,7459086899850423,6891738899431642,4090183263858687,0.995981 +1688,7498669318509629,6891738899431642,4090183263858687,0.99793506 +1689,7397514248645152,6874146713380997,4090183263858687,0.9996561 +1690,7564640016225726,6874146713380997,4090183263858687,0.9996636 +1691,7388718155600229,6874146713380997,4090183263858687,0.9996561 +1692,7340339643943651,6874146713380997,4090183263858687,0.9996669 +1693,7349135736966268,6874146713380997,4090183263858687,0.9996685 +1694,7406310341679881,6874146713380997,4090183263858687,0.99979 +1695,7520659551076441,6874146713380997,4090183263858687,0.9996635 +1696,7423902527730985,6874146713380997,4090183263858687,0.9997094 +1697,7393116202138438,6874146713380997,4090183263858687,0.99958974 +1698,7247980667127379,6874146713380997,4090183263858687,0.9995931 +1699,7393116202138456,6874146713380997,4090183263858687,0.9996413 +1700,7560241969711838,6874146713380997,4090183263858687,0.9996569 +1701,7379922062578967,6874146713380997,4090183263858687,0.99967194 +1702,7410708388178560,6874146713380997,4090183263858687,0.99963355 +1703,7164417783344886,6874146713380997,4090183263858687,0.999648 +1704,7252378713636375,6874146713380997,4090183263858687,0.9995931 +1705,7384320109091359,6874146713380997,4090183263858687,0.9996309 +1706,7397514248645135,6874146713380997,4090183263858687,0.99967337 +1707,7230388481074507,6874146713380997,4090183263858687,0.99958974 +1708,7406310341679813,6874146713380997,4090183263858687,0.9997968 +1709,7384320109091305,6874146713380997,4090183263858687,0.9996687 +1710,7401912295150994,6874146713380997,4090183263858687,0.99958783 +1711,7256776760140800,6874146713380997,4090183263858687,0.9996419 +1712,7230388481074565,6874146713380997,4090183263858687,0.99958974 +1713,7388718155600223,6874146713380997,4090183263858687,0.9995877 +1714,7234786527587799,6874146713380997,4090183263858687,0.9996562 +1715,7261174806676777,6874146713380997,4090183263858687,0.99967337 +1716,7384320109091450,6874146713380997,4090183263858687,0.999655 +1717,7261174806676787,6874146713380997,4090183263858687,0.99967337 +1718,7560241969711871,6874146713380997,4090183263858687,0.9996532 +1719,7340339643943773,6874146713380997,4090183263858687,0.9996112 +1720,7401912295151074,6874146713380997,4090183263858687,0.9996309 +1721,7362329876534168,6874146713380997,4090183263858687,0.9996561 +1722,7256776760140728,6874146713380997,4090183263858687,0.99958974 +1723,7393116202138398,6874146713380997,4090183263858687,0.99958974 +1724,7349135736966254,6874146713380997,4090183263858687,0.99965954 +1725,7234786527587895,6874146713380997,4090183263858687,0.9995931 +1726,7234786527587771,6874146713380997,4090183263858687,0.9996562 +1727,7331543550920406,6874146713380997,4090183263858687,0.9996426 +1728,7261174806676770,6874146713380997,4090183263858687,0.99967337 +1729,7393116202138692,6874146713380997,4090183263858687,0.99958974 +1730,7388718155600226,6874146713380997,4090183263858687,0.9996309 +1731,7379922062578951,6874146713380997,4090183263858687,0.9996561 +1732,7234786527587830,6874146713380997,4090183263858687,0.9995931 +1733,7340339643943796,6874146713380997,4090183263858687,0.99955755 +1734,7388718155600193,6874146713380997,4090183263858687,0.9996309 +1735,7269970899705087,6874146713380997,4090183263858687,0.9996569 +1736,7520659551076390,6874146713380997,4090183263858687,0.9996562 +1737,7520659551076460,6874146713380997,4090183263858687,0.9996636 +1738,7397514248645179,6874146713380997,4090183263858687,0.9996561 +1739,7560241969711950,6874146713380997,4090183263858687,0.9996636 +1740,7397514248645173,6874146713380997,4090183263858687,0.9996561 +1741,7234786527587937,6874146713380997,4090183263858687,0.9996562 +1742,7340339643943742,6874146713380997,4090183263858687,0.9996669 +1743,7287563085749224,6874146713380997,4090183263858687,0.9996718 +1744,7177611922878076,6874146713380997,4090183263858687,0.99967265 +1745,7261174806676802,6874146713380997,4090183263858687,0.99967194 +1746,7520659551076475,6874146713380997,4090183263858687,0.9996562 +1747,7379922062578964,6874146713380997,4090183263858687,0.9995877 +1748,7287563085749239,6874146713380997,4090183263858687,0.99967337 +1749,7340339643943801,6874146713380997,4090183263858687,0.9996669 +1750,7234786527587783,6874146713380997,4090183263858687,0.9996301 +1751,7204000201960951,6874146713380997,4090183263858687,0.99900407 +1752,7401912295151025,6874146713380997,4090183263858687,0.9995877 +1753,7177611922878098,6874146713380997,4090183263858687,0.99967265 +1754,7388718155600190,6874146713380997,4090183263858687,0.9996561 +1755,7401912295150988,6874146713380997,4090183263858687,0.9995877 +1756,7410708388178540,6874146713380997,4090183263858687,0.9996687 +1757,7256776760140818,6874146713380997,4090183263858687,0.99958974 +1758,7362329876513646,6874146713380997,4090183263858687,0.9996532 +1759,7247980667127399,6874146713380997,4090183263858687,0.9996301 +1760,7177611922878116,6874146713380997,4090183263858687,0.99967253 +1761,7520659551076395,6874146713380997,4090183263858687,0.9996301 +1762,7560241969711965,6874146713380997,4090183263858687,0.9996568 +1763,7406310341679901,6874146713380997,4090183263858687,0.99973506 +1764,7269970899705022,6874146713380997,4090183263858687,0.9996569 +1765,7393116202138715,6874146713380997,4090183263858687,0.99958974 +1766,7393116202138426,6874146713380997,4090183263858687,0.99958974 +1767,7177611922878175,6874146713380997,4090183263858687,0.99967265 +1768,7393116202141105,6874146713380997,4090183263858687,0.9996295 +1769,7256776760140820,6874146713380997,4090183263858687,0.9996419 +1770,7274368946212576,6891738899432746,4090183263858687,0.9995192 +1771,7230388481069130,6891738899432746,4090183263858687,0.9996 +1772,7331543550908294,6891738899432746,4090183263858687,0.99938655 +1773,7410708388176235,6891738899432746,4090183263858687,0.9995351 +1774,7560241969711200,6891738899432746,4090183263858687,0.9991566 +1775,7265572853193105,6891738899432746,4090183263858687,0.9995503 +1776,7419504481209713,6891738899432746,4090183263858687,0.999671 +1777,7410708388188316,6891738899432746,4090183263858687,0.99946254 +1778,7375524016073999,6891738899432746,4090183263858687,0.99957234 +1779,7379922062581673,6891738899432746,4090183263858687,0.99965036 +1780,7265572853192648,6891738899432746,4090183263858687,0.99907935 +1781,7296359178804271,6891738899432746,4090183263858687,0.9991441 +1782,7529455644106227,6891738899432746,4090183263858687,0.9993531 +1783,7379922062581721,6891738899432746,4090183263858687,0.99965465 +1784,7217194341502040,6891738899432746,4090183263858687,0.999577 +1785,7410708388176232,6891738899432746,4090183263858687,0.9995499 +1786,7349135736986052,6891738899432746,4090183263858687,0.9995303 +1787,7230388481069844,6891738899432746,4090183263858687,0.9995459 +1788,7186408015909694,6891738899432746,4090183263858687,0.9991566 +1789,7357931830010812,6891738899432746,4090183263858687,0.9994789 +1790,7401912295165065,6891738899432746,4090183263858687,0.999627 +1791,7322747457869800,6891738899432746,4090183263858687,0.99921834 +1792,7503067365010513,6891738899432746,4090183263858687,0.9996395 +1793,7401912295164957,6891738899432746,4090183263858687,0.9996489 +1794,7529455644099354,6891738899432746,4090183263858687,0.9994184 +1795,7357931830012230,6891738899432746,4090183263858687,0.9995277 +1796,7296359178804228,6891738899432746,4090183263858687,0.9994281 +1797,7388718155600737,6891738899432746,4090183263858687,0.9996779 +1798,7520659551076212,6891738899432746,4090183263858687,0.9995803 +1799,7300757225298871,6891738899432746,4090183263858687,0.99927694 +1800,7366727923049263,6891738899432746,4090183263858687,0.99913955 +1801,7357931830010815,6891738899432746,4090183263858687,0.99957734 +1802,7186408015909735,6891738899432746,4090183263858687,0.99935323 +1803,7379922062581666,6891738899432746,4090183263858687,0.99965036 +1804,7190806062425796,6891738899432746,4090183263858687,0.99930394 +1805,7410708388176238,6891738899432746,4090183263858687,0.9994336 +1806,7547047830177189,6891738899432746,4090183263858687,0.99968565 +1807,7388718155627489,6891738899432746,4090183263858687,0.99914885 +1808,7529455644099336,6891738899432746,4090183263858687,0.99941754 +1809,7393116202126636,6891738899432746,4090183263858687,0.99948573 +1810,7529455644099537,6891738899432746,4090183263858687,0.99925894 +1811,7401912295156723,6891738899432746,4090183263858687,0.99953914 +1812,7296359178804217,6891738899432746,4090183263858687,0.9989262 +1813,7529455644099509,6891738899432746,4090183263858687,0.99941826 +1814,7538251737120485,6891738899432746,4090183263858687,0.9995803 +1815,7520659551068937,6891738899432746,4090183263858687,0.99970216 +1816,7415106434695571,6891738899432746,4090183263858687,0.9992879 +1817,7379922062581687,6891738899432746,4090183263858687,0.99964726 +1818,7573436109244031,6891738899432746,4090183263858687,0.99943215 +1819,7529455644099416,6891738899432746,4090183263858687,0.99925977 +1820,7243582620606737,6891738899432746,4090183263858687,0.9995246 +1821,7463484946386302,6891738899432746,4090183263858687,0.9991098 +1822,7547047830177197,6891738899432746,4090183263858687,0.99953914 +1823,7291961132265183,6891738899432746,4090183263858687,0.99964964 +1824,7454688853351525,6891738899432746,4090183263858687,0.9993481 +1825,7393116202141673,6891738899432746,4090183263858687,0.9987029 +1826,7274368946212505,6891738899432746,4090183263858687,0.99959856 +1827,7190806062434885,6891738899432746,4090183263858687,0.9995468 +1828,7278766992727972,6891738899432746,4090183263858687,0.999134 +1829,7560241969711196,6891738899432746,4090183263858687,0.9991565 +1830,7357931830014411,6891738899432746,4090183263858687,0.99958915 +1831,7366727923049267,6891738899432746,4090183263858687,0.9991394 +1832,7371125969542408,6891738899432746,4090183263858687,0.99913955 +1833,7406310341676768,6891738899432746,4090183263858687,0.9997056 +1834,7357931830012214,6891738899432746,4090183263858687,0.99955493 +1835,7357931830015305,6891738899432746,4090183263858687,0.99960405 +1836,7269970899703789,6891738899432746,4090183263858687,0.9991346 +1837,7379922062581627,6891738899432746,4090183263858687,0.99965453 +1838,7520659551074162,6891738899432746,4090183263858687,0.9986268 +1839,7256776760138014,6891738899432746,4090183263858687,0.999548 +1840,7357931830012226,6891738899432746,4090183263858687,0.9995364 +1841,7366727923050320,6891738899432746,4090183263858687,0.9995111 +1842,7401912295164950,6891738899432746,4090183263858687,0.998307 +1843,7393116202118718,6891738899432746,4090183263858687,0.9994873 +1844,7406310341674002,6891738899432746,4090183263858687,0.9990152 +1845,7379922062581578,6891738899432746,4090183263858687,0.9996474 +1846,7322747457869806,6891738899432746,4090183263858687,0.99941325 +1847,7393116202141545,6891738899432746,4090183263858687,0.998703 +1848,7463484946386308,6891738899432746,4090183263858687,0.9991098 +1849,7379922062581680,6891738899432746,4090183263858687,0.9996474 +1850,7533853690611374,6891738899432746,4090183263858687,0.9992599 +1851,7252378713632833,6891738899432746,4090183263858687,0.9995716 +1852,7269970899703779,6891738899432746,4090183263858687,0.99913424 +1853,7388718155620433,6891738899432746,4090183263858687,0.9995499 +1854,7296359178804238,6891738899432746,4090183263858687,0.9993325 +1855,7296359178804240,6891738899432746,4090183263858687,0.999366 +1856,7247980667108762,6891738899432746,4090183263858687,0.9995278 +1857,7186408015909729,6891738899432746,4090183263858687,0.9993536 +1858,7269970899703814,6891738899432746,4090183263858687,0.99928766 +1859,7538251737120490,6891738899432746,4090183263858687,0.99960035 +1860,7353533783504039,6891738899431237,4090183263858687,0.99592716 +1861,7349135736984747,6891738899431237,4090183263858687,0.9961641 +1862,7349135736985064,6891738899431237,4090183263858687,0.9961606 +1863,7327145504409084,6891738899431237,4090183263858687,0.9951794 +1864,7353533783504121,6891738899431237,4090183263858687,0.99592173 +1865,7428300574265504,6891738899432954,4090183263858687,0.9982457 +1866,7287563085745538,6891738899430886,4090183263858687,0.99099296 +1867,7247980667127301,6891738899432912,4090183263858693,0.8345376 +1868,7182009969406471,6891738899432912,4090183263858693,0.977576 +1869,7432698620769656,6891738899432912,4090183263858693,0.9953713 +1870,7313951364851558,6891738899432912,4090183263858693,0.9938093 +1871,7204000201982675,6891738899432912,4090183263858693,0.9867749 +1872,7459086899847349,6891738899432912,4090183263858693,0.97108704 +1873,7331543550908465,6891738899432912,4090183263858693,0.99464285 +1874,7388718155601222,6891738899432845,4090183263858693,0.9972173 +1875,7204000201969329,6891738899432845,4090183263858693,0.9969669 +1876,7340339643957338,6891738899425633,4090183263858693,0.970699 +1877,7489873225479660,6891738899425633,4090183263858693,0.9806851 +1878,7313951364851571,6891738899430554,4090183263858693,0.98779106 +1879,7401912295164698,6891738899431702,4090183263858707,0.9204756 +1880,7384320109103844,6891738899430457,4103377403391695,0.9361284 +1881,7393116202119647,6891738899430457,4103377403391695,0.9932615 +1882,7393116202139236,6896136945937747,4103377403391695,0.9835174 +1883,7371125969559339,6896136945937747,4103377403391695,0.928002 +1884,7234786527561046,6896136945937747,4103377403391695,0.99389535 +1885,7401912295171636,6896136945937747,4103377403391695,0.9687418 +1886,7393116202117447,6896136945937747,4103377403391695,0.9938725 +1887,7393116202141155,6896136945937747,4103377403391695,0.9954659 +1888,7401912295163117,6896136945937747,4103377403391695,0.99431616 +1889,7393116202138479,6896136945937747,4103377403391695,0.99521506 +1890,7353533783487926,6896136945937747,4103377403391695,0.9692336 +1891,7410708388184602,6896136945937747,4103377403391695,0.9811489 +1892,7362329876513626,6896136945937747,4103377403391695,0.99306595 +1893,7256776760158758,6891738899431240,4103377403391698,0.99848396 +1894,7195204108937241,6891738899431240,4103377403391698,0.9969261 +1895,7533853690611213,6891738899431240,4103377403391698,0.9972065 +1896,7564640016221342,6891738899431240,4103377403391698,0.99657685 +1897,7177611922879020,6891738899431240,4103377403391698,0.9883731 +1898,7388718155601342,6891738899431240,4103377403391698,0.99382496 +1899,7349135736986081,6891738899431240,4103377403391698,0.99350065 +1900,7349135736986043,6891738899431240,4103377403391698,0.99496704 +1901,7278766992742712,6891738899431240,4103377403391698,0.9952749 +1902,7401912295171626,6891738899431240,4103377403391698,0.9937495 +1903,7485475178942134,6891738899431240,4103377403391698,0.9888735 +1904,7379922062572310,6891738899431556,4103377403391713,0.9985934 +1905,7384320109097162,6891738899431556,4103377403391713,0.9991447 +1906,7459086899850304,6891738899431556,4103377403391713,0.9989427 +1907,7415106434695574,6891738899431556,4103377403391713,0.985247 +1908,7371125969555742,6891738899431556,4103377403391713,0.99904114 +1909,7388718155627429,6891738899431556,4103377403391713,0.9988117 +1910,7525057597591933,6891738899431556,4103377403391713,0.9985644 +1911,7432698620780942,6891738899431556,4103377403391713,0.9982784 +1912,7393116202138334,6891738899431556,4103377403391713,0.9993339 +1913,7463484946359912,6891738899431556,4103377403391713,0.99932015 +1914,7349135736984688,6882942806404166,4103377403391721,0.992357 +1915,7498669318483662,6891738899432009,4103377403391721,0.98970723 +1916,7573436109249661,6891738899432009,4103377403391721,0.99259067 +1917,7547047830177253,6891738899432009,4103377403391721,0.9817285 +1918,7274368946202172,6891738899432009,4103377403391721,0.9776159 +1919,7340339643939147,6891738899432009,4103377403391721,0.9870107 +1920,7173213876375159,6891738899432009,4103377403391721,0.9747575 +1921,7388718155600634,6891738899432009,4103377403391721,0.98759276 +1922,7278766992743798,6891738899432009,4103377403391721,0.9920797 +1923,7489873225461663,6891738899432009,4103377403391721,0.9917762 +1924,7278766992743795,6891738899432009,4103377403391721,0.99098927 +1925,7274368946202168,6891738899432009,4103377403391721,0.97718674 +1926,7173213876375162,6891738899432009,4103377403391721,0.97851884 +1927,7388718155600626,6891738899432009,4103377403391721,0.9896953 +1928,7472281039392040,6891738899432009,4103377403391721,0.99074835 +1929,7278766992743782,6891738899432009,4103377403391721,0.9892721 +1930,7498669318483656,6891738899432009,4103377403391721,0.99097997 +1931,7459086899855577,6891738899432009,4103377403391721,0.9696322 +1932,7406310341679861,6891738899432009,4103377403391721,0.9848573 +1933,7177611922888144,6891738899432009,4103377403391721,0.9933302 +1934,7547047830177285,6891738899432009,4103377403391721,0.9871422 +1935,7327145504412185,6891738899432009,4103377403391721,0.98875904 +1936,7190806062434116,6891738899432009,4103377403391721,0.9847882 +1937,7173213876375166,6891738899432009,4103377403391721,0.9797894 +1941,7459086899850741,6891738899431434,4103377403391721,0.84888613 +1943,7353533783475417,6891738899431434,4103377403391721,0.93801177 +1945,7261174806657262,6891738899431434,4103377403391721,0.90367794 +1946,7529455644109708,6891738899431434,4103377403391721,0.97575706 +1947,7327145504406420,6891738899431434,4103377403391721,0.92068434 +1948,7516261504563588,6891738899431434,4103377403391721,0.94282013 +1949,7182009969406484,6891738899431434,4103377403391721,0.9539472 +1950,7459086899850329,6891738899431434,4103377403391721,0.96451366 +1951,7467882992876074,6891738899431434,4103377403391721,0.9197058 +1952,7353533783497438,6874146713382797,4103377403391721,0.9767045 +1953,7349135736989809,6874146713382797,4103377403391721,0.94378865 +1954,7278766992739145,6874146713382797,4103377403391721,0.98152566 +1955,7503067365011927,6874146713382797,4103377403391721,0.9920859 +1963,7410708388194278,6891738899430710,4103377403391721,0.9958631 +1964,7419504481214899,6891738899430710,4103377403391721,0.99688196 +1965,7406310341674121,6891738899430710,4103377403391721,0.9969168 +1967,7212796294985040,6891738899432942,4103377403391721,0.96538657 +1968,7252378713625140,6891738899432942,4103377403391721,0.9713936 +1969,7243582620598790,6891738899432942,4103377403391721,0.97678137 +1970,7252378713625135,6891738899432942,4103377403391721,0.9713936 +1971,7459086899850651,6891738899432942,4103377403391721,0.98398376 +1972,7252378713625133,6891738899432942,4103377403391721,0.9713936 +1973,7243582620598785,6891738899432942,4103377403391721,0.97678137 +1974,7397514248650015,6891738899431521,4103377403391721,0.9828152 +1975,7406310341674021,6891738899431521,4103377403391721,0.95071226 +1976,7415106434695403,6891738899431521,4103377403391721,0.9464041 +1977,7410708388194178,6891738899431521,4103377403391721,0.9330464 +1978,7204000201982723,6891738899431918,4103377403391721,0.9975229 +1979,7432698620769986,6891738899431918,4103377403391721,0.99603844 +1980,7432698620780895,6891738899431918,4103377403391721,0.988628 +1981,7168815829843996,6891738899431918,4103377403391721,0.9703864 +1983,7507465411521477,6874146713382780,4103377403391721,0.8305039 +1988,7401912295164847,6891738899430480,4103377403391721,0.9907855 +1989,7212796294985033,6891738899430480,4103377403391721,0.9920316 +1990,7401912295164805,6891738899430480,4103377403391721,0.97734135 +1991,7274368946207470,6891738899430480,4103377403391721,0.9917998 +1992,7212796294985036,6891738899430480,4103377403391721,0.9920089 +1993,7467882992890546,6891738899430480,4103377403391721,0.8673959 +1994,7375524016070834,6891738899430480,4103377403391721,0.9934695 +1996,7375524016071007,6874146713382686,4103377403391721,0.91406566 +1998,7388718155625393,6891738899433152,4103377403391721,0.9991648 +1999,7190806062427949,6891738899433152,4103377403391721,0.9996377 +2005,7498669318503793,6874146713382674,4103377403391722,0.8273905 +2006,7177611922878848,6874146713382674,4103377403391722,0.84956753 +2007,7463484946386169,6874146713382674,4103377403391722,0.84956753 +2008,7375524016055537,6891738899431554,4103377403391725,0.99778146 +2009,7283165039231471,6891738899432875,4103377403391728,0.8092789 +2012,7182009969405589,6891738899431685,4103377403391728,0.9498883 +2013,7274368946200947,6891738899431685,4103377403391728,0.99981004 +2014,7569038062740859,6882942806404175,4103377403391733,0.93068075 +2015,7274368946212661,6882942806404175,4103377403391733,0.88709515 +2016,7243582620606627,6882942806404175,4103377403391733,0.88734275 diff --git a/notes.txt b/notes.txt index 982939d2..af5c7d31 100644 --- a/notes.txt +++ b/notes.txt @@ -1,5 +1 @@ -1. Make admin sidebar -2. Make transaction sidebar -3. Test power users 4. Maybe make dark mode persist -5. redirect when not authenticated diff --git a/resources/public/output.css b/resources/public/output.css index daa21bf4..251d5b1f 100644 --- a/resources/public/output.css +++ b/resources/public/output.css @@ -1380,6 +1380,10 @@ input:checked + .toggle-bg { flex: 1 1 0%; } +.flex-none { + flex: none; +} + .flex-shrink { flex-shrink: 1; } @@ -1480,6 +1484,14 @@ input:checked + .toggle-bg { flex-direction: column; } +.flex-wrap { + flex-wrap: wrap; +} + +.content-start { + align-content: flex-start; +} + .items-start { align-items: flex-start; } @@ -1512,6 +1524,10 @@ input:checked + .toggle-bg { justify-content: space-between; } +.justify-items-start { + justify-items: start; +} + .gap-1 { gap: 0.25rem; } @@ -1587,6 +1603,10 @@ input:checked + .toggle-bg { border-color: rgb(243 244 246 / var(--tw-divide-opacity)); } +.justify-self-start { + justify-self: start; +} + .overflow-auto { overflow: auto; } @@ -1797,6 +1817,21 @@ input:checked + .toggle-bg { background-color: rgb(253 246 178 / var(--tw-bg-opacity)); } +.bg-green-200 { + --tw-bg-opacity: 1; + background-color: rgb(201 225 171 / var(--tw-bg-opacity)); +} + +.bg-blue-200 { + --tw-bg-opacity: 1; + background-color: rgb(153 215 247 / var(--tw-bg-opacity)); +} + +.bg-red-200 { + --tw-bg-opacity: 1; + background-color: rgb(255 154 154 / var(--tw-bg-opacity)); +} + .bg-opacity-50 { --tw-bg-opacity: 0.5; } @@ -2346,6 +2381,21 @@ input:checked + .toggle-bg { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } +.hover\:bg-green-300:hover { + --tw-bg-opacity: 1; + background-color: rgb(175 211 130 / var(--tw-bg-opacity)); +} + +.hover\:bg-blue-300:hover { + --tw-bg-opacity: 1; + background-color: rgb(102 196 242 / var(--tw-bg-opacity)); +} + +.hover\:bg-red-300:hover { + --tw-bg-opacity: 1; + background-color: rgb(255 104 104 / var(--tw-bg-opacity)); +} + .hover\:text-blue-600:hover { --tw-text-opacity: 1; color: rgb(0 125 187 / var(--tw-text-opacity)); @@ -2437,6 +2487,21 @@ input:checked + .toggle-bg { --tw-ring-color: rgb(121 181 46 / var(--tw-ring-opacity)); } +.focus\:ring-green-200:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(201 225 171 / var(--tw-ring-opacity)); +} + +.focus\:ring-blue-200:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(153 215 247 / var(--tw-ring-opacity)); +} + +.focus\:ring-red-200:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(255 154 154 / var(--tw-ring-opacity)); +} + .group:hover .group-hover\:scale-110 { --tw-scale-x: 1.1; --tw-scale-y: 1.1; @@ -2549,6 +2614,26 @@ input:checked + .toggle-bg { background-color: rgb(99 49 18 / var(--tw-bg-opacity)); } +:is(.dark .dark\:bg-green-500) { + --tw-bg-opacity: 1; + background-color: rgb(121 181 46 / var(--tw-bg-opacity)); +} + +:is(.dark .dark\:bg-green-700) { + --tw-bg-opacity: 1; + background-color: rgb(73 109 28 / var(--tw-bg-opacity)); +} + +:is(.dark .dark\:bg-blue-700) { + --tw-bg-opacity: 1; + background-color: rgb(0 94 140 / var(--tw-bg-opacity)); +} + +:is(.dark .dark\:bg-red-700) { + --tw-bg-opacity: 1; + background-color: rgb(153 2 2 / var(--tw-bg-opacity)); +} + :is(.dark .dark\:bg-opacity-80) { --tw-bg-opacity: 0.8; } @@ -2662,6 +2747,16 @@ input:checked + .toggle-bg { background-color: rgb(73 109 28 / var(--tw-bg-opacity)); } +:is(.dark .dark\:hover\:bg-blue-600:hover) { + --tw-bg-opacity: 1; + background-color: rgb(0 125 187 / var(--tw-bg-opacity)); +} + +:is(.dark .dark\:hover\:bg-red-600:hover) { + --tw-bg-opacity: 1; + background-color: rgb(204 2 2 / var(--tw-bg-opacity)); +} + :is(.dark .dark\:hover\:text-blue-500:hover) { --tw-text-opacity: 1; color: rgb(0 156 234 / var(--tw-text-opacity)); diff --git a/scratch-sessions/build_ml.clj b/scratch-sessions/build_ml.clj index 6b39cec7..e74fdc1e 100644 --- a/scratch-sessions/build_ml.clj +++ b/scratch-sessions/build_ml.clj @@ -79,7 +79,7 @@ :quote? (constantly true)))) (defn write-inference [] - (with-open [f (io/writer "/mnt/data/dev2/ml-test/input/inference.csv")] + (with-open [f (io/writer "~/dev/transaction-training/input/inference.csv")] (csv/write-csv f (into [["transaction" "client" "bank" "bank_type" "description" "date" "amount"]] (->> diff --git a/scratch-sessions/ingest_ml.clj b/scratch-sessions/ingest_ml.clj index d8247bed..07001b8a 100644 --- a/scratch-sessions/ingest_ml.clj +++ b/scratch-sessions/ingest_ml.clj @@ -1,8 +1,8 @@ (ns ingest-ml - (:require [datomic.client.api :as dc] + (:require [datomic.api :as dc] [clojure.java.io :as io] [clojure.data.csv :as csv] - [iol-ion.tx :refer [upsert-entity]] + #_[iol-ion.tx :refer [upsert-entity]] [auto-ap.datomic :refer [conn]])) (println "hi") @@ -13,37 +13,60 @@ (defn reset-inference [] - (doseq [p (->> - (dc/q '[:find ?t - :where [?t :transaction/recommended-account]] - (dc/db conn)) - (map (fn [[t]] - `(upsert-entity - ~{:db/id t - :transaction/recommended-account nil - :tranasction/vendor-confidence nil - :transaction/account-confidence nil - :transaction/recommended-vendor nil}))) - - (partition-all 100))] - (dc/transact conn {:tx-data p}))) + (doseq [p (->> + (dc/q '[:find ?t + :where [?t :transaction/recommended-account]] + (dc/db conn)) + (map (fn [[t]] + [:upsert-entity {:db/id t + :transaction/recommended-account nil + :tranasction/vendor-confidence nil + :transaction/account-confidence nil + :transaction/recommended-vendor nil}])) + + (partition-all 100))] + @(dc/transact conn p))) + +(defn slurp-csv [c] + (with-open [s (io/reader c)] + (into [] (csv/read-csv s)))) (defn read-inference [] - (with-open [reader (io/reader "/mnt/data/dev2/ml-test/inference-outcome.csv")] - (->> (csv/read-csv reader) - (into [] - (comp - (drop 1) - (map (fn [[_ transaction best-vendor best-account account-confidence]] - {:db/id (Long/parseLong transaction) - :transaction/recommended-account (Long/parseLong best-account) - :transaction/account-confidence (Double/parseDouble account-confidence) - :transaction/recommended-vendor (Long/parseLong best-vendor)} - ))))))) + (let [numeric-code->account (into {} (dc/q '[:find ?nc ?a + :in $ + :where [?a :account/numeric-code ?nc]] + (dc/db conn))) + inference-account->account (into {} + (comp + (drop 1) + (map (fn [[a n]] + [(Long/parseLong a) (numeric-code->account (Long/parseLong n))]))) + (slurp-csv "/home/notid/dev/transaction-training/input/accounts.csv")) + vendor-name->vendor (into {} (dc/q '[:find ?vn ?v + :in $ + :where [?v :vendor/name ?vn]] + (dc/db conn))) + inference-vendor->vendor (into {} + (comp + (drop 1) + (map (fn [[a n]] + [(Long/parseLong a) (vendor-name->vendor (Long/parseLong n))]))) + (slurp-csv "/home/notid/dev/transaction-training/input/vendors.csv"))] + inference-vendor->vendor + #_(with-open [reader (io/reader "/home/notid/dev/transaction-training/inference-outcome.csv")] + (->> (csv/read-csv reader) + (into [] + (comp + (drop 1) + (map (fn [[_ transaction best-vendor best-account account-confidence]] + {:db/id (Long/parseLong transaction) + :transaction/recommended-account (Long/parseLong best-account) + :transaction/account-confidence (Double/parseDouble account-confidence) + :transaction/recommended-vendor (Long/parseLong best-vendor)})))))))) (defn apply-inference [inference] (doseq [p (->> inference (partition-all 100))] - (dc/transact conn {:tx-data p}))) + @(dc/transact conn p))) (defn check-applied-inference [] @@ -69,3 +92,22 @@ (dc/db conn)) (shuffle) (take 10)))) + + +(defn random-infer [] + (let [n (rand-int 1000) + vs (into [] (map first (dc/q '[:find ?v :in $ :where [?v :vendor/name]] (dc/db conn)))) + as (into [] (map first (dc/q '[:find ?v :in $ :where [?v :account/name]] (dc/db conn))))] + (->> + (dc/qseq {:query '[:find ?t + :where + [?t :transaction/approval-status :transaction-approval-status/unapproved] + (not [?t :transaction/vendor])] + :args [(dc/db conn)]}) + (map first) + (take n) + (map (fn [t] + {:db/id t + :transaction/recommended-account (rand-nth as) + :transaction/account-confidence (double (/ (double (rand-int 100)) 100.0)) + :transaction/recommended-vendor (rand-nth vs)}))))) diff --git a/scratch-sessions/pnl-export.repl b/scratch-sessions/pnl-export.repl new file mode 100644 index 00000000..ca27b7a8 --- /dev/null +++ b/scratch-sessions/pnl-export.repl @@ -0,0 +1,83 @@ +;; This buffer is for Clojure experiments and evaluation. + +;; Press C-j to evaluate the last expression. + +;; You can also press C-u C-j to evaluate the expression and pretty-print its result. +(dc/pull (dc/db conn) [:db/id] [:client/code "NGAK"]) + +(user/init-repl) + +(require '[auto-ap.datomic :refer [pull-attr pull-many]]) + +(csv/write-csv *out* + (let [clients (pull-many (dc/db conn) '[:db/id :client/code :client/locations] [[:client/code "NGAK"] [:client/code "NGOP"] #_#_[:client/code "NGRV"] [:client/code "NGE1"]]) + account->numeric-code (into {} (seq (dc/q '[:find ?i ?n + :in $ [?a ...] + :where [?i ?a ?n]] + (dc/db conn) [:account/numeric-code :bank-account/numeric-code]))) + account->name (let [lookup (into {} (seq (dc/q '[:find ?i ?n + :in $ + :where [?i :account/name ?n]] + (dc/db conn))))] + (fn [x] + (or (lookup x) "Bank Account"))) + account->location (into {} (seq (dc/q '[:find ?i ?l + :in $ + :where [?i :account/location ?l]] + (dc/db conn)))) + used-accounts (into #{} (for [c clients + d (dc/index-range (dc/db conn) + :journal-entry-line/client+account+location+date + [(:db/id c)] + [(inc (:db/id c))]) + :let [[_ account] (:v d)]] + account))] + (for [client clients + :let [all-entries (->> (dc/index-pull (dc/db conn) + {:index :avet + :selector [:db/id :journal-entry-line/running-balance :journal-entry-line/client+account+location+date] + :start [:journal-entry-line/client+account+location+date [(:db/id client)]] + :reverse false + :limit 1}) + (take-while (fn [curr] + (= (first (:journal-entry-line/client+account+location+date curr)) + (:db/id client))))) + account-lookup (->> all-entries + (reduce + (fn [acc curr] + (let [[client account location date] (:journal-entry-line/client+account+location+date curr) + numeric-code (account->numeric-code account)] + (assoc acc (format "%d-%d-%s-%s" client numeric-code location (atime/unparse-local (clj-time.coerce/to-date-time date) atime/iso-date)) (:journal-entry-line/running-balance curr)))) + (sorted-map)))] + a (sort-by account->numeric-code used-accounts) + :let [numeric-code (account->numeric-code a)] + l (or (account->location a) (:client/locations client)) + delta (range -60 0) + :let [date (t/plus (c/to-date-time #inst "2023-06-12T08:00:00") (t/days delta)) + date-str (atime/unparse-local date atime/iso-date)] + :when (and numeric-code (>= numeric-code 40000))] + (conj [(:client/code client) l numeric-code (account->name a) date-str] (with-precision 2 + (double (.setScale (bigdec (or + (some->> (subseq account-lookup >= (format "%d-%d-%s-%s" (:db/id client) numeric-code l "2000-01-01") <= (format "%d-%d-%s-%s" (:db/id client) numeric-code l date-str)) + last + last) + 0.0)) + 2 java.math.RoundingMode/HALF_UP)))))) + ) + +(dc/q '[:find (count ?x) + :where [?x :journal-entry-line/dirty true]] + (dc/db conn)) + +(let [clients (map first + (dc/q '[:find (pull ?c [:client/code :db/id]) + :where [?c :client/code]] + (dc/db conn)))] + (doseq [[c i] (map vector clients (range))] + (let [db (dc/db conn) + accounts-needing-rebuild (auto-ap.ledger/accounts-needing-rebuild db (:db/id c))] + (when (seq accounts-needing-rebuild) + (println "C" c "needs" (count accounts-needing-rebuild) "built") + #_(refresh-running-balance-accounts accounts-needing-rebuild clients c i db) + #_(mu/log ::client-completed))))) +, diff --git a/src/clj/auto_ap/parse/templates.clj b/src/clj/auto_ap/parse/templates.clj index 7e5c93e1..18693745 100644 --- a/src/clj/auto_ap/parse/templates.clj +++ b/src/clj/auto_ap/parse/templates.clj @@ -605,7 +605,7 @@ :keywords [#"reelproduce.com"] :extract {:date #"([0-9]+/[0-9]+/[0-9]+)" :customer-identifier #"Bill To(?:.*?)\n\n\s+(.*?)\s{2,}" - :invoice-number #"Invoice #\n.*?([\d\-]+)\n" + :invoice-number #"Invoice #\n.*?\n.*?([\d\-]+)\n" :total #"Total\s*\n\s+\$([\d\-,]+\.\d{2,2}+)"} :parser {:date [:clj-time "MM/dd/yy"] :total [:trim-commas-and-negate nil]}}]) diff --git a/src/clj/auto_ap/routes/auth.clj b/src/clj/auto_ap/routes/auth.clj index 50698bf9..d6e4e2b9 100644 --- a/src/clj/auto_ap/routes/auth.clj +++ b/src/clj/auto_ap/routes/auth.clj @@ -20,18 +20,18 @@ (:jwt-secret env) {:alg :hs512})) -(defn oauth [{{:strs [code]} :query-params {:strs [host]} :headers}] +(defn oauth [{{:strs [code state]} :query-params {:strs [host]} :headers :as request}] (try (let [auth (-> "https://accounts.google.com/o/oauth2/token" - (http/post - {:form-params {"client_id" google-client-id - "client_secret" google-client-secret - "code" code - "redirect_uri" (str (:scheme env) "://" host "/api/oauth") - "grant_type" "authorization_code"} - :as :json}) + (http/post + {:form-params {"client_id" google-client-id + "client_secret" google-client-secret + "code" code + "redirect_uri" (str (:scheme env) "://" host "/api/oauth") + "grant_type" "authorization_code"} + :as :json}) :body) - + token (:access_token auth) profile (-> (http/get "https://www.googleapis.com/oauth2/v1/userinfo" {:headers {"Authorization" (str "Bearer " token)} :as :json}) @@ -54,19 +54,18 @@ _ (mu/log ::logged-in-as :auth auth)] ;; TODO - these namespaces are not being transmitted/deserialized properly - + (if (and token user) (let [jwt (jwt/sign auth (:jwt-secret env) {:alg :hs512})] - {:status 301 - :headers {"Location" (str "/?jwt=" jwt)} + :headers {"Location" (str (or (not-empty state) "/") "?jwt=" jwt)} :session {:identity (dissoc auth :exp)}}) {:status 401 :body "Couldn't authenticate"})) (catch Exception e - (log/warn e ) + (log/warn e) {:status 401 :body (str "Couldn't authenticate " (.toString e))}))) diff --git a/src/clj/auto_ap/routes/utils.clj b/src/clj/auto_ap/routes/utils.clj index ee803775..f8747c9d 100644 --- a/src/clj/auto_ap/routes/utils.clj +++ b/src/clj/auto_ap/routes/utils.clj @@ -8,30 +8,33 @@ (defn wrap-secure [handler] (fn [request] (cond (authenticated? request) - (handler request) + (handler request) + (get (:headers request) "hx-request") + {:status 401 + :headers {"hx-redirect" (str "/login?" + (url/map->query {"redirect-to" (:uri request)}))}} - (get (:headers request) "hx-request") - {:status 401 - :headers {"hx-redirect" "/login"}} - - :else - {:status 302 - :headers {"Location" "/login" }}))) + :else + {:status 302 + :headers {"Location" (str "/login?" + (url/map->query {"redirect-to" (:uri request)}))}}))) (defn wrap-admin [handler] (fn [request] (if (is-admin? (:identity request)) (handler request) - (do + (do (alog/warn ::unauthenticated) {:status 302 - :headers {"Location" "/login"}})))) + :headers {"Location" (str "/login?" + (url/map->query {"redirect-to" (:uri request)}))}})))) (defn wrap-client-redirect-unauthenticated [handler] (fn [request] (let [response (handler request)] (if (= 401 (get response :status)) - (-> response - (assoc-in [:headers "hx-redirect"] "/login/")) + (-> response + (assoc-in [:headers "hx-redirect"] (str "/login?" + (url/map->query {"redirect-to" (:uri request)})))) response)))) diff --git a/src/clj/auto_ap/ssr/company_dropdown.clj b/src/clj/auto_ap/ssr/company_dropdown.clj index 43d71702..5b3a31a7 100644 --- a/src/clj/auto_ap/ssr/company_dropdown.clj +++ b/src/clj/auto_ap/ssr/company_dropdown.clj @@ -126,16 +126,17 @@ function initCompanyDropdown() { (defn active-client [{:keys [identity params] :as request}] (let [client-id (some-> (or (:search-client params) (get params "search-client")) not-empty Long/parseLong)] + (println (format "HERE CLIENT ID '%s'" client-id)) (when client-id (assert-can-see-client identity client-id)) (let [new-session (assoc (:session request) :client (when client-id (dc/pull (dc/db conn) [:db/id :client/name :client/code] client-id)))] - (assoc - (html-response - (dropdown {:client (:client new-session) - :identity identity})) - :session - new-session - :headers - {"hx-trigger" "clientSelected"})))) + (assoc + (html-response + (dropdown {:client (:client new-session) + :identity identity})) + :session + new-session + :headers + {"hx-trigger" "clientSelected"})))) diff --git a/src/clj/auto_ap/ssr/components/aside.clj b/src/clj/auto_ap/ssr/components/aside.clj index 09505be4..5a885d99 100644 --- a/src/clj/auto_ap/ssr/components/aside.clj +++ b/src/clj/auto_ap/ssr/components/aside.clj @@ -150,69 +150,90 @@ (defn main-aside-nav- [] [:ul {:class "space-y-2"} - [:li - (menu-button- {:icon svg/pie} - "Dashboard")] - [:li - (menu-button- {:aria-controls "dropdown-invoices", - :data-collapse-toggle "dropdown-invoices" - :icon svg/accounting-invoice-mail} - "Invoices") - (sub-menu- {:id "dropdown-invoices"} - (menu-button- {:href "http://google.com"} - "All") - (menu-button- {:href "http://google.com"} - "Paid") - (menu-button- {:href "http://google.com"} - "Unpaid") - (menu-button- {:href "http://google.com"} - "Voided")) - ] - [:li - (menu-button- {:aria-controls "dropdown-sales", - :data-collapse-toggle "dropdown-sales" - :icon svg/receipt-register-1} - "Sales") - (sub-menu- {:id "dropdown-sales"} - (menu-button- {:href "Sales"} "Sales") - (menu-button- {:href "Sales"} "Expected Deposits") - (menu-button- {:href "Sales"} "Cash Shifts") - (menu-button- {:href "Sales"} "Tenders"))] - [:li - (menu-button- {:aria-controls "dropdown-payments" - :data-collapse-toggle "dropdown-payments" - :icon svg/payments} - "Payments") - (sub-menu- {:id "dropdown-payments"} - (menu-button- {:href "Sales"} "All") - (menu-button- {:href "Sales"} "Pending") - (menu-button- {:href "Sales"} "Cleared") - (menu-button- {:href "Sales"} "Voided"))] - - [:li - (menu-button- {:aria-controls "dropdown-transactions" - :data-collapse-toggle "dropdown-transactions" - :icon svg/bank} - "Transactions") - - (sub-menu- {:id "dropdown-transactions"} - (menu-button- {:href "Sales"} "All") - (menu-button- {:href "Sales"} "Unapproved") - (menu-button- {:href "Sales"} "Client Review") - (menu-button- {:href "Sales"} "Approved") - (menu-button- {:href "Sales"} "Insights"))] - [:li - (menu-button- {:aria-controls "dropdown-ledger" - :data-collapse-toggle "dropdown-ledger" - :icon svg/receipt} - "Ledger") - (sub-menu- {:id "dropdown-ledger"} - (menu-button- {:href "Sales"} "Register") - (menu-button- {:href "Sales"} "Profit & Loss") - (menu-button- {:href "Sales"} "Profit & Loss Detail") - (menu-button- {:href "Sales"} "Cash Flows") - (menu-button- {:href "Sales"} "Balance Sheet") - (menu-button- {:href "Sales"} "External Ledger Import"))]]) + [:li + (menu-button- {:icon svg/pie + :href "/"} + "Dashboard")] + [:li + (menu-button- {:aria-controls "dropdown-invoices", + :data-collapse-toggle "dropdown-invoices" + :icon svg/accounting-invoice-mail} + "Invoices") + (sub-menu- {:id "dropdown-invoices"} + (menu-button- {:href (bidi/path-for client-routes/routes + :invoices)} + "All") + (menu-button- {:href (bidi/path-for client-routes/routes + :paid-invoices)} + "Paid") + (menu-button- {:href (bidi/path-for client-routes/routes + :unpaid-invoices)} + "Unpaid") + (menu-button- {:href (bidi/path-for client-routes/routes + :voided-invoices)} + "Voided"))] + [:li + (menu-button- {:aria-controls "dropdown-sales", + :data-collapse-toggle "dropdown-sales" + :icon svg/receipt-register-1} + "Sales") + (sub-menu- {:id "dropdown-sales"} + (menu-button- {:href (bidi/path-for client-routes/routes + :sales-orders)} "Sales") + (menu-button- {:href (bidi/path-for client-routes/routes + :expected-deposits)} "Expected Deposits") + #_(menu-button- {:href "Sales"} "Cash Shifts") + #_(menu-button- {:href "Sales"} "Tenders"))] + [:li + (menu-button- {:aria-controls "dropdown-payments" + :data-collapse-toggle "dropdown-payments" + :icon svg/payments} + "Payments") + (sub-menu- {:id "dropdown-payments"} + (menu-button- {:href (bidi/path-for client-routes/routes + :payments)} "All") + (menu-button- {:href (bidi/path-for client-routes/routes + :payments)} "Pending") + (menu-button- {:href (bidi/path-for client-routes/routes + :payments)} "Cleared") + (menu-button- {:href (bidi/path-for client-routes/routes + :payments)} "Voided"))] + + [:li + (menu-button- {:aria-controls "dropdown-transactions" + :data-collapse-toggle "dropdown-transactions" + :icon svg/bank} + "Transactions") + + (sub-menu- {:id "dropdown-transactions"} + (menu-button- {:href (bidi/path-for client-routes/routes + :transactions)} "All") + (menu-button- {:href (bidi/path-for client-routes/routes + :unapproved-transactions)} "Unapproved") + (menu-button- {:href (bidi/path-for client-routes/routes + :requires-feedback-transactions)} "Client Review") + (menu-button- {:href (bidi/path-for client-routes/routes + :approved-transactions)} "Approved") + (menu-button- {:href (bidi/path-for ssr-routes/only-routes + :transaction-insights)} "Insights"))] + [:li + (menu-button- {:aria-controls "dropdown-ledger" + :data-collapse-toggle "dropdown-ledger" + :icon svg/receipt} + "Ledger") + (sub-menu- {:id "dropdown-ledger"} + (menu-button- {:href (bidi/path-for client-routes/routes + :ledger)} "Register") + (menu-button- {:href (bidi/path-for client-routes/routes + :profit-and-loss)} "Profit & Loss") + (menu-button- {:href (bidi/path-for client-routes/routes + :profit-and-loss-detail)} "Profit & Loss Detail") + (menu-button- {:href (bidi/path-for client-routes/routes + :cash-flows)} "Cash Flows") + (menu-button- {:href (bidi/path-for client-routes/routes + :balance-sheet)} "Balance Sheet") + (menu-button- {:href (bidi/path-for client-routes/routes + :external-import-ledger)} "External Ledger Import"))]]) (defn company-aside-nav- [] @@ -301,3 +322,5 @@ (menu-button- {:href (bidi/path-for ssr-routes/only-routes :admin-ezcater-xls) :hx-boost "true"} "EZCater XLS Import"))]]) + + diff --git a/src/clj/auto_ap/ssr/components/buttons.clj b/src/clj/auto_ap/ssr/components/buttons.clj index 40198207..4a7f9762 100644 --- a/src/clj/auto_ap/ssr/components/buttons.clj +++ b/src/clj/auto_ap/ssr/components/buttons.clj @@ -16,11 +16,22 @@ (into [:div.htmx-indicator-hidden.inline-flex.gap-2.items-center.justify-center ] children)]) (defn icon-button- [params & children] - (into - [:button (update params :class str " inline-flex items-center justify-center bg-white dark:bg-gray-600 items-center p-3 text-sm font-medium border border-gray-300 dark:border-gray-700 text-center text-gray-500 hover:text-gray-800 rounded-lg dark:text-gray-400 dark:hover:text-gray-100") - [:div.htmx-indicator.flex.items-center - (svg/spinner {:class "inline w-4 h-4 text-white"})] - [:div.htmx-indicator-hidden.inline-flex.gap-2.items-center.justify-center (into [:div.h-4.w-4] children)]])) + (into + [:button + + (update params :class + #(cond-> % + true (str " inline-flex items-center justify-center items-center p-3 text-sm font-medium border border-gray-300 dark:border-gray-700 text-center rounded-lg ") + (= :secondary (:color params)) (str " bg-blue-500 hover:bg-blue-600 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700") + (= :primary (:color params)) (str " bg-green-500 hover:bg-green-600 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 ") + (= :primary-light (:color params)) (str " bg-green-200 hover:bg-green-300 focus:ring-green-200 dark:bg-green-700 dark:hover:bg-green-600 text-gray-800 dark:text-gray-200") + (= :secondary-light (:color params)) (str " bg-blue-200 hover:bg-blue-300 focus:ring-blue-200 dark:bg-blue-700 dark:hover:bg-blue-600 text-gray-800 dark:text-gray-200") + (= :danger-light (:color params)) (str " bg-red-200 hover:bg-red-300 focus:ring-red-200 dark:bg-red-700 dark:hover:bg-red-600 text-gray-800 dark:text-gray-200") + (nil? (:color params)) + (str " bg-white dark:bg-gray-600 border-gray-300 dark:border-gray-700 text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-100"))) + [:div.htmx-indicator.flex.items-center + (svg/spinner {:class "inline w-4 h-4 text-white"})] + [:div.htmx-indicator-hidden.inline-flex.gap-2.items-center.justify-center (into [:div.h-4.w-4] children)]])) (defn a-icon-button- [params & children] (into diff --git a/src/clj/auto_ap/ssr/components/data_grid.clj b/src/clj/auto_ap/ssr/components/data_grid.clj index 5438036f..5625818e 100644 --- a/src/clj/auto_ap/ssr/components/data_grid.clj +++ b/src/clj/auto_ap/ssr/components/data_grid.clj @@ -8,7 +8,8 @@ (defn header- [params & rest] (into [:th.px-4.py-3 {:scope "col" :class (:class params) - "_" (hiccup/raw (when (:sort-key params ) (format "on click trigger sorted(key:\"%s\")", (:sort-key params))))}] + "_" (hiccup/raw (when (:sort-key params ) (format "on click trigger sorted(key:\"%s\")", (:sort-key params)))) + :style (:style params)}] (if (:sort-key params) [(into [:a {:href "#"} ] rest)] rest))) @@ -23,7 +24,7 @@ :class str " border-b dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700")] rest)) (defn cell- [params & rest] - (into [:td.px-4.py-2 {:class (:class params)}] rest)) + (into [:td.px-4.py-2 params ] rest)) (defn right-stack-cell- [params & rest] (cell- params (into [:div.flex.flex-row-reverse.items-center.justify-between diff --git a/src/clj/auto_ap/ssr/components/dialog.clj b/src/clj/auto_ap/ssr/components/dialog.clj index 8a8bacae..6ce3b034 100644 --- a/src/clj/auto_ap/ssr/components/dialog.clj +++ b/src/clj/auto_ap/ssr/components/dialog.clj @@ -35,7 +35,7 @@ curModal.hide(); ]]) (defn modal-card- [params header content footer] - [:div#modal-card + [:div#modal-card params [:div {:class "relative bg-white rounded-lg shadow dark:bg-gray-700 dark:text-white fade-in slide-up duration-300 transition-all modal-content"} [:div {:class "flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600"} header] [:div {:class "p-6 space-y-6"} diff --git a/src/clj/auto_ap/ssr/components/navbar.clj b/src/clj/auto_ap/ssr/components/navbar.clj index 5c044b3a..692b4cc8 100644 --- a/src/clj/auto_ap/ssr/components/navbar.clj +++ b/src/clj/auto_ap/ssr/components/navbar.clj @@ -1,50 +1,45 @@ (ns auto-ap.ssr.components.navbar (:require - [auto-ap.datomic :refer [conn pull-attr]] - [auto-ap.client-routes :as client-routes2] + [auto-ap.graphql.utils :refer [is-admin?]] [auto-ap.ssr-routes :as ssr-routes] [auto-ap.ssr.company-dropdown :as cd] [auto-ap.ssr.components.buttons :refer [icon-button-]] + [auto-ap.ssr.components.user-dropdown :as user-dropdown] [auto-ap.ssr.svg :as svg] - [bidi.bidi :as bidi] - [datomic.api :as dc] - [hiccup2.core :as hiccup] - [auto-ap.ssr.components.user-dropdown :as user-dropdown])) + [bidi.bidi :as bidi])) (defn navbar- [{:keys [client identity]}] [:nav {:class "fixed z-30 w-full bg-white border-b border-gray-200 dark:bg-gray-800 dark:border-gray-700"} [:div {:class "px-3 py-3 lg:px-5 lg:pl-3"} - [:div {:class "flex items-center justify-between"} - [:div {:class "flex items-center justify-start"} - [:button { :aria-controls "left-nav", :id "left-nav-toggle" :type "button", :class "inline-flex items-center p-2 mt-2 ml-2 mr-2 text-sm text-gray-500 rounded-lg hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:focus:ring-gray-600"} - [:span {:class "sr-only"} "Open sidebar"] - [:svg {:class "w-6 h-6", :aria-hidden "true", :fill "currentColor", :viewbox "0 0 20 20", :xmlns "http://www.w3.org/2000/svg"} - [:path {:clip-rule "evenodd", :fill-rule "evenodd", :d "M2 4.75A.75.75 0 012.75 4h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 4.75zm0 10.5a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5h-7.5a.75.75 0 01-.75-.75zM2 10a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 10z"}]]] - [:a {:href "/" :class "flex ml-2 md:mr-24"} - [:img {:src "/img/logo-big2.png", :class "h-10 mr-16", :alt "Integreat logo"}] - ] - ] - - [:div {:class "flex items-center gap-4"} - [:button.mt-1.lg:w-96.relative.hidden.lg:block {:class "bg-gray-50 hover:bg-gray-200 dark:hover:bg-gray-700 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-500 focus:border-primary-500 w-full pl-10 py-4 pr-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500 gap-4 " - :hx-get (bidi/path-for ssr-routes/only-routes - :search) - :hx-target "#modal-holder" - :hx-swap "outerHTML"} - [:div {:class "absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none text-gray-500"} - [:div.w-4.h-4 svg/search] - [:span.ml-2 "Search"]]] - [:div {:class "hidden mr-3 -mb-1 sm:block"} - [:span]] - (icon-button- - {:id "toggleSidebarMobileSearch", :type "button", :class "p-2 text-gray-500 rounded-lg lg:hidden hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white" - :hx-get (bidi/path-for ssr-routes/only-routes - :search) - :hx-target "#modal-holder" - :hx-swap "outerHTML"} - svg/search) - (cd/dropdown {:client client :identity identity}) - - - (user-dropdown/dropdown {:identity identity}) - ]]]]) + [:div {:class "flex items-center justify-between"} + [:div {:class "flex items-center justify-start"} + [:button {:aria-controls "left-nav", :id "left-nav-toggle" :type "button", :class "inline-flex items-center p-2 mt-2 ml-2 mr-2 text-sm text-gray-500 rounded-lg hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:focus:ring-gray-600"} + [:span {:class "sr-only"} "Open sidebar"] + [:svg {:class "w-6 h-6", :aria-hidden "true", :fill "currentColor", :viewbox "0 0 20 20", :xmlns "http://www.w3.org/2000/svg"} + [:path {:clip-rule "evenodd", :fill-rule "evenodd", :d "M2 4.75A.75.75 0 012.75 4h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 4.75zm0 10.5a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5h-7.5a.75.75 0 01-.75-.75zM2 10a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 10z"}]]] + [:a {:href "/" :class "flex ml-2 md:mr-24"} + [:img {:src "/img/logo-big2.png", :class "h-10 mr-16", :alt "Integreat logo"}]]] + + [:div {:class "flex items-center gap-4"} + + (when (is-admin? identity) + [:button.mt-1.lg:w-96.relative.hidden.lg:block {:class "bg-gray-50 hover:bg-gray-200 dark:hover:bg-gray-700 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-500 focus:border-primary-500 w-full pl-10 py-4 pr-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500 gap-4 " + :hx-get (bidi/path-for ssr-routes/only-routes + :search) + :hx-target "#modal-holder" + :hx-swap "outerHTML"} + [:div {:class "absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none text-gray-500"} + [:div.w-4.h-4 svg/search] + [:span.ml-2 "Search"]]]) + [:div {:class "hidden mr-3 -mb-1 sm:block"} + [:span]] + (icon-button- + {:id "toggleSidebarMobileSearch", :type "button", :class "p-2 text-gray-500 rounded-lg lg:hidden hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white" + :hx-get (bidi/path-for ssr-routes/only-routes + :search) + :hx-target "#modal-holder" + :hx-swap "outerHTML"} + svg/search) + (cd/dropdown {:client client :identity identity}) + + (user-dropdown/dropdown {:identity identity})]]]]) diff --git a/src/clj/auto_ap/ssr/core.clj b/src/clj/auto_ap/ssr/core.clj index 0dfe92e2..171b4965 100644 --- a/src/clj/auto_ap/ssr/core.clj +++ b/src/clj/auto_ap/ssr/core.clj @@ -20,7 +20,7 @@ :admin-history (wrap-client-redirect-unauthenticated (wrap-secure (wrap-admin history/page))) :admin-history-search (wrap-client-redirect-unauthenticated (wrap-secure (wrap-admin history/page))) :admin-history-inspect (wrap-client-redirect-unauthenticated (wrap-secure (wrap-admin history/inspect))) - :active-client (wrap-client-redirect-unauthenticated (wrap-secure (wrap-admin company-dropdown/active-client))) + :active-client (wrap-client-redirect-unauthenticated (wrap-secure (wrap-secure company-dropdown/active-client))) :company-dropdown-search-results (wrap-client-redirect-unauthenticated (wrap-secure company-dropdown/dropdown-search-results)) :company (wrap-client-redirect-unauthenticated (wrap-secure company/page)) @@ -35,11 +35,11 @@ :company-reports (wrap-client-redirect-unauthenticated (wrap-secure company-reports/page)) :company-reports-table (wrap-client-redirect-unauthenticated (wrap-secure company-reports/table)) :company-reports-delete (wrap-client-redirect-unauthenticated (wrap-admin company-reports/delete-report)) - :transaction-insights (wrap-client-redirect-unauthenticated (wrap-secure insights/page)) - :transaction-insight-table (wrap-client-redirect-unauthenticated (wrap-secure insights/insight-table)) - :transaction-insight-rows (wrap-client-redirect-unauthenticated (wrap-secure insights/transaction-rows)) - :transaction-insight-approve (wrap-client-redirect-unauthenticated (wrap-secure insights/approve)) - :transaction-insight-explain (wrap-client-redirect-unauthenticated (wrap-secure insights/explain)) + :transaction-insights (wrap-client-redirect-unauthenticated (wrap-admin insights/page)) + :transaction-insight-table (wrap-client-redirect-unauthenticated (wrap-admin insights/insight-table)) + :transaction-insight-rows (wrap-client-redirect-unauthenticated (wrap-admin insights/transaction-rows)) + :transaction-insight-approve (wrap-client-redirect-unauthenticated (wrap-admin insights/approve)) + :transaction-insight-explain (wrap-client-redirect-unauthenticated (wrap-admin insights/explain)) :admin-ezcater-xls (wrap-client-redirect-unauthenticated (wrap-admin ezcater-xls/page)) :search (wrap-client-redirect-unauthenticated (wrap-secure search/dialog-contents))}) diff --git a/src/clj/auto_ap/ssr/svg.clj b/src/clj/auto_ap/ssr/svg.clj index 74cc0c49..385bbc1b 100644 --- a/src/clj/auto_ap/ssr/svg.clj +++ b/src/clj/auto_ap/ssr/svg.clj @@ -419,3 +419,15 @@ [:path {:d "M22.629,4.572A6.22,6.22,0,0,1,23,6.5v16a1,1,0,0,1-1,1H2a1,1,0,0,1-1-1V6.5a6.22,6.22,0,0,1,.371-1.928L2.629,1.428A1.6,1.6,0,0,1,4,.5H20a1.6,1.6,0,0,1,1.371.928Z", :fill "none", :stroke "currentColor", :stroke-linecap "round", :stroke-linejoin "round"}] [:line {:x1 "12", :y1 "6", :x2 "12", :y2 "0.5", :fill "none", :stroke "currentColor", :stroke-linecap "round", :stroke-linejoin "round"}] [:line {:x1 "1.034", :y1 "6", :x2 "22.966", :y2 "6", :fill "none", :stroke "currentColor", :stroke-linecap "round", :stroke-linejoin "round"}]]) + +(def thumbs-up + [:svg {:xmlns "http://www.w3.org/2000/svg", :viewbox "0 0 24 24"} + [:defs] + [:title "like"] + [:path {:d "M19.5,16.065h0a1.5,1.5,0,0,1,0,3h-1a1.5,1.5,0,0,1,0,3H12c-4,0-3-2-11-2v-9H4a7.949,7.949,0,0,0,7.5-8c0-1.581,3-1.781,3,1.219a31.593,31.593,0,0,1-1,5.781h8a1.5,1.5,0,0,1,0,3h-1a1.5,1.5,0,0,1,0,3h-1", :fill "none", :stroke "currentColor", :stroke-linecap "round", :stroke-linejoin "round"}]]) + +(def thumbs-down + [:svg {:xmlns "http://www.w3.org/2000/svg", :viewbox "0 0 24 24"} + [:defs] + [:title "dislike"] + [:path {:d "M4.5,8h0a1.5,1.5,0,0,1,0-3h1a1.5,1.5,0,0,1,0-3H12c4,0,3,1.87,11,1.87V13H20a7.811,7.811,0,0,0-7.5,7.856c0,1.582-3,1.813-3-1.187A29.774,29.774,0,0,1,10.5,14h-8a1.5,1.5,0,0,1,0-3h1a1.5,1.5,0,0,1,0-3h1", :fill "none", :stroke "currentColor", :stroke-linecap "round", :stroke-linejoin "round"}]]) diff --git a/src/clj/auto_ap/ssr/transaction/insights.clj b/src/clj/auto_ap/ssr/transaction/insights.clj index 9583a5bd..4c716ec1 100644 --- a/src/clj/auto_ap/ssr/transaction/insights.clj +++ b/src/clj/auto_ap/ssr/transaction/insights.clj @@ -1,7 +1,6 @@ (ns auto-ap.ssr.transaction.insights (:require [auto-ap.datomic :refer [conn visible-clients]] - [auto-ap.shared-views.company.sidebar :refer [company-side-bar]] [auto-ap.ssr-routes :as ssr-routes] [auto-ap.ssr.ui :refer [base-page]] [auto-ap.ssr.utils :refer [html-response]] @@ -10,7 +9,9 @@ [clj-time.coerce :as coerce] [datomic.api :as dc] [hiccup2.core :as hiccup] - [clj-time.core :as time])) + [auto-ap.ssr.components :as com] + [auto-ap.client-routes :as client-routes] + [auto-ap.ssr.svg :as svg])) (def pull-expr [:transaction/description-original :db/id @@ -25,77 +26,84 @@ (defn transaction-recommendations [identity selected-client & {:keys [after]}] (let [visible-clients (visible-clients identity)] - (->> - (dc/q '[:find (pull ?t pull-expr) - :in $ [?c ...] pull-expr - :where [?t :transaction/recommended-account] - [?t :transaction/client ?c] - [?t :transaction/approval-status :transaction-approval-status/unapproved] - (not [?t :transaction/vendor])] - (dc/db conn) - (if selected-client - [selected-client] - visible-clients) - pull-expr) - (map first) - (sort-by :transaction/date) - (reverse) - (drop-while (fn [x] - (if after - (not= (Long/parseLong after) (:db/id x)) - false))) - (#(if after + (->> + (dc/qseq {:query '[:find (pull ?t pull-expr) + :in $ [?c ...] pull-expr + :where [?t :transaction/recommended-account] + [?t :transaction/client ?c] + [?t :transaction/approval-status :transaction-approval-status/unapproved] + (not [?t :transaction/vendor])] + :args [(dc/db conn) + (if selected-client + [selected-client] + visible-clients) + pull-expr]}) + (map first) + (sort-by :transaction/date) + (reverse) + (drop-while (fn [x] + (if after + (not= (Long/parseLong after) (:db/id x)) + false))) + (#(if after (drop 1 %) %)) - (take 10) - (into [])))) + (take 10) + (into [])))) (defn transaction-row [r & {:keys [hide-actions? class last?]}] - [:tr (cond-> {:class class} - last? (assoc :hx-get (bidi/path-for ssr-routes/only-routes - :transaction-insight-rows - :after (:db/id r)) - :hx-trigger "intersect once" - :hx-indicator "#insight-table" - :hx-swap "afterend")) - [:td {:style {:width "8em"}}(:client/code (:transaction/client r))] - [:td {:style {:width "10em"}} (:bank-account/code (:transaction/bank-account r))] - [:td {:style {:width "12em"}} (some-> (:transaction/date r) coerce/to-date-time (atime/unparse-local atime/normal-date))] - [:td {:style {:width "30em" :max-width "30em"}} (str (:transaction/description-original r))] - [:td {:style {:width "10em"}} - (if (> (:transaction/amount r) 0.0 ) - [:div.tag.is-success.is-light (str "$" (Math/round (:transaction/amount r)))] - [:div.tag.is-danger.is-light (str "$" (Math/round (:transaction/amount r)))])] - [:td {:style {:width "12em"}} - [:div [:div.tag (:vendor/name (:transaction/recommended-vendor r))]] - [:div [:div.tag (str (:account/numeric-code (:transaction/recommended-account r)) " - " (:account/name (:transaction/recommended-account r)))]] - [:div [:div.tag - {:class (cond - (> (:transaction/account-confidence r) 0.90) - "is-success is-light" - (> (:transaction/account-confidence r) 0.80) - "is-info is-light" + (com/data-grid-row + (cond-> {:class class} + last? (assoc :hx-get (bidi/path-for ssr-routes/only-routes + :transaction-insight-rows + :after (:db/id r)) + :hx-trigger "intersect once" + :hx-indicator "#insight-table" + :hx-swap "afterend")) + (com/data-grid-cell {} (:client/code (:transaction/client r))) + (com/data-grid-cell {} (:bank-account/code (:transaction/bank-account r))) + (com/data-grid-cell {} (some-> (:transaction/date r) coerce/to-date-time (atime/unparse-local atime/normal-date))) - :else - "is-warning is-light")} - (str "%" (Math/round (* 100.0 (:transaction/account-confidence r))))]]] - [:td - (when-not hide-actions? - [:div.buttons - [:button.button {:hx-post (bidi/path-for ssr-routes/only-routes - :transaction-insight-approve - :transaction-id (:db/id r)) - :hx-target "closest tr"} - [:i.fa.fa-thumbs-up ]] - [:button.button - [:i.fa.fa-thumbs-down ]] - [:a.button {:hx-get (bidi/path-for ssr-routes/only-routes - :transaction-insight-explain - :transaction-id (:db/id r)) - :hx-target "#modal-holder" - :hx-swap "beforeend"} - [:i.fa.fa-question ]]])]]) + (com/data-grid-cell {} (str (:transaction/description-original r))) + (com/data-grid-cell {} + (if (> (:transaction/amount r) 0.0) + [:div.tag.is-success.is-light (str "$" (Math/round (:transaction/amount r)))] + [:div.tag.is-danger.is-light (str "$" (Math/round (:transaction/amount r)))])) + (com/data-grid-cell {:style {:width "12em"}} + [:div.flex.gap-2.flex-wrap {:style {:width "12em"}} + (com/pill {:color :primary} (:vendor/name (:transaction/recommended-vendor r))) + (com/pill {:color :secondary} (str (:account/numeric-code (:transaction/recommended-account r)) " - " (:account/name (:transaction/recommended-account r)))) + (com/pill {:class (cond + (> (:transaction/account-confidence r) 0.90) + "is-success is-light" + (> (:transaction/account-confidence r) 0.80) + "is-info is-light" + + :else + "is-warning is-light")} (str "%" (Math/round (* 100.0 (:transaction/account-confidence r)))))]) + (com/data-grid-right-stack-cell {} + (when-not hide-actions? + [:form.flex.gap-2 + [:input {:type :hidden :name "id" :value (:db/id r)}] + (com/icon-button {:hx-post (bidi/path-for ssr-routes/only-routes + :transaction-insight-approve + :transaction-id (:db/id r)) + :hx-target "closest tr" + :color :primary-light} + svg/thumbs-up) + (com/icon-button {:hx-delete (bidi/path-for ssr-routes/only-routes + :transaction-insight-approve + :transaction-id (:db/id r)) + :hx-swap "closest tr" + :color :danger-light} + svg/thumbs-down) + (com/icon-button {:hx-get (bidi/path-for ssr-routes/only-routes + :transaction-insight-explain + :transaction-id (:db/id r)) + :hx-target "#modal-holder" + :hx-swap "outerHTML"} + svg/question)])))) (defn approve [{:keys [identity session] {:keys [transaction-id]} :route-params}] (html-response (transaction-row @@ -108,15 +116,15 @@ (defn explain [{:keys [identity session] {:keys [transaction-id]} :route-params}] (let [r (dc/pull (dc/db conn) - pull-expr - (Long/parseLong transaction-id)) + pull-expr + (Long/parseLong transaction-id)) similar (->> (dc/q '[:find ?date ?do ?amt :in $ ?tr :where [(iol-ion.query/recent-date 180) ?start-date] [?tr :transaction/client ?c] - [?tr :transaction/recommended-account ?a ] - [?tr :transaction/recommended-vendor ?v ] + [?tr :transaction/recommended-account ?a] + [?tr :transaction/recommended-vendor ?v] [?t2 :transaction/client ?c] [?t2 :transaction/date ?date] [(>= ?date ?start-date)] @@ -130,38 +138,31 @@ (take 5) sort reverse)] - (html-response [:div.modal.is-active.wide - [:div.modal-background {"_" (hiccup/raw "on click remove <#modal-holder div/>")}] - [:div.modal-card - [:div.modal-card-head - [:h1.title "Similar transactions"] - [:div.tags - [:div.tag.is-large.is-info.is-light (:vendor/name (:transaction/recommended-vendor r))] - [:div.tag.is-large.is-info.is-light (str (:account/numeric-code (:transaction/recommended-account r)) " - " (:account/name (:transaction/recommended-account r)))]]] - [:div.modal-card-body - [:table.table - [:thead - [:tr - [:td "Date"] - [:td "Description"] - [:td "Amount"]]] - [:tbody - [:tr - [:th (some-> r :transaction/date coerce/to-date-time (atime/unparse-local atime/normal-date))] - [:th (-> r :transaction/description-original)] - [:th (if (> (-> r :transaction/amount) 0.0 ) - [:div.tag.is-success.is-light (str "$" (Math/round (:transaction/amount r)))] - [:div.tag.is-danger.is-light (str "$" (Math/round (:transaction/amount r)))])]] - (for [[date description amt] similar] - [:tr - [:td (some-> date coerce/to-date-time (atime/unparse-local atime/normal-date))] - [:td description] - [:td (if (> amt 0.0 ) - [:div.tag.is-success.is-light (str "$" (Math/round amt))] - [:div.tag.is-danger.is-light (str "$" (Math/round amt))])]])]] - - ]] - [:button.modal-close.is-large {"_" (hiccup/raw "on click remove <#modal-holder div/>")}]]))) + (html-response + (com/modal {} + (com/modal-card {:style {:width "900px"}} + [:div.flex [:div.p-2 "Similar Transactions"]] + [:table.w-full + [:thead + [:tr + [:td "Date"] + [:td "Description"] + [:td "Amount"]]] + [:tbody + [:tr + [:th.text-left (some-> r :transaction/date coerce/to-date-time (atime/unparse-local atime/normal-date))] + [:th.text-left (-> r :transaction/description-original)] + [:th.text-left (if (> (-> r :transaction/amount) 0.0) + [:div.tag.is-success.is-light (str "$" (Math/round (:transaction/amount r)))] + [:div.tag.is-danger.is-light (str "$" (Math/round (:transaction/amount r)))])]] + (for [[date description amt] similar] + [:tr + [:td (some-> date coerce/to-date-time (atime/unparse-local atime/normal-date))] + [:td description] + [:td (if (> amt 0.0) + [:div.tag.is-success.is-light (str "$" (Math/round amt))] + [:div.tag.is-danger.is-light (str "$" (Math/round amt))])]])]] + [:div]))))) (defn transaction-rows* [{:keys [selected-client identity after]}] (let [recommendations (transaction-recommendations identity selected-client :after after)] @@ -178,28 +179,23 @@ :after (:after route-params)}))) (defn insight-table* [{:keys [selected-client identity]}] - [:div#insight-table {:hx-get (bidi/path-for ssr-routes/only-routes - :transaction-insight-table - :request-method :get) - :hx-trigger "clientSelected from:body" - :hx-swap "outerHTML swap:100ms"} - - [:table.table - [:thead - [:tr - [:td "Client"] - [:td "Account"] - [:td "Date"] - [:td "Description"] - [:td "Amount"] - [:td "Vendor / Account"] - [:td "action"]]] - [:tbody - (transaction-rows* {:selected-client selected-client - :identity identity})]] - [:div.container.htmx-indicator - [:div.column.is-4.is-offset-4.has-text-centered - [:div.loader.is-loading.is-active.big.is-centered]]]]) + (let [recommendations (transaction-recommendations identity selected-client)] + (com/data-grid-card {:id "insight-table" + :title "Transaction Insights" + :route :transaction-insight-table + :paginate? false + :total (count recommendations) + :action-buttons nil + :rows (for [r recommendations + :let [last? (= r (last recommendations))]] + (transaction-row r :last? last?)) + :headers [(com/data-grid-header {} "Client") + (com/data-grid-header {} "Account") + (com/data-grid-header {} "Date") + (com/data-grid-header {} "Description") + (com/data-grid-header {} "Amount") + (com/data-grid-header {:style {:width "4em"}} "Vendor / Account") + (com/data-grid-header {})]}))) (defn insight-table [{:keys [session identity]}] (html-response (insight-table* {:selected-client @@ -208,10 +204,24 @@ (defn page [{:keys [identity matched-route session] :as request}] (base-page - request - [:div - [:h1.title "Transaction Insights"] - (insight-table* {:selected-client - (-> session :client :db/id) - :identity identity})] - "Transaction Insights")) + request + (com/page {:nav (com/main-aside-nav) + :active-client (:client (:session request)) + :identity (:identity request) + :app-params {:hx-get (bidi/path-for ssr-routes/only-routes + :admin-history) + :hx-trigger "clientSelected from:body" + :hx-select "#app-contents" + :hx-swap "outerHTML swap:300ms"}} + (com/breadcrumbs {} + [:a {:href (bidi/path-for client-routes/routes + :transactions)} + "Transactions"] + [:a {:href (bidi/path-for ssr-routes/only-routes + :transaction-insights)} + "Insights"]) + (insight-table* {:selected-client + (-> session :client :db/id) + :identity identity})) + + "Transaction Insights")) diff --git a/src/cljs/auto_ap/views/components/layouts.cljs b/src/cljs/auto_ap/views/components/layouts.cljs index b67e0d39..e342fc32 100644 --- a/src/cljs/auto_ap/views/components/layouts.cljs +++ b/src/cljs/auto_ap/views/components/layouts.cljs @@ -1,23 +1,21 @@ (ns auto-ap.views.components.layouts (:require [auto-ap.events :as events] + [auto-ap.forms :as forms] + [auto-ap.forms.builder :as form-builder] [auto-ap.routes :as routes] + [auto-ap.ssr-routes :as ssr-routes] [auto-ap.subs :as subs] [auto-ap.views.components.modal :as modal] [auto-ap.views.components.search :as search] [auto-ap.views.components.vendor-dialog :as vendor-dialog] [auto-ap.views.utils - :refer [active-when - appearing - dispatch-event-with-propagation - login-url]] + :refer [active-when appearing dispatch-event-with-propagation login-url]] [bidi.bidi :as bidi] [clojure.string :as str] [re-frame.core :as re-frame] [reagent.core :as r] - [auto-ap.forms.builder :as form-builder] - [vimsical.re-frame.cofx.inject :as inject] - [auto-ap.forms :as forms])) + [vimsical.re-frame.cofx.inject :as inject])) (defn navbar-drop-down [{:keys [ class]} _] (let [!child (r/atom nil)] @@ -47,19 +45,19 @@ (defn login-dropdown [] (let [user (re-frame/subscribe [::subs/user])] (if @user - [navbar-drop-down {:header [:span [:span.icon [:i.fa.fa-user] ] + [navbar-drop-down {:header [:span [:span.icon [:i.fa.fa-user]] [:span (:user/name @user)]] :id ::account} [:div [:a {:class "navbar-item" - :href (bidi/path-for routes/routes :reports)} "My company"] + :href (bidi/path-for auto-ap.ssr-routes/only-routes :company)} "My company"] [:a.dropdown-item {:on-click (dispatch-event-with-propagation [::vendor-dialog/started {}])} "New Vendor"] [:a.dropdown-item {:on-click (dispatch-event-with-propagation [::vendor-dialog/edit {}])} "Edit Vendor"] (when (= "admin" (:user/role @user)) [:a {:class "navbar-item" :href (bidi/path-for routes/routes :admin)} "Administration"]) [:hr {:class "navbar-divider"}] - [:a.navbar-item {:on-click (fn [e] (.preventDefault e) (re-frame/dispatch [::events/logout]))} "Logout"]]] - [:a.navbar-item {:href login-url} "Login"]))) + [:a.navbar-item {:on-click (fn [e] (.preventDefault e) (re-frame/dispatch [::events/logout]))} "Logout"]]] + [:a.navbar-item {:href (login-url)} "Login"]))) (re-frame/reg-sub ::client-search diff --git a/src/cljs/auto_ap/views/pages/login.cljs b/src/cljs/auto_ap/views/pages/login.cljs index abfb9547..76b63982 100644 --- a/src/cljs/auto_ap/views/pages/login.cljs +++ b/src/cljs/auto_ap/views/pages/login.cljs @@ -1,7 +1,8 @@ (ns auto-ap.views.pages.login (:require [auto-ap.views.utils :refer [login-url]] - [re-frame.core :as re-frame])) + [re-frame.core :as re-frame] + [cemerick.url :as url])) (re-frame/reg-sub ::logout-reason @@ -17,9 +18,9 @@ [:div.notification.is-warning reason]) [:h1.title "Login"] [:div.box.slideInFromBelow - + [:img {:src "/img/logo-big.png"}] [:div - [:a.button.is-large.is-primary {:href login-url} "Login with Google"]]] + [:a.button.is-large.is-primary {:href (doto (login-url (get (:query (url/url (.-location js/window))) "redirect-to")) println)} "Login with Google"]]] [:p.has-text-gray "Copyright Integreat 2018"]]]]]]) diff --git a/src/cljs/auto_ap/views/pages/needs_activation.cljs b/src/cljs/auto_ap/views/pages/needs_activation.cljs index ffead368..27bc2d9d 100644 --- a/src/cljs/auto_ap/views/pages/needs_activation.cljs +++ b/src/cljs/auto_ap/views/pages/needs_activation.cljs @@ -12,11 +12,11 @@ (defn needs-activation-page [] - [:div + [:div [:h2 "Sorry, your user is not activated yet. Please have Ben Skinner enable your account. Click " [:a {:on-click (fn [] (re-frame/dispatch-sync [::relogin]) true) - :href login-url} + :href (login-url)} "here"] " to try again."]]) diff --git a/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs b/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs index 36a7d887..8e993836 100644 --- a/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs +++ b/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs @@ -21,56 +21,55 @@ user @(re-frame/subscribe [::subs/user]) client @(re-frame/subscribe [::subs/client])] [:div - [:div [:p.menu-label "Type"] - [:ul.menu-list - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :transactions) - :class [(active-when ap = :transactions)]} - [:span {:class "icon" :style {:font-size "25px"}}] - [:span {:class "name"} "All"]]] - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :unapproved-transactions) - :class [(active-when ap = :unapproved-transactions)]} - [:span {:class "icon icon-task-list-text-1" :style {:font-size "25px"}}] - [:span {:class "name"} "Unapproved"]]] - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :requires-feedback-transactions) - :class [(active-when ap = :requires-feedback-transactions)]} + [:div [:p.menu-label "Type"] + [:ul.menu-list + [:li.menu-item + [:a.item {:href (bidi/path-for routes/routes :transactions) + :class [(active-when ap = :transactions)]} + [:span {:class "icon" :style {:font-size "25px"}}] + [:span {:class "name"} "All"]]] + [:li.menu-item + [:a.item {:href (bidi/path-for routes/routes :unapproved-transactions) + :class [(active-when ap = :unapproved-transactions)]} + [:span {:class "icon icon-task-list-text-1" :style {:font-size "25px"}}] + [:span {:class "name"} "Unapproved"]]] + [:li.menu-item + [:a.item {:href (bidi/path-for routes/routes :requires-feedback-transactions) + :class [(active-when ap = :requires-feedback-transactions)]} - [:span {:class "icon icon-task-list-question" :style {:font-size "25px"}}] - - [:span {:class "name"} "Client Review"]]] - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :approved-transactions) - :class [(active-when ap = :approved-transactions)]} + [:span {:class "icon icon-task-list-question" :style {:font-size "25px"}}] - [:span {:class "icon icon-task-list-check-1" :style {:font-size "25px"}}] - - [:span {:class "name"} "Approved"]]] - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :excluded-transactions) - :class [(active-when ap = :excluded-transactions)]} + [:span {:class "name"} "Client Review"]]] + [:li.menu-item + [:a.item {:href (bidi/path-for routes/routes :approved-transactions) + :class [(active-when ap = :approved-transactions)]} - [:span {:class "icon icon-task-list-disable" :style {:font-size "25px"}}] - - [:span {:class "name"} "Excluded"]]] + [:span {:class "icon icon-task-list-check-1" :style {:font-size "25px"}}] + + [:span {:class "name"} "Approved"]]] + [:li.menu-item + [:a.item {:href (bidi/path-for routes/routes :excluded-transactions) + :class [(active-when ap = :excluded-transactions)]} + + [:span {:class "icon icon-task-list-disable" :style {:font-size "25px"}}] + + [:span {:class "name"} "Excluded"]]] + (when @(re-frame/subscribe [::subs/is-admin?]) [:li.menu-item [:a.item {:href (bidi/path-for ssr-routes/only-routes :transaction-insights) :class [(active-when ap = :transaction-insights)]} [:span {:class "icon icon-task-list-disable" :style {:font-size "25px"}}] - - [:span {:class "name"} "Insights"]]] - ]] - (when client - [:<> + + [:span {:class "name"} "Insights"]]])]] + (when client + [:<> [:p.menu-label "Bank Account"] - [:div + [:div [bank-account-filter {:on-change-event [::data-page/filter-changed data-page :bank-account] :value @(re-frame/subscribe [::data-page/filter data-page :bank-account]) :bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]]]) - [:p.menu-label "Financial Account"] [:div @@ -79,7 +78,7 @@ {:query i :client-id (:id client)} [:name :id]]) - :entity->text (fn [x ] (str (:numeric-code x) " - " (:name x))) + :entity->text (fn [x] (str (:numeric-code x) " - " (:name x))) :type "typeahead-v3" :on-change #(re-frame/dispatch [::data-page/filter-changed data-page :account (some-> % (select-keys [:name :id :numeric-code]))]) :value @(re-frame/subscribe [::data-page/filter data-page :account])}]] @@ -94,13 +93,11 @@ :on-change #(re-frame/dispatch [::data-page/filter-changed data-page :vendor %]) :value @(re-frame/subscribe [::data-page/filter data-page :vendor])}]] - - [:p.menu-label "Amount"] - [:div - [number-filter - {:on-change-event [::data-page/filter-changed data-page :amount-range] - :value @(re-frame/subscribe [::data-page/filter data-page :amount-range])}]] + [:div + [number-filter + {:on-change-event [::data-page/filter-changed data-page :amount-range] + :value @(re-frame/subscribe [::data-page/filter data-page :amount-range])}]] [:p.menu-label "Date Range"] [:div @@ -108,33 +105,31 @@ {:on-change-event [::data-page/filter-changed data-page :date-range] :value @(re-frame/subscribe [::data-page/filter data-page :date-range])}]] - [:p.menu-label "Location"] [:div.field [:div.control [:input.input {:placeholder "SC" :style {:width "3em"} :value @(re-frame/subscribe [::data-page/filter data-page :location]) - :on-change (dispatch-value-change [::data-page/filter-changed data-page :location ])} ]]] + :on-change (dispatch-value-change [::data-page/filter-changed data-page :location])}]]] - [:p.menu-label "Description"] - [:div - [:div.field - [:div.control [:input.input {:placeholder "CHECK 123 ABC" - :value @(re-frame/subscribe [::data-page/filter data-page :description]) - :on-change (dispatch-value-change [::data-page/filter-changed data-page :description])} ]]]] + [:p.menu-label "Description"] + [:div + [:div.field + [:div.control [:input.input {:placeholder "CHECK 123 ABC" + :value @(re-frame/subscribe [::data-page/filter data-page :description]) + :on-change (dispatch-value-change [::data-page/filter-changed data-page :description])}]]]] (when-let [exact-match-id @(re-frame/subscribe [::data-page/filter data-page :exact-match-id])] [:div [:p.menu-label "Specific Transaction"] [:span.tag.is-medium exact-match-id " " [:button.delete.is-small {:on-click (dispatch-event [::data-page/filter-changed data-page :exact-match-id nil])}]]]) - (when (= "admin" (:user/role user)) [:<> - + [:p.menu-label "Admin only"] - [:div + [:div [switch-field {:id "unresolved-only" :checked (boolean @(re-frame/subscribe [::data-page/filter data-page :unresolved])) :on-change (fn [e] @@ -149,7 +144,7 @@ [:button.delete.is-small {:on-click (dispatch-event [::data-page/filter-changed data-page :import-batch-id nil])}]]]) - [:div + [:div [switch-field {:id "potentially-duplicate" :checked (boolean @(re-frame/subscribe [::data-page/filter data-page :potential-duplicates])) :on-change (fn [e] diff --git a/src/cljs/auto_ap/views/utils.cljs b/src/cljs/auto_ap/views/utils.cljs index 86d2bab0..0326e38f 100644 --- a/src/cljs/auto_ap/views/utils.cljs +++ b/src/cljs/auto_ap/views/utils.cljs @@ -57,10 +57,16 @@ (when (apply f (into [active-page] rest)) " is-active")) -(def login-url - (let [client-id "264081895820-0nndcfo3pbtqf30sro82vgq5r27h8736.apps.googleusercontent.com" - redirect-uri (js/encodeURI (str (.-origin (.-location js/window)) "/api/oauth"))] - (str "https://accounts.google.com/o/oauth2/auth?access_type=online&client_id=" client-id "&redirect_uri=" redirect-uri "&response_type=code&max_auth_age=0&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile"))) +(defn login-url + ([] (login-url nil)) + ([next] + + (let [client-id "264081895820-0nndcfo3pbtqf30sro82vgq5r27h8736.apps.googleusercontent.com" + redirect-uri (js/encodeURI (str (.-origin (.-location js/window)) "/api/oauth" + ))] + (str "https://accounts.google.com/o/oauth2/auth?access_type=online&client_id=" client-id "&redirect_uri=" redirect-uri "&response_type=code&max_auth_age=0&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile" + (when next + (str "&state=" (js/encodeURIComponent next))))))) (defn dispatch-value-change [event] (fn [e] @@ -249,9 +255,9 @@ :user/role))))))) (defn query-params [] - (reduce-kv + (reduce-kv (fn [result k v] - (assoc result (keyword k) (edn/read-string v))) + (assoc result (keyword k) (try (edn/read-string v) (catch js/Error e v)))) {} (:query (cemerick.url/url (.-location js/window)))))