{"algorithm":"critical-path","about":["When tasks run in parallel, the total time is set by the longest chain of tasks that wait on each other. That chain is the critical path. Making a task on it faster shortens the whole run, and making any other task faster doesn't, since that task already has time to spare.","dag.CriticalPath takes the vertices in topological order, as Kahn's algorithm does. Each vertex finishes at the latest finish among the vertices it depends on, plus its own weight and the weight of the edge from that dependency. The path ends at the vertex with the latest finish among those nothing depends on, and following each vertex back to the dependency that set its start gives the path. It costs O(V+E).","Weights are read with Vertex.Weight and Edge.Weight, so the graph needs no Weighted option, and an unset weight counts as 0. On a tie, the path found first in topological order wins. CriticalPathFunc takes the costs from functions instead, such as durations measured on the last run. For a graph with cycles, condense it first: each loop of tasks becomes one vertex, which WithComponentWeight can give the sum of its tasks."],"template":{"id":"monorepo-build","name":"Monorepo build","description":"One hundred build targets, T1 to T100, in the repository of an online shop. T1 to T32 are shared libraries, T33 to T41 the code generator and API definitions, T42 to T58 services, T59 to T63 batch jobs, T64 to T71 the API client and UI packages, T72 to T76 apps, T77 to T95 container images, and T96 to T100 the deploys and the contract and end-to-end tests. A target takes 1 to 20 minutes to build. Each edge points from a target to a target that builds on it.","family":"dag","directed":true,"weighted":false,"acyclic":true,"vertices":[{"id":"T1","x":44,"y":294},{"id":"T2","x":127,"y":199},{"id":"T3","x":210,"y":285},{"id":"T4","x":127,"y":313},{"id":"T5","x":127,"y":256},{"id":"T6","x":210,"y":228},{"id":"T7","x":293,"y":229},{"id":"T8","x":210,"y":171},{"id":"T9","x":293,"y":58},{"id":"T10","x":210,"y":114},{"id":"T11","x":210,"y":449},{"id":"T12","x":210,"y":392},{"id":"T13","x":293,"y":514},{"id":"T14","x":376,"y":553},{"id":"T15","x":127,"y":427},{"id":"T16","x":127,"y":142},{"id":"T17","x":293,"y":457},{"id":"T18","x":293,"y":172},{"id":"T19","x":376,"y":211},{"id":"T20","x":293,"y":343},{"id":"T21","x":376,"y":268},{"id":"T22","x":376,"y":325},{"id":"T23","x":376,"y":439},{"id":"T24","x":459,"y":211},{"id":"T25","x":376,"y":496},{"id":"T26","x":293,"y":115},{"id":"T27","x":293,"y":286},{"id":"T28","x":293,"y":400},{"id":"T29","x":459,"y":154},{"id":"T30","x":459,"y":97},{"id":"T31","x":376,"y":97},{"id":"T32","x":459,"y":40},{"id":"T33","x":44,"y":602},{"id":"T34","x":127,"y":602},{"id":"T35","x":293,"y":742},{"id":"T36","x":210,"y":610},{"id":"T37","x":293,"y":685},{"id":"T38","x":293,"y":628},{"id":"T39","x":293,"y":571},{"id":"T40","x":376,"y":610},{"id":"T41","x":210,"y":533},{"id":"T42","x":542,"y":439},{"id":"T43","x":459,"y":496},{"id":"T44","x":459,"y":268},{"id":"T45","x":459,"y":610},{"id":"T46","x":459,"y":781},{"id":"T47","x":459,"y":553},{"id":"T48","x":542,"y":268},{"id":"T49","x":459,"y":439},{"id":"T50","x":459,"y":325},{"id":"T51","x":542,"y":382},{"id":"T52","x":459,"y":667},{"id":"T53","x":459,"y":838},{"id":"T54","x":542,"y":211},{"id":"T55","x":459,"y":724},{"id":"T56","x":542,"y":97},{"id":"T57","x":542,"y":40},{"id":"T58","x":542,"y":553},{"id":"T59","x":542,"y":154},{"id":"T60","x":376,"y":154},{"id":"T61","x":542,"y":325},{"id":"T62","x":376,"y":382},{"id":"T63","x":376,"y":40},{"id":"T64","x":376,"y":765},{"id":"T65","x":44,"y":926},{"id":"T66","x":44,"y":812},{"id":"T67","x":44,"y":869},{"id":"T68","x":127,"y":847},{"id":"T69","x":210,"y":837},{"id":"T70","x":127,"y":932},{"id":"T71","x":210,"y":894},{"id":"T72","x":459,"y":895},{"id":"T73","x":459,"y":952},{"id":"T74","x":708,"y":804},{"id":"T75","x":293,"y":873},{"id":"T76","x":708,"y":747},{"id":"T77","x":459,"y":382},{"id":"T78","x":625,"y":403},{"id":"T79","x":625,"y":574},{"id":"T80","x":625,"y":346},{"id":"T81","x":542,"y":610},{"id":"T82","x":625,"y":688},{"id":"T83","x":625,"y":631},{"id":"T84","x":625,"y":289},{"id":"T85","x":542,"y":496},{"id":"T86","x":625,"y":517},{"id":"T87","x":625,"y":460},{"id":"T88","x":542,"y":667},{"id":"T89","x":542,"y":781},{"id":"T90","x":625,"y":232},{"id":"T91","x":542,"y":724},{"id":"T92","x":625,"y":175},{"id":"T93","x":625,"y":118},{"id":"T94","x":625,"y":745},{"id":"T95","x":625,"y":61},{"id":"T96","x":708,"y":438},{"id":"T97","x":791,"y":459},{"id":"T98","x":708,"y":495},{"id":"T99","x":874,"y":469},{"id":"T100","x":957,"y":454}],"edges":[{"from":"T1","to":"T4"},{"from":"T1","to":"T5"},{"from":"T5","to":"T6"},{"from":"T5","to":"T7"},{"from":"T6","to":"T7"},{"from":"T2","to":"T8"},{"from":"T1","to":"T8"},{"from":"T2","to":"T9"},{"from":"T6","to":"T9"},{"from":"T1","to":"T10"},{"from":"T1","to":"T11"},{"from":"T4","to":"T12"},{"from":"T1","to":"T13"},{"from":"T12","to":"T13"},{"from":"T1","to":"T14"},{"from":"T1","to":"T15"},{"from":"T1","to":"T16"},{"from":"T12","to":"T17"},{"from":"T11","to":"T17"},{"from":"T4","to":"T18"},{"from":"T5","to":"T18"},{"from":"T6","to":"T18"},{"from":"T8","to":"T18"},{"from":"T3","to":"T18"},{"from":"T18","to":"T19"},{"from":"T4","to":"T20"},{"from":"T6","to":"T20"},{"from":"T8","to":"T20"},{"from":"T4","to":"T21"},{"from":"T7","to":"T21"},{"from":"T8","to":"T21"},{"from":"T3","to":"T21"},{"from":"T4","to":"T22"},{"from":"T7","to":"T22"},{"from":"T9","to":"T22"},{"from":"T13","to":"T22"},{"from":"T4","to":"T23"},{"from":"T7","to":"T23"},{"from":"T34","to":"T23"},{"from":"T10","to":"T24"},{"from":"T20","to":"T24"},{"from":"T22","to":"T24"},{"from":"T23","to":"T24"},{"from":"T4","to":"T25"},{"from":"T20","to":"T25"},{"from":"T4","to":"T26"},{"from":"T8","to":"T26"},{"from":"T6","to":"T26"},{"from":"T4","to":"T27"},{"from":"T8","to":"T27"},{"from":"T12","to":"T27"},{"from":"T4","to":"T28"},{"from":"T8","to":"T28"},{"from":"T12","to":"T28"},{"from":"T22","to":"T29"},{"from":"T8","to":"T29"},{"from":"T14","to":"T29"},{"from":"T22","to":"T30"},{"from":"T11","to":"T30"},{"from":"T10","to":"T30"},{"from":"T26","to":"T31"},{"from":"T18","to":"T32"},{"from":"T20","to":"T32"},{"from":"T21","to":"T32"},{"from":"T22","to":"T32"},{"from":"T33","to":"T34"},{"from":"T34","to":"T35"},{"from":"T34","to":"T36"},{"from":"T34","to":"T37"},{"from":"T36","to":"T37"},{"from":"T34","to":"T38"},{"from":"T34","to":"T39"},{"from":"T36","to":"T39"},{"from":"T34","to":"T40"},{"from":"T37","to":"T40"},{"from":"T34","to":"T41"},{"from":"T18","to":"T42"},{"from":"T23","to":"T42"},{"from":"T24","to":"T42"},{"from":"T13","to":"T42"},{"from":"T35","to":"T42"},{"from":"T18","to":"T43"},{"from":"T23","to":"T43"},{"from":"T20","to":"T43"},{"from":"T14","to":"T43"},{"from":"T36","to":"T43"},{"from":"T18","to":"T44"},{"from":"T23","to":"T44"},{"from":"T21","to":"T44"},{"from":"T39","to":"T44"},{"from":"T23","to":"T45"},{"from":"T20","to":"T45"},{"from":"T11","to":"T45"},{"from":"T25","to":"T45"},{"from":"T36","to":"T45"},{"from":"T23","to":"T46"},{"from":"T20","to":"T46"},{"from":"T11","to":"T46"},{"from":"T37","to":"T46"},{"from":"T18","to":"T47"},{"from":"T23","to":"T47"},{"from":"T21","to":"T47"},{"from":"T11","to":"T47"},{"from":"T37","to":"T47"},{"from":"T38","to":"T47"},{"from":"T18","to":"T48"},{"from":"T23","to":"T48"},{"from":"T21","to":"T48"},{"from":"T30","to":"T48"},{"from":"T38","to":"T48"},{"from":"T18","to":"T49"},{"from":"T23","to":"T49"},{"from":"T21","to":"T49"},{"from":"T15","to":"T49"},{"from":"T40","to":"T49"},{"from":"T23","to":"T50"},{"from":"T21","to":"T50"},{"from":"T27","to":"T50"},{"from":"T28","to":"T50"},{"from":"T41","to":"T50"},{"from":"T23","to":"T51"},{"from":"T21","to":"T51"},{"from":"T29","to":"T51"},{"from":"T36","to":"T51"},{"from":"T18","to":"T52"},{"from":"T23","to":"T52"},{"from":"T13","to":"T52"},{"from":"T14","to":"T52"},{"from":"T36","to":"T52"},{"from":"T23","to":"T53"},{"from":"T20","to":"T53"},{"from":"T36","to":"T53"},{"from":"T35","to":"T53"},{"from":"T22","to":"T54"},{"from":"T24","to":"T54"},{"from":"T31","to":"T54"},{"from":"T23","to":"T55"},{"from":"T25","to":"T55"},{"from":"T38","to":"T55"},{"from":"T18","to":"T56"},{"from":"T21","to":"T56"},{"from":"T26","to":"T56"},{"from":"T18","to":"T57"},{"from":"T21","to":"T57"},{"from":"T2","to":"T57"},{"from":"T22","to":"T58"},{"from":"T24","to":"T58"},{"from":"T9","to":"T58"},{"from":"T25","to":"T58"},{"from":"T35","to":"T58"},{"from":"T36","to":"T58"},{"from":"T37","to":"T58"},{"from":"T19","to":"T59"},{"from":"T18","to":"T60"},{"from":"T26","to":"T60"},{"from":"T16","to":"T60"},{"from":"T17","to":"T60"},{"from":"T18","to":"T61"},{"from":"T29","to":"T61"},{"from":"T36","to":"T61"},{"from":"T18","to":"T62"},{"from":"T27","to":"T62"},{"from":"T17","to":"T62"},{"from":"T38","to":"T62"},{"from":"T18","to":"T63"},{"from":"T26","to":"T63"},{"from":"T2","to":"T63"},{"from":"T35","to":"T64"},{"from":"T36","to":"T64"},{"from":"T37","to":"T64"},{"from":"T38","to":"T64"},{"from":"T65","to":"T68"},{"from":"T66","to":"T68"},{"from":"T68","to":"T69"},{"from":"T67","to":"T69"},{"from":"T65","to":"T70"},{"from":"T68","to":"T71"},{"from":"T67","to":"T71"},{"from":"T68","to":"T72"},{"from":"T69","to":"T72"},{"from":"T67","to":"T72"},{"from":"T64","to":"T72"},{"from":"T68","to":"T73"},{"from":"T69","to":"T73"},{"from":"T70","to":"T73"},{"from":"T71","to":"T73"},{"from":"T64","to":"T73"},{"from":"T65","to":"T74"},{"from":"T67","to":"T74"},{"from":"T64","to":"T74"},{"from":"T68","to":"T75"},{"from":"T69","to":"T75"},{"from":"T70","to":"T75"},{"from":"T71","to":"T75"},{"from":"T68","to":"T76"},{"from":"T64","to":"T76"},{"from":"T77","to":"T78"},{"from":"T42","to":"T78"},{"from":"T77","to":"T79"},{"from":"T43","to":"T79"},{"from":"T77","to":"T80"},{"from":"T44","to":"T80"},{"from":"T77","to":"T81"},{"from":"T45","to":"T81"},{"from":"T77","to":"T82"},{"from":"T46","to":"T82"},{"from":"T77","to":"T83"},{"from":"T47","to":"T83"},{"from":"T77","to":"T84"},{"from":"T48","to":"T84"},{"from":"T77","to":"T85"},{"from":"T49","to":"T85"},{"from":"T77","to":"T86"},{"from":"T50","to":"T86"},{"from":"T77","to":"T87"},{"from":"T51","to":"T87"},{"from":"T77","to":"T88"},{"from":"T52","to":"T88"},{"from":"T77","to":"T89"},{"from":"T53","to":"T89"},{"from":"T77","to":"T90"},{"from":"T54","to":"T90"},{"from":"T77","to":"T91"},{"from":"T55","to":"T91"},{"from":"T77","to":"T92"},{"from":"T56","to":"T92"},{"from":"T77","to":"T93"},{"from":"T57","to":"T93"},{"from":"T77","to":"T94"},{"from":"T58","to":"T94"},{"from":"T72","to":"T94"},{"from":"T73","to":"T94"},{"from":"T77","to":"T95"},{"from":"T59","to":"T95"},{"from":"T60","to":"T95"},{"from":"T61","to":"T95"},{"from":"T62","to":"T95"},{"from":"T63","to":"T95"},{"from":"T78","to":"T96"},{"from":"T79","to":"T96"},{"from":"T80","to":"T96"},{"from":"T81","to":"T96"},{"from":"T82","to":"T96"},{"from":"T83","to":"T96"},{"from":"T84","to":"T96"},{"from":"T85","to":"T96"},{"from":"T86","to":"T96"},{"from":"T87","to":"T96"},{"from":"T88","to":"T96"},{"from":"T89","to":"T96"},{"from":"T90","to":"T96"},{"from":"T91","to":"T96"},{"from":"T92","to":"T96"},{"from":"T93","to":"T96"},{"from":"T94","to":"T96"},{"from":"T95","to":"T96"},{"from":"T96","to":"T97"},{"from":"T32","to":"T98"},{"from":"T35","to":"T98"},{"from":"T36","to":"T98"},{"from":"T37","to":"T98"},{"from":"T38","to":"T98"},{"from":"T97","to":"T99"},{"from":"T98","to":"T99"},{"from":"T96","to":"T100"},{"from":"T99","to":"T100"}],"durations":{"T1":2,"T10":2,"T100":4,"T11":2,"T12":2,"T13":2,"T14":2,"T15":2,"T16":2,"T17":2,"T18":4,"T19":2,"T2":2,"T20":2,"T21":2,"T22":4,"T23":4,"T24":3,"T25":2,"T26":2,"T27":2,"T28":2,"T29":2,"T3":2,"T30":2,"T31":2,"T32":5,"T33":3,"T34":1,"T35":1,"T36":1,"T37":1,"T38":1,"T39":1,"T4":2,"T40":1,"T41":1,"T42":6,"T43":6,"T44":6,"T45":6,"T46":6,"T47":6,"T48":6,"T49":6,"T5":2,"T50":6,"T51":6,"T52":6,"T53":6,"T54":6,"T55":6,"T56":6,"T57":6,"T58":6,"T59":3,"T6":2,"T60":3,"T61":3,"T62":3,"T63":3,"T64":2,"T65":2,"T66":2,"T67":2,"T68":2,"T69":2,"T7":2,"T70":2,"T71":2,"T72":8,"T73":8,"T74":8,"T75":8,"T76":8,"T77":4,"T78":2,"T79":2,"T8":2,"T80":2,"T81":2,"T82":2,"T83":2,"T84":2,"T85":2,"T86":2,"T87":2,"T88":2,"T89":2,"T9":2,"T90":2,"T91":2,"T92":2,"T93":2,"T94":2,"T95":2,"T96":1,"T97":4,"T98":10,"T99":20},"durationUnit":"minutes","details":{"vertices":100,"edges":266,"directed":true,"weighted":false,"acyclic":true,"negativeWeights":false,"density":0.026868686868686868,"inDegree":{"min":0,"avg":2.66,"max":18},"outDegree":{"min":0,"avg":2.66,"max":18},"selfLoops":0,"components":1}},"problem":"With as many build machines as it needs, how long does the build take, and which targets are worth making faster?","params":{},"result":{"kind":"order","vertices":["T1","T5","T6","T7","T23","T24","T42","T78","T96","T97","T99","T100"]},"answer":"The critical path is T1, T5, T6, T7, T23, T24, T42, T78, T96, T97, and so on to T100, 12 tasks taking 52 in all. Every task one after another takes 337, so running in parallel saves 285. Only a faster task on the path makes the whole run shorter.","legend":{"vertex":[{"id":"idle","label":"Not checked yet","color":"#64748B","shape":"hollow"},{"id":"current","label":"Being checked","color":"#56B4E9","shape":"ring"},{"id":"done","label":"Earliest finish known","color":"#009E73","shape":"filled"},{"id":"critical","label":"On the critical path","color":"#D55E00","shape":"filled"}],"edge":[{"id":"idle","label":"Edge","color":"#475569","shape":"line"},{"id":"latest","label":"From the dependency that finishes last so far","color":"#56B4E9","shape":"thick"},{"id":"examined","label":"From a dependency that finishes earlier","color":"#CC79A7","shape":"dashed"},{"id":"critical","label":"On the critical path","color":"#D55E00","shape":"thick"}],"panels":[{"id":"finish","title":"Earliest finish","kind":"table"},{"id":"order","title":"Critical path","kind":"list"}]},"steps":[{"say":"Take the tasks in topological order, so every task comes after the tasks it depends on. A task finishes at the latest finish among its dependencies, plus its own weight. The tasks with no dependencies, T1, T2, T3, T33, T65, T66, T67 and T77, start at 0."},{"say":"T1 depends on nothing. It starts at 0 and takes 2, so it finishes at 2. 9 tasks that depend on T1 can't start before 2.","ops":[{"v":"T1","state":"current"},{"panel":"finish","set":{"T1":"2"}},{"e":["T1","T4"],"state":"latest"},{"e":["T1","T5"],"state":"latest"},{"e":["T1","T8"],"state":"latest"},{"e":["T1","T10"],"state":"latest"},{"e":["T1","T11"],"state":"latest"},{"e":["T1","T13"],"state":"latest"},{"e":["T1","T14"],"state":"latest"},{"e":["T1","T15"],"state":"latest"},{"e":["T1","T16"],"state":"latest"}]},{"say":"T2 depends on nothing. It starts at 0 and takes 2, so it finishes at 2. T9, T57 and T63 can't start before 2. T8 already waits at least that long for another task.","ops":[{"v":"T2","state":"current"},{"panel":"finish","set":{"T2":"2"}},{"e":["T2","T9"],"state":"latest"},{"e":["T2","T57"],"state":"latest"},{"e":["T2","T63"],"state":"latest"},{"e":["T2","T8"],"state":"examined"},{"v":"T1","state":"done"}]},{"say":"T3 depends on nothing. It starts at 0 and takes 2, so it finishes at 2. T18 and T21 can't start before 2.","ops":[{"v":"T3","state":"current"},{"panel":"finish","set":{"T3":"2"}},{"e":["T3","T18"],"state":"latest"},{"e":["T3","T21"],"state":"latest"},{"v":"T2","state":"done"}]},{"say":"T33 depends on nothing. It starts at 0 and takes 3, so it finishes at 3. T34 can't start before 3.","ops":[{"v":"T33","state":"current"},{"panel":"finish","set":{"T33":"3"}},{"e":["T33","T34"],"state":"latest"},{"v":"T3","state":"done"}]},{"say":"T65 depends on nothing. It starts at 0 and takes 2, so it finishes at 2. T68, T70 and T74 can't start before 2.","ops":[{"v":"T65","state":"current"},{"panel":"finish","set":{"T65":"2"}},{"e":["T65","T68"],"state":"latest"},{"e":["T65","T70"],"state":"latest"},{"e":["T65","T74"],"state":"latest"},{"v":"T33","state":"done"}]},{"say":"T66 depends on nothing. It starts at 0 and takes 2, so it finishes at 2. T68 already waits at least that long for another task.","ops":[{"v":"T66","state":"current"},{"panel":"finish","set":{"T66":"2"}},{"e":["T66","T68"],"state":"examined"},{"v":"T65","state":"done"}]},{"say":"T67 depends on nothing. It starts at 0 and takes 2, so it finishes at 2. T69, T71 and T72 can't start before 2. T74 already waits at least that long for another task.","ops":[{"v":"T67","state":"current"},{"panel":"finish","set":{"T67":"2"}},{"e":["T67","T69"],"state":"latest"},{"e":["T67","T71"],"state":"latest"},{"e":["T67","T72"],"state":"latest"},{"e":["T67","T74"],"state":"examined"},{"v":"T66","state":"done"}]},{"say":"T77 depends on nothing. It starts at 0 and takes 4, so it finishes at 4. 18 tasks that depend on T77 can't start before 4.","ops":[{"v":"T77","state":"current"},{"panel":"finish","set":{"T77":"4"}},{"e":["T77","T78"],"state":"latest"},{"e":["T77","T79"],"state":"latest"},{"e":["T77","T80"],"state":"latest"},{"e":["T77","T81"],"state":"latest"},{"e":["T77","T82"],"state":"latest"},{"e":["T77","T83"],"state":"latest"},{"e":["T77","T84"],"state":"latest"},{"e":["T77","T85"],"state":"latest"},{"e":["T77","T86"],"state":"latest"},{"e":["T77","T87"],"state":"latest"},{"e":["T77","T88"],"state":"latest"},{"e":["T77","T89"],"state":"latest"},{"e":["T77","T90"],"state":"latest"},{"e":["T77","T91"],"state":"latest"},{"e":["T77","T92"],"state":"latest"},{"e":["T77","T93"],"state":"latest"},{"e":["T77","T94"],"state":"latest"},{"e":["T77","T95"],"state":"latest"},{"v":"T67","state":"done"},{"e":["T3","T18"],"state":"examined"},{"e":["T3","T21"],"state":"examined"}]},{"say":"T4 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. 10 tasks that depend on T4 can't start before 4.","ops":[{"v":"T4","state":"current"},{"panel":"finish","set":{"T4":"4"}},{"e":["T4","T12"],"state":"latest"},{"e":["T4","T18"],"state":"latest"},{"e":["T4","T20"],"state":"latest"},{"e":["T4","T21"],"state":"latest"},{"e":["T4","T22"],"state":"latest"},{"e":["T4","T23"],"state":"latest"},{"e":["T4","T25"],"state":"latest"},{"e":["T4","T26"],"state":"latest"},{"e":["T4","T27"],"state":"latest"},{"e":["T4","T28"],"state":"latest"},{"v":"T77","state":"done"}]},{"say":"T5 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. T6 and T7 can't start before 4. T18 already waits at least that long for another task.","ops":[{"v":"T5","state":"current"},{"panel":"finish","set":{"T5":"4"}},{"e":["T5","T6"],"state":"latest"},{"e":["T5","T7"],"state":"latest"},{"e":["T5","T18"],"state":"examined"},{"v":"T4","state":"done"}]},{"say":"T10 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. T24 and T30 can't start before 4.","ops":[{"v":"T10","state":"current"},{"panel":"finish","set":{"T10":"4"}},{"e":["T10","T24"],"state":"latest"},{"e":["T10","T30"],"state":"latest"},{"v":"T5","state":"done"}]},{"say":"T11 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. T17, T45, T46 and T47 can't start before 4. T30 already waits at least that long for another task.","ops":[{"v":"T11","state":"current"},{"panel":"finish","set":{"T11":"4"}},{"e":["T11","T17"],"state":"latest"},{"e":["T11","T45"],"state":"latest"},{"e":["T11","T46"],"state":"latest"},{"e":["T11","T47"],"state":"latest"},{"e":["T11","T30"],"state":"examined"},{"v":"T10","state":"done"}]},{"say":"T14 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. T29, T43 and T52 can't start before 4.","ops":[{"v":"T14","state":"current"},{"panel":"finish","set":{"T14":"4"}},{"e":["T14","T29"],"state":"latest"},{"e":["T14","T43"],"state":"latest"},{"e":["T14","T52"],"state":"latest"},{"v":"T11","state":"done"}]},{"say":"T15 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. T49 can't start before 4.","ops":[{"v":"T15","state":"current"},{"panel":"finish","set":{"T15":"4"}},{"e":["T15","T49"],"state":"latest"},{"v":"T14","state":"done"}]},{"say":"T16 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. T60 can't start before 4.","ops":[{"v":"T16","state":"current"},{"panel":"finish","set":{"T16":"4"}},{"e":["T16","T60"],"state":"latest"},{"v":"T15","state":"done"}]},{"say":"T8 starts at 2, when T1 finishes, and takes 2, so it finishes at 4. 7 others already wait at least that long for other tasks.","ops":[{"v":"T8","state":"current"},{"panel":"finish","set":{"T8":"4"}},{"e":["T8","T18"],"state":"examined"},{"e":["T8","T20"],"state":"examined"},{"e":["T8","T21"],"state":"examined"},{"e":["T8","T26"],"state":"examined"},{"e":["T8","T27"],"state":"examined"},{"e":["T8","T28"],"state":"examined"},{"e":["T8","T29"],"state":"examined"},{"v":"T16","state":"done"}]},{"say":"T34 starts at 3, when T33 finishes, and takes 1, so it finishes at 4. 7 tasks that depend on T34 can't start before 4. T23 already waits at least that long for another task.","ops":[{"v":"T34","state":"current"},{"panel":"finish","set":{"T34":"4"}},{"e":["T34","T35"],"state":"latest"},{"e":["T34","T36"],"state":"latest"},{"e":["T34","T37"],"state":"latest"},{"e":["T34","T38"],"state":"latest"},{"e":["T34","T39"],"state":"latest"},{"e":["T34","T40"],"state":"latest"},{"e":["T34","T41"],"state":"latest"},{"e":["T34","T23"],"state":"examined"},{"v":"T8","state":"done"}]},{"say":"T70 starts at 2, when T65 finishes, and takes 2, so it finishes at 4. T73 and T75 can't start before 4.","ops":[{"v":"T70","state":"current"},{"panel":"finish","set":{"T70":"4"}},{"e":["T70","T73"],"state":"latest"},{"e":["T70","T75"],"state":"latest"},{"v":"T34","state":"done"},{"e":["T67","T69"],"state":"examined"},{"e":["T67","T71"],"state":"examined"},{"e":["T67","T72"],"state":"examined"}]},{"say":"T68 starts at 2, when T65 finishes, and takes 2, so it finishes at 4. T69, T71, T72 and T76 can't start before 4. T73 and T75 already wait at least that long for other tasks.","ops":[{"v":"T68","state":"current"},{"panel":"finish","set":{"T68":"4"}},{"e":["T68","T69"],"state":"latest"},{"e":["T68","T71"],"state":"latest"},{"e":["T68","T72"],"state":"latest"},{"e":["T68","T76"],"state":"latest"},{"e":["T68","T73"],"state":"examined"},{"e":["T68","T75"],"state":"examined"},{"v":"T70","state":"done"},{"e":["T1","T13"],"state":"examined"},{"e":["T11","T17"],"state":"examined"},{"e":["T4","T27"],"state":"examined"},{"e":["T4","T28"],"state":"examined"}]},{"say":"T12 starts at 4, when T4 finishes, and takes 2, so it finishes at 6. T13, T17, T27 and T28 can't start before 6.","ops":[{"v":"T12","state":"current"},{"panel":"finish","set":{"T12":"6"}},{"e":["T12","T13"],"state":"latest"},{"e":["T12","T17"],"state":"latest"},{"e":["T12","T27"],"state":"latest"},{"e":["T12","T28"],"state":"latest"},{"v":"T68","state":"done"},{"e":["T5","T7"],"state":"examined"},{"e":["T2","T9"],"state":"examined"},{"e":["T4","T18"],"state":"examined"},{"e":["T4","T20"],"state":"examined"},{"e":["T4","T26"],"state":"examined"}]},{"say":"T6 starts at 4, when T5 finishes, and takes 2, so it finishes at 6. 5 tasks that depend on T6 can't start before 6.","ops":[{"v":"T6","state":"current"},{"panel":"finish","set":{"T6":"6"}},{"e":["T6","T7"],"state":"latest"},{"e":["T6","T9"],"state":"latest"},{"e":["T6","T18"],"state":"latest"},{"e":["T6","T20"],"state":"latest"},{"e":["T6","T26"],"state":"latest"},{"v":"T12","state":"done"}]},{"say":"T35 starts at 4, when T34 finishes, and takes 1, so it finishes at 5. 5 tasks that depend on T35 can't start before 5.","ops":[{"v":"T35","state":"current"},{"panel":"finish","set":{"T35":"5"}},{"e":["T35","T42"],"state":"latest"},{"e":["T35","T53"],"state":"latest"},{"e":["T35","T58"],"state":"latest"},{"e":["T35","T64"],"state":"latest"},{"e":["T35","T98"],"state":"latest"},{"v":"T6","state":"done"},{"e":["T34","T37"],"state":"examined"},{"e":["T34","T39"],"state":"examined"},{"e":["T14","T43"],"state":"examined"},{"e":["T11","T45"],"state":"examined"},{"e":["T14","T52"],"state":"examined"}]},{"say":"T36 starts at 4, when T34 finishes, and takes 1, so it finishes at 5. 7 tasks that depend on T36 can't start before 5. T53, T58, T64 and T98 already wait at least that long for other tasks.","ops":[{"v":"T36","state":"current"},{"panel":"finish","set":{"T36":"5"}},{"e":["T36","T37"],"state":"latest"},{"e":["T36","T39"],"state":"latest"},{"e":["T36","T43"],"state":"latest"},{"e":["T36","T45"],"state":"latest"},{"e":["T36","T51"],"state":"latest"},{"e":["T36","T52"],"state":"latest"},{"e":["T36","T61"],"state":"latest"},{"e":["T36","T53"],"state":"examined"},{"e":["T36","T58"],"state":"examined"},{"e":["T36","T64"],"state":"examined"},{"e":["T36","T98"],"state":"examined"},{"v":"T35","state":"done"},{"e":["T11","T47"],"state":"examined"}]},{"say":"T38 starts at 4, when T34 finishes, and takes 1, so it finishes at 5. T47, T48, T55 and T62 can't start before 5. T64 and T98 already wait at least that long for other tasks.","ops":[{"v":"T38","state":"current"},{"panel":"finish","set":{"T38":"5"}},{"e":["T38","T47"],"state":"latest"},{"e":["T38","T48"],"state":"latest"},{"e":["T38","T55"],"state":"latest"},{"e":["T38","T62"],"state":"latest"},{"e":["T38","T64"],"state":"examined"},{"e":["T38","T98"],"state":"examined"},{"v":"T36","state":"done"}]},{"say":"T41 starts at 4, when T34 finishes, and takes 1, so it finishes at 5. T50 can't start before 5.","ops":[{"v":"T41","state":"current"},{"panel":"finish","set":{"T41":"5"}},{"e":["T41","T50"],"state":"latest"},{"v":"T38","state":"done"},{"e":["T68","T72"],"state":"examined"},{"e":["T70","T73"],"state":"examined"},{"e":["T70","T75"],"state":"examined"}]},{"say":"T69 starts at 4, when T68 finishes, and takes 2, so it finishes at 6. T72, T73 and T75 can't start before 6.","ops":[{"v":"T69","state":"current"},{"panel":"finish","set":{"T69":"6"}},{"e":["T69","T72"],"state":"latest"},{"e":["T69","T73"],"state":"latest"},{"e":["T69","T75"],"state":"latest"},{"v":"T41","state":"done"}]},{"say":"T71 starts at 4, when T68 finishes, and takes 2, so it finishes at 6. T73 and T75 already wait at least that long for other tasks.","ops":[{"v":"T71","state":"current"},{"panel":"finish","set":{"T71":"6"}},{"e":["T71","T73"],"state":"examined"},{"e":["T71","T75"],"state":"examined"},{"v":"T69","state":"done"},{"e":["T4","T22"],"state":"examined"},{"e":["T35","T42"],"state":"examined"},{"e":["T36","T52"],"state":"examined"}]},{"say":"T13 starts at 6, when T12 finishes, and takes 2, so it finishes at 8. T22, T42 and T52 can't start before 8.","ops":[{"v":"T13","state":"current"},{"panel":"finish","set":{"T13":"8"}},{"e":["T13","T22"],"state":"latest"},{"e":["T13","T42"],"state":"latest"},{"e":["T13","T52"],"state":"latest"},{"v":"T71","state":"done"},{"e":["T16","T60"],"state":"examined"},{"e":["T38","T62"],"state":"examined"}]},{"say":"T17 starts at 6, when T12 finishes, and takes 2, so it finishes at 8. T60 and T62 can't start before 8.","ops":[{"v":"T17","state":"current"},{"panel":"finish","set":{"T17":"8"}},{"e":["T17","T60"],"state":"latest"},{"e":["T17","T62"],"state":"latest"},{"v":"T13","state":"done"},{"e":["T41","T50"],"state":"examined"}]},{"say":"T27 starts at 6, when T12 finishes, and takes 2, so it finishes at 8. T50 can't start before 8. T62 already waits at least that long for another task.","ops":[{"v":"T27","state":"current"},{"panel":"finish","set":{"T27":"8"}},{"e":["T27","T50"],"state":"latest"},{"e":["T27","T62"],"state":"examined"},{"v":"T17","state":"done"}]},{"say":"T28 starts at 6, when T12 finishes, and takes 2, so it finishes at 8. T50 already waits at least that long for another task.","ops":[{"v":"T28","state":"current"},{"panel":"finish","set":{"T28":"8"}},{"e":["T28","T50"],"state":"examined"},{"v":"T27","state":"done"},{"e":["T4","T21"],"state":"examined"},{"e":["T4","T23"],"state":"examined"}]},{"say":"T7 starts at 6, when T6 finishes, and takes 2, so it finishes at 8. T21 and T23 can't start before 8. T22 already waits at least that long for another task.","ops":[{"v":"T7","state":"current"},{"panel":"finish","set":{"T7":"8"}},{"e":["T7","T21"],"state":"latest"},{"e":["T7","T23"],"state":"latest"},{"e":["T7","T22"],"state":"examined"},{"v":"T28","state":"done"},{"e":["T35","T58"],"state":"examined"}]},{"say":"T9 starts at 6, when T6 finishes, and takes 2, so it finishes at 8. T58 can't start before 8. T22 already waits at least that long for another task.","ops":[{"v":"T9","state":"current"},{"panel":"finish","set":{"T9":"8"}},{"e":["T9","T58"],"state":"latest"},{"e":["T9","T22"],"state":"examined"},{"v":"T7","state":"done"},{"e":["T13","T42"],"state":"examined"},{"e":["T36","T43"],"state":"examined"},{"e":["T38","T47"],"state":"examined"},{"e":["T38","T48"],"state":"examined"},{"e":["T15","T49"],"state":"examined"},{"e":["T13","T52"],"state":"examined"},{"e":["T2","T57"],"state":"examined"},{"e":["T17","T60"],"state":"examined"},{"e":["T36","T61"],"state":"examined"},{"e":["T17","T62"],"state":"examined"},{"e":["T2","T63"],"state":"examined"}]},{"say":"T18 starts at 6, when T6 finishes, and takes 4, so it finishes at 10. 15 tasks that depend on T18 can't start before 10.","ops":[{"v":"T18","state":"current"},{"panel":"finish","set":{"T18":"10"}},{"e":["T18","T19"],"state":"latest"},{"e":["T18","T32"],"state":"latest"},{"e":["T18","T42"],"state":"latest"},{"e":["T18","T43"],"state":"latest"},{"e":["T18","T44"],"state":"latest"},{"e":["T18","T47"],"state":"latest"},{"e":["T18","T48"],"state":"latest"},{"e":["T18","T49"],"state":"latest"},{"e":["T18","T52"],"state":"latest"},{"e":["T18","T56"],"state":"latest"},{"e":["T18","T57"],"state":"latest"},{"e":["T18","T60"],"state":"latest"},{"e":["T18","T61"],"state":"latest"},{"e":["T18","T62"],"state":"latest"},{"e":["T18","T63"],"state":"latest"},{"v":"T9","state":"done"},{"e":["T10","T24"],"state":"examined"},{"e":["T4","T25"],"state":"examined"},{"e":["T36","T45"],"state":"examined"},{"e":["T11","T46"],"state":"examined"},{"e":["T35","T53"],"state":"examined"}]},{"say":"T20 starts at 6, when T6 finishes, and takes 2, so it finishes at 8. 5 tasks that depend on T20 can't start before 8. T32 and T43 already wait at least that long for other tasks.","ops":[{"v":"T20","state":"current"},{"panel":"finish","set":{"T20":"8"}},{"e":["T20","T24"],"state":"latest"},{"e":["T20","T25"],"state":"latest"},{"e":["T20","T45"],"state":"latest"},{"e":["T20","T46"],"state":"latest"},{"e":["T20","T53"],"state":"latest"},{"e":["T20","T32"],"state":"examined"},{"e":["T20","T43"],"state":"examined"},{"v":"T18","state":"done"}]},{"say":"T26 starts at 6, when T6 finishes, and takes 2, so it finishes at 8. T31 can't start before 8. T56, T60 and T63 already wait at least that long for other tasks.","ops":[{"v":"T26","state":"current"},{"panel":"finish","set":{"T26":"8"}},{"e":["T26","T31"],"state":"latest"},{"e":["T26","T56"],"state":"examined"},{"e":["T26","T60"],"state":"examined"},{"e":["T26","T63"],"state":"examined"},{"v":"T20","state":"done"},{"e":["T34","T40"],"state":"examined"},{"e":["T35","T64"],"state":"examined"},{"e":["T35","T98"],"state":"examined"}]},{"say":"T37 starts at 5, when T36 finishes, and takes 1, so it finishes at 6. T40, T64 and T98 can't start before 6. T46, T47 and T58 already wait at least that long for other tasks.","ops":[{"v":"T37","state":"current"},{"panel":"finish","set":{"T37":"6"}},{"e":["T37","T40"],"state":"latest"},{"e":["T37","T64"],"state":"latest"},{"e":["T37","T98"],"state":"latest"},{"e":["T37","T46"],"state":"examined"},{"e":["T37","T47"],"state":"examined"},{"e":["T37","T58"],"state":"examined"},{"v":"T26","state":"done"}]},{"say":"T39 starts at 5, when T36 finishes, and takes 1, so it finishes at 6. T44 already waits at least that long for another task.","ops":[{"v":"T39","state":"current"},{"panel":"finish","set":{"T39":"6"}},{"e":["T39","T44"],"state":"examined"},{"v":"T37","state":"done"}]},{"say":"T75 starts at 6, when T69 finishes, and takes 8, so it finishes at 14.","ops":[{"v":"T75","state":"current"},{"panel":"finish","set":{"T75":"14"}},{"v":"T39","state":"done"},{"e":["T27","T50"],"state":"examined"},{"e":["T36","T51"],"state":"examined"}]},{"say":"T21 starts at 8, when T7 finishes, and takes 2, so it finishes at 10. T50 and T51 can't start before 10. 7 others already wait at least that long for other tasks.","ops":[{"v":"T21","state":"current"},{"panel":"finish","set":{"T21":"10"}},{"e":["T21","T50"],"state":"latest"},{"e":["T21","T51"],"state":"latest"},{"e":["T21","T32"],"state":"examined"},{"e":["T21","T44"],"state":"examined"},{"e":["T21","T47"],"state":"examined"},{"e":["T21","T48"],"state":"examined"},{"e":["T21","T49"],"state":"examined"},{"e":["T21","T56"],"state":"examined"},{"e":["T21","T57"],"state":"examined"},{"v":"T75","state":"done"},{"e":["T20","T24"],"state":"examined"},{"e":["T18","T42"],"state":"examined"},{"e":["T18","T43"],"state":"examined"},{"e":["T18","T44"],"state":"examined"},{"e":["T20","T45"],"state":"examined"},{"e":["T20","T46"],"state":"examined"},{"e":["T18","T47"],"state":"examined"},{"e":["T18","T48"],"state":"examined"},{"e":["T18","T49"],"state":"examined"},{"e":["T21","T50"],"state":"examined"},{"e":["T21","T51"],"state":"examined"},{"e":["T18","T52"],"state":"examined"},{"e":["T20","T53"],"state":"examined"},{"e":["T38","T55"],"state":"examined"}]},{"say":"T23 starts at 8, when T7 finishes, and takes 4, so it finishes at 12. 14 tasks that depend on T23 can't start before 12.","ops":[{"v":"T23","state":"current"},{"panel":"finish","set":{"T23":"12"}},{"e":["T23","T24"],"state":"latest"},{"e":["T23","T42"],"state":"latest"},{"e":["T23","T43"],"state":"latest"},{"e":["T23","T44"],"state":"latest"},{"e":["T23","T45"],"state":"latest"},{"e":["T23","T46"],"state":"latest"},{"e":["T23","T47"],"state":"latest"},{"e":["T23","T48"],"state":"latest"},{"e":["T23","T49"],"state":"latest"},{"e":["T23","T50"],"state":"latest"},{"e":["T23","T51"],"state":"latest"},{"e":["T23","T52"],"state":"latest"},{"e":["T23","T53"],"state":"latest"},{"e":["T23","T55"],"state":"latest"},{"v":"T21","state":"done"},{"e":["T14","T29"],"state":"examined"},{"e":["T10","T30"],"state":"examined"},{"e":["T18","T32"],"state":"examined"},{"e":["T9","T58"],"state":"examined"}]},{"say":"T22 starts at 8, when T13 finishes, and takes 4, so it finishes at 12. 5 tasks that depend on T22 can't start before 12. T24 already waits at least that long for another task.","ops":[{"v":"T22","state":"current"},{"panel":"finish","set":{"T22":"12"}},{"e":["T22","T29"],"state":"latest"},{"e":["T22","T30"],"state":"latest"},{"e":["T22","T32"],"state":"latest"},{"e":["T22","T54"],"state":"latest"},{"e":["T22","T58"],"state":"latest"},{"e":["T22","T24"],"state":"examined"},{"v":"T23","state":"done"}]},{"say":"T19 starts at 10, when T18 finishes, and takes 2, so it finishes at 12. T59 can't start before 12.","ops":[{"v":"T19","state":"current"},{"panel":"finish","set":{"T19":"12"}},{"e":["T19","T59"],"state":"latest"},{"v":"T22","state":"done"},{"e":["T77","T95"],"state":"examined"}]},{"say":"T62 starts at 10, when T18 finishes, and takes 3, so it finishes at 13. T95 can't start before 13.","ops":[{"v":"T62","state":"current"},{"panel":"finish","set":{"T62":"13"}},{"e":["T62","T95"],"state":"latest"},{"v":"T19","state":"done"}]},{"say":"T25 starts at 8, when T20 finishes, and takes 2, so it finishes at 10. T45, T55 and T58 already wait at least that long for other tasks.","ops":[{"v":"T25","state":"current"},{"panel":"finish","set":{"T25":"10"}},{"e":["T25","T45"],"state":"examined"},{"e":["T25","T55"],"state":"examined"},{"e":["T25","T58"],"state":"examined"},{"v":"T62","state":"done"}]},{"say":"T31 starts at 8, when T26 finishes, and takes 2, so it finishes at 10. T54 already waits at least that long for another task.","ops":[{"v":"T31","state":"current"},{"panel":"finish","set":{"T31":"10"}},{"e":["T31","T54"],"state":"examined"},{"v":"T25","state":"done"}]},{"say":"T60 starts at 10, when T18 finishes, and takes 3, so it finishes at 13. T95 already waits at least that long for another task.","ops":[{"v":"T60","state":"current"},{"panel":"finish","set":{"T60":"13"}},{"e":["T60","T95"],"state":"examined"},{"v":"T31","state":"done"}]},{"say":"T63 starts at 10, when T18 finishes, and takes 3, so it finishes at 13. T95 already waits at least that long for another task.","ops":[{"v":"T63","state":"current"},{"panel":"finish","set":{"T63":"13"}},{"e":["T63","T95"],"state":"examined"},{"v":"T60","state":"done"}]},{"say":"T40 starts at 6, when T37 finishes, and takes 1, so it finishes at 7. T49 already waits at least that long for another task.","ops":[{"v":"T40","state":"current"},{"panel":"finish","set":{"T40":"7"}},{"e":["T40","T49"],"state":"examined"},{"v":"T63","state":"done"},{"e":["T69","T72"],"state":"examined"},{"e":["T69","T73"],"state":"examined"},{"e":["T65","T74"],"state":"examined"},{"e":["T68","T76"],"state":"examined"}]},{"say":"T64 starts at 6, when T37 finishes, and takes 2, so it finishes at 8. T72, T73, T74 and T76 can't start before 8.","ops":[{"v":"T64","state":"current"},{"panel":"finish","set":{"T64":"8"}},{"e":["T64","T72"],"state":"latest"},{"e":["T64","T73"],"state":"latest"},{"e":["T64","T74"],"state":"latest"},{"e":["T64","T76"],"state":"latest"},{"v":"T40","state":"done"},{"e":["T77","T92"],"state":"examined"}]},{"say":"T56 starts at 10, when T18 finishes, and takes 6, so it finishes at 16. T92 can't start before 16.","ops":[{"v":"T56","state":"current"},{"panel":"finish","set":{"T56":"16"}},{"e":["T56","T92"],"state":"latest"},{"v":"T64","state":"done"},{"e":["T77","T93"],"state":"examined"}]},{"say":"T57 starts at 10, when T18 finishes, and takes 6, so it finishes at 16. T93 can't start before 16.","ops":[{"v":"T57","state":"current"},{"panel":"finish","set":{"T57":"16"}},{"e":["T57","T93"],"state":"latest"},{"v":"T56","state":"done"},{"e":["T77","T79"],"state":"examined"}]},{"say":"T43 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T79 can't start before 18.","ops":[{"v":"T43","state":"current"},{"panel":"finish","set":{"T43":"18"}},{"e":["T43","T79"],"state":"latest"},{"v":"T57","state":"done"},{"e":["T77","T80"],"state":"examined"}]},{"say":"T44 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T80 can't start before 18.","ops":[{"v":"T44","state":"current"},{"panel":"finish","set":{"T44":"18"}},{"e":["T44","T80"],"state":"latest"},{"v":"T43","state":"done"},{"e":["T77","T82"],"state":"examined"}]},{"say":"T46 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T82 can't start before 18.","ops":[{"v":"T46","state":"current"},{"panel":"finish","set":{"T46":"18"}},{"e":["T46","T82"],"state":"latest"},{"v":"T44","state":"done"},{"e":["T77","T83"],"state":"examined"}]},{"say":"T47 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T83 can't start before 18.","ops":[{"v":"T47","state":"current"},{"panel":"finish","set":{"T47":"18"}},{"e":["T47","T83"],"state":"latest"},{"v":"T46","state":"done"},{"e":["T77","T86"],"state":"examined"}]},{"say":"T50 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T86 can't start before 18.","ops":[{"v":"T50","state":"current"},{"panel":"finish","set":{"T50":"18"}},{"e":["T50","T86"],"state":"latest"},{"v":"T47","state":"done"},{"e":["T77","T88"],"state":"examined"}]},{"say":"T52 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T88 can't start before 18.","ops":[{"v":"T52","state":"current"},{"panel":"finish","set":{"T52":"18"}},{"e":["T52","T88"],"state":"latest"},{"v":"T50","state":"done"},{"e":["T77","T89"],"state":"examined"}]},{"say":"T53 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T89 can't start before 18.","ops":[{"v":"T53","state":"current"},{"panel":"finish","set":{"T53":"18"}},{"e":["T53","T89"],"state":"latest"},{"v":"T52","state":"done"},{"e":["T23","T42"],"state":"examined"},{"e":["T22","T54"],"state":"examined"},{"e":["T22","T58"],"state":"examined"}]},{"say":"T24 starts at 12, when T23 finishes, and takes 3, so it finishes at 15. T42, T54 and T58 can't start before 15.","ops":[{"v":"T24","state":"current"},{"panel":"finish","set":{"T24":"15"}},{"e":["T24","T42"],"state":"latest"},{"e":["T24","T54"],"state":"latest"},{"e":["T24","T58"],"state":"latest"},{"v":"T53","state":"done"},{"e":["T23","T51"],"state":"examined"},{"e":["T18","T61"],"state":"examined"}]},{"say":"T29 starts at 12, when T22 finishes, and takes 2, so it finishes at 14. T51 and T61 can't start before 14.","ops":[{"v":"T29","state":"current"},{"panel":"finish","set":{"T29":"14"}},{"e":["T29","T51"],"state":"latest"},{"e":["T29","T61"],"state":"latest"},{"v":"T24","state":"done"},{"e":["T23","T48"],"state":"examined"}]},{"say":"T30 starts at 12, when T22 finishes, and takes 2, so it finishes at 14. T48 can't start before 14.","ops":[{"v":"T30","state":"current"},{"panel":"finish","set":{"T30":"14"}},{"e":["T30","T48"],"state":"latest"},{"v":"T29","state":"done"},{"e":["T37","T98"],"state":"examined"}]},{"say":"T32 starts at 12, when T22 finishes, and takes 5, so it finishes at 17. T98 can't start before 17.","ops":[{"v":"T32","state":"current"},{"panel":"finish","set":{"T32":"17"}},{"e":["T32","T98"],"state":"latest"},{"v":"T30","state":"done"},{"e":["T62","T95"],"state":"examined"}]},{"say":"T59 starts at 12, when T19 finishes, and takes 3, so it finishes at 15. T95 can't start before 15.","ops":[{"v":"T59","state":"current"},{"panel":"finish","set":{"T59":"15"}},{"e":["T59","T95"],"state":"latest"},{"v":"T32","state":"done"},{"e":["T77","T81"],"state":"examined"}]},{"say":"T45 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T81 can't start before 18.","ops":[{"v":"T45","state":"current"},{"panel":"finish","set":{"T45":"18"}},{"e":["T45","T81"],"state":"latest"},{"v":"T59","state":"done"},{"e":["T77","T91"],"state":"examined"}]},{"say":"T55 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T91 can't start before 18.","ops":[{"v":"T55","state":"current"},{"panel":"finish","set":{"T55":"18"}},{"e":["T55","T91"],"state":"latest"},{"v":"T45","state":"done"},{"e":["T77","T85"],"state":"examined"}]},{"say":"T49 starts at 12, when T23 finishes, and takes 6, so it finishes at 18. T85 can't start before 18.","ops":[{"v":"T49","state":"current"},{"panel":"finish","set":{"T49":"18"}},{"e":["T49","T85"],"state":"latest"},{"v":"T55","state":"done"},{"e":["T77","T94"],"state":"examined"}]},{"say":"T72 starts at 8, when T64 finishes, and takes 8, so it finishes at 16. T94 can't start before 16.","ops":[{"v":"T72","state":"current"},{"panel":"finish","set":{"T72":"16"}},{"e":["T72","T94"],"state":"latest"},{"v":"T49","state":"done"}]},{"say":"T73 starts at 8, when T64 finishes, and takes 8, so it finishes at 16. T94 already waits at least that long for another task.","ops":[{"v":"T73","state":"current"},{"panel":"finish","set":{"T73":"16"}},{"e":["T73","T94"],"state":"examined"},{"v":"T72","state":"done"}]},{"say":"T74 starts at 8, when T64 finishes, and takes 8, so it finishes at 16.","ops":[{"v":"T74","state":"current"},{"panel":"finish","set":{"T74":"16"}},{"v":"T73","state":"done"}]},{"say":"T76 starts at 8, when T64 finishes, and takes 8, so it finishes at 16.","ops":[{"v":"T76","state":"current"},{"panel":"finish","set":{"T76":"16"}},{"v":"T74","state":"done"}]},{"say":"T92 starts at 16, when T56 finishes, and takes 2, so it finishes at 18. T96 can't start before 18.","ops":[{"v":"T92","state":"current"},{"panel":"finish","set":{"T92":"18"}},{"e":["T92","T96"],"state":"latest"},{"v":"T76","state":"done"}]},{"say":"T93 starts at 16, when T57 finishes, and takes 2, so it finishes at 18. T96 already waits at least that long for another task.","ops":[{"v":"T93","state":"current"},{"panel":"finish","set":{"T93":"18"}},{"e":["T93","T96"],"state":"examined"},{"v":"T92","state":"done"},{"e":["T92","T96"],"state":"examined"}]},{"say":"T79 starts at 18, when T43 finishes, and takes 2, so it finishes at 20. T96 can't start before 20.","ops":[{"v":"T79","state":"current"},{"panel":"finish","set":{"T79":"20"}},{"e":["T79","T96"],"state":"latest"},{"v":"T93","state":"done"}]},{"say":"T80 starts at 18, when T44 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T80","state":"current"},{"panel":"finish","set":{"T80":"20"}},{"e":["T80","T96"],"state":"examined"},{"v":"T79","state":"done"}]},{"say":"T82 starts at 18, when T46 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T82","state":"current"},{"panel":"finish","set":{"T82":"20"}},{"e":["T82","T96"],"state":"examined"},{"v":"T80","state":"done"}]},{"say":"T83 starts at 18, when T47 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T83","state":"current"},{"panel":"finish","set":{"T83":"20"}},{"e":["T83","T96"],"state":"examined"},{"v":"T82","state":"done"}]},{"say":"T86 starts at 18, when T50 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T86","state":"current"},{"panel":"finish","set":{"T86":"20"}},{"e":["T86","T96"],"state":"examined"},{"v":"T83","state":"done"}]},{"say":"T88 starts at 18, when T52 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T88","state":"current"},{"panel":"finish","set":{"T88":"20"}},{"e":["T88","T96"],"state":"examined"},{"v":"T86","state":"done"}]},{"say":"T89 starts at 18, when T53 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T89","state":"current"},{"panel":"finish","set":{"T89":"20"}},{"e":["T89","T96"],"state":"examined"},{"v":"T88","state":"done"},{"e":["T77","T78"],"state":"examined"}]},{"say":"T42 starts at 15, when T24 finishes, and takes 6, so it finishes at 21. T78 can't start before 21.","ops":[{"v":"T42","state":"current"},{"panel":"finish","set":{"T42":"21"}},{"e":["T42","T78"],"state":"latest"},{"v":"T89","state":"done"},{"e":["T77","T90"],"state":"examined"}]},{"say":"T54 starts at 15, when T24 finishes, and takes 6, so it finishes at 21. T90 can't start before 21.","ops":[{"v":"T54","state":"current"},{"panel":"finish","set":{"T54":"21"}},{"e":["T54","T90"],"state":"latest"},{"v":"T42","state":"done"},{"e":["T72","T94"],"state":"examined"}]},{"say":"T58 starts at 15, when T24 finishes, and takes 6, so it finishes at 21. T94 can't start before 21.","ops":[{"v":"T58","state":"current"},{"panel":"finish","set":{"T58":"21"}},{"e":["T58","T94"],"state":"latest"},{"v":"T54","state":"done"},{"e":["T77","T87"],"state":"examined"}]},{"say":"T51 starts at 14, when T29 finishes, and takes 6, so it finishes at 20. T87 can't start before 20.","ops":[{"v":"T51","state":"current"},{"panel":"finish","set":{"T51":"20"}},{"e":["T51","T87"],"state":"latest"},{"v":"T58","state":"done"},{"e":["T59","T95"],"state":"examined"}]},{"say":"T61 starts at 14, when T29 finishes, and takes 3, so it finishes at 17. T95 can't start before 17.","ops":[{"v":"T61","state":"current"},{"panel":"finish","set":{"T61":"17"}},{"e":["T61","T95"],"state":"latest"},{"v":"T51","state":"done"},{"e":["T77","T84"],"state":"examined"}]},{"say":"T48 starts at 14, when T30 finishes, and takes 6, so it finishes at 20. T84 can't start before 20.","ops":[{"v":"T48","state":"current"},{"panel":"finish","set":{"T48":"20"}},{"e":["T48","T84"],"state":"latest"},{"v":"T61","state":"done"}]},{"say":"T98 starts at 17, when T32 finishes, and takes 10, so it finishes at 27. T99 can't start before 27.","ops":[{"v":"T98","state":"current"},{"panel":"finish","set":{"T98":"27"}},{"e":["T98","T99"],"state":"latest"},{"v":"T48","state":"done"}]},{"say":"T81 starts at 18, when T45 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T81","state":"current"},{"panel":"finish","set":{"T81":"20"}},{"e":["T81","T96"],"state":"examined"},{"v":"T98","state":"done"}]},{"say":"T91 starts at 18, when T55 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T91","state":"current"},{"panel":"finish","set":{"T91":"20"}},{"e":["T91","T96"],"state":"examined"},{"v":"T81","state":"done"}]},{"say":"T85 starts at 18, when T49 finishes, and takes 2, so it finishes at 20. T96 already waits at least that long for another task.","ops":[{"v":"T85","state":"current"},{"panel":"finish","set":{"T85":"20"}},{"e":["T85","T96"],"state":"examined"},{"v":"T91","state":"done"},{"e":["T79","T96"],"state":"examined"}]},{"say":"T78 starts at 21, when T42 finishes, and takes 2, so it finishes at 23. T96 can't start before 23.","ops":[{"v":"T78","state":"current"},{"panel":"finish","set":{"T78":"23"}},{"e":["T78","T96"],"state":"latest"},{"v":"T85","state":"done"}]},{"say":"T90 starts at 21, when T54 finishes, and takes 2, so it finishes at 23. T96 already waits at least that long for another task.","ops":[{"v":"T90","state":"current"},{"panel":"finish","set":{"T90":"23"}},{"e":["T90","T96"],"state":"examined"},{"v":"T78","state":"done"}]},{"say":"T94 starts at 21, when T58 finishes, and takes 2, so it finishes at 23. T96 already waits at least that long for another task.","ops":[{"v":"T94","state":"current"},{"panel":"finish","set":{"T94":"23"}},{"e":["T94","T96"],"state":"examined"},{"v":"T90","state":"done"}]},{"say":"T87 starts at 20, when T51 finishes, and takes 2, so it finishes at 22. T96 already waits at least that long for another task.","ops":[{"v":"T87","state":"current"},{"panel":"finish","set":{"T87":"22"}},{"e":["T87","T96"],"state":"examined"},{"v":"T94","state":"done"}]},{"say":"T95 starts at 17, when T61 finishes, and takes 2, so it finishes at 19. T96 already waits at least that long for another task.","ops":[{"v":"T95","state":"current"},{"panel":"finish","set":{"T95":"19"}},{"e":["T95","T96"],"state":"examined"},{"v":"T87","state":"done"}]},{"say":"T84 starts at 20, when T48 finishes, and takes 2, so it finishes at 22. T96 already waits at least that long for another task.","ops":[{"v":"T84","state":"current"},{"panel":"finish","set":{"T84":"22"}},{"e":["T84","T96"],"state":"examined"},{"v":"T95","state":"done"}]},{"say":"T96 starts at 23, when T78 finishes, and takes 1, so it finishes at 24. T97 and T100 can't start before 24.","ops":[{"v":"T96","state":"current"},{"panel":"finish","set":{"T96":"24"}},{"e":["T96","T97"],"state":"latest"},{"e":["T96","T100"],"state":"latest"},{"v":"T84","state":"done"},{"e":["T98","T99"],"state":"examined"}]},{"say":"T97 starts at 24, when T96 finishes, and takes 4, so it finishes at 28. T99 can't start before 28.","ops":[{"v":"T97","state":"current"},{"panel":"finish","set":{"T97":"28"}},{"e":["T97","T99"],"state":"latest"},{"v":"T96","state":"done"},{"e":["T96","T100"],"state":"examined"}]},{"say":"T99 starts at 28, when T97 finishes, and takes 20, so it finishes at 48. T100 can't start before 48.","ops":[{"v":"T99","state":"current"},{"panel":"finish","set":{"T99":"48"}},{"e":["T99","T100"],"state":"latest"},{"v":"T97","state":"done"}]},{"say":"T100 starts at 48, when T99 finishes, and takes 4, so it finishes at 52.","ops":[{"v":"T100","state":"current"},{"panel":"finish","set":{"T100":"52"}},{"v":"T99","state":"done"}]},{"say":"Of the tasks nothing depends on, T100 finishes last, at 52. Follow each task back to the dependency that set its start: T100, T99, T97, T96, T78, T42, T24, T23, T7, T6, and so on to T1.","ops":[{"v":"T100","state":"done"},{"e":["T2","T8"],"state":"idle"},{"e":["T66","T68"],"state":"idle"},{"e":["T67","T74"],"state":"idle"},{"e":["T3","T18"],"state":"idle"},{"e":["T3","T21"],"state":"idle"},{"e":["T5","T18"],"state":"idle"},{"e":["T11","T30"],"state":"idle"},{"e":["T8","T18"],"state":"idle"},{"e":["T8","T20"],"state":"idle"},{"e":["T8","T21"],"state":"idle"},{"e":["T8","T26"],"state":"idle"},{"e":["T8","T27"],"state":"idle"},{"e":["T8","T28"],"state":"idle"},{"e":["T8","T29"],"state":"idle"},{"e":["T34","T23"],"state":"idle"},{"e":["T67","T69"],"state":"idle"},{"e":["T67","T71"],"state":"idle"},{"e":["T67","T72"],"state":"idle"},{"e":["T68","T73"],"state":"idle"},{"e":["T68","T75"],"state":"idle"},{"e":["T1","T13"],"state":"idle"},{"e":["T11","T17"],"state":"idle"},{"e":["T4","T27"],"state":"idle"},{"e":["T4","T28"],"state":"idle"},{"e":["T5","T7"],"state":"idle"},{"e":["T2","T9"],"state":"idle"},{"e":["T4","T18"],"state":"idle"},{"e":["T4","T20"],"state":"idle"},{"e":["T4","T26"],"state":"idle"},{"e":["T34","T37"],"state":"idle"},{"e":["T34","T39"],"state":"idle"},{"e":["T14","T43"],"state":"idle"},{"e":["T11","T45"],"state":"idle"},{"e":["T14","T52"],"state":"idle"},{"e":["T36","T53"],"state":"idle"},{"e":["T36","T58"],"state":"idle"},{"e":["T36","T64"],"state":"idle"},{"e":["T36","T98"],"state":"idle"},{"e":["T11","T47"],"state":"idle"},{"e":["T38","T64"],"state":"idle"},{"e":["T38","T98"],"state":"idle"},{"e":["T68","T72"],"state":"idle"},{"e":["T70","T73"],"state":"idle"},{"e":["T70","T75"],"state":"idle"},{"e":["T71","T73"],"state":"idle"},{"e":["T71","T75"],"state":"idle"},{"e":["T4","T22"],"state":"idle"},{"e":["T35","T42"],"state":"idle"},{"e":["T36","T52"],"state":"idle"},{"e":["T16","T60"],"state":"idle"},{"e":["T38","T62"],"state":"idle"},{"e":["T41","T50"],"state":"idle"},{"e":["T27","T62"],"state":"idle"},{"e":["T28","T50"],"state":"idle"},{"e":["T4","T21"],"state":"idle"},{"e":["T4","T23"],"state":"idle"},{"e":["T7","T22"],"state":"idle"},{"e":["T35","T58"],"state":"idle"},{"e":["T9","T22"],"state":"idle"},{"e":["T13","T42"],"state":"idle"},{"e":["T36","T43"],"state":"idle"},{"e":["T38","T47"],"state":"idle"},{"e":["T38","T48"],"state":"idle"},{"e":["T15","T49"],"state":"idle"},{"e":["T13","T52"],"state":"idle"},{"e":["T2","T57"],"state":"idle"},{"e":["T17","T60"],"state":"idle"},{"e":["T36","T61"],"state":"idle"},{"e":["T17","T62"],"state":"idle"},{"e":["T2","T63"],"state":"idle"},{"e":["T10","T24"],"state":"idle"},{"e":["T4","T25"],"state":"idle"},{"e":["T36","T45"],"state":"idle"},{"e":["T11","T46"],"state":"idle"},{"e":["T35","T53"],"state":"idle"},{"e":["T20","T32"],"state":"idle"},{"e":["T20","T43"],"state":"idle"},{"e":["T26","T56"],"state":"idle"},{"e":["T26","T60"],"state":"idle"},{"e":["T26","T63"],"state":"idle"},{"e":["T34","T40"],"state":"idle"},{"e":["T35","T64"],"state":"idle"},{"e":["T35","T98"],"state":"idle"},{"e":["T37","T46"],"state":"idle"},{"e":["T37","T47"],"state":"idle"},{"e":["T37","T58"],"state":"idle"},{"e":["T39","T44"],"state":"idle"},{"e":["T27","T50"],"state":"idle"},{"e":["T36","T51"],"state":"idle"},{"e":["T21","T32"],"state":"idle"},{"e":["T21","T44"],"state":"idle"},{"e":["T21","T47"],"state":"idle"},{"e":["T21","T48"],"state":"idle"},{"e":["T21","T49"],"state":"idle"},{"e":["T21","T56"],"state":"idle"},{"e":["T21","T57"],"state":"idle"},{"e":["T20","T24"],"state":"idle"},{"e":["T18","T42"],"state":"idle"},{"e":["T18","T43"],"state":"idle"},{"e":["T18","T44"],"state":"idle"},{"e":["T20","T45"],"state":"idle"},{"e":["T20","T46"],"state":"idle"},{"e":["T18","T47"],"state":"idle"},{"e":["T18","T48"],"state":"idle"},{"e":["T18","T49"],"state":"idle"},{"e":["T21","T50"],"state":"idle"},{"e":["T21","T51"],"state":"idle"},{"e":["T18","T52"],"state":"idle"},{"e":["T20","T53"],"state":"idle"},{"e":["T38","T55"],"state":"idle"},{"e":["T14","T29"],"state":"idle"},{"e":["T10","T30"],"state":"idle"},{"e":["T18","T32"],"state":"idle"},{"e":["T9","T58"],"state":"idle"},{"e":["T22","T24"],"state":"idle"},{"e":["T77","T95"],"state":"idle"},{"e":["T25","T45"],"state":"idle"},{"e":["T25","T55"],"state":"idle"},{"e":["T25","T58"],"state":"idle"},{"e":["T31","T54"],"state":"idle"},{"e":["T60","T95"],"state":"idle"},{"e":["T63","T95"],"state":"idle"},{"e":["T40","T49"],"state":"idle"},{"e":["T69","T72"],"state":"idle"},{"e":["T69","T73"],"state":"idle"},{"e":["T65","T74"],"state":"idle"},{"e":["T68","T76"],"state":"idle"},{"e":["T77","T92"],"state":"idle"},{"e":["T77","T93"],"state":"idle"},{"e":["T77","T79"],"state":"idle"},{"e":["T77","T80"],"state":"idle"},{"e":["T77","T82"],"state":"idle"},{"e":["T77","T83"],"state":"idle"},{"e":["T77","T86"],"state":"idle"},{"e":["T77","T88"],"state":"idle"},{"e":["T77","T89"],"state":"idle"},{"e":["T23","T42"],"state":"idle"},{"e":["T22","T54"],"state":"idle"},{"e":["T22","T58"],"state":"idle"},{"e":["T23","T51"],"state":"idle"},{"e":["T18","T61"],"state":"idle"},{"e":["T23","T48"],"state":"idle"},{"e":["T37","T98"],"state":"idle"},{"e":["T62","T95"],"state":"idle"},{"e":["T77","T81"],"state":"idle"},{"e":["T77","T91"],"state":"idle"},{"e":["T77","T85"],"state":"idle"},{"e":["T77","T94"],"state":"idle"},{"e":["T73","T94"],"state":"idle"},{"e":["T93","T96"],"state":"idle"},{"e":["T92","T96"],"state":"idle"},{"e":["T80","T96"],"state":"idle"},{"e":["T82","T96"],"state":"idle"},{"e":["T83","T96"],"state":"idle"},{"e":["T86","T96"],"state":"idle"},{"e":["T88","T96"],"state":"idle"},{"e":["T89","T96"],"state":"idle"},{"e":["T77","T78"],"state":"idle"},{"e":["T77","T90"],"state":"idle"},{"e":["T72","T94"],"state":"idle"},{"e":["T77","T87"],"state":"idle"},{"e":["T59","T95"],"state":"idle"},{"e":["T77","T84"],"state":"idle"},{"e":["T81","T96"],"state":"idle"},{"e":["T91","T96"],"state":"idle"},{"e":["T85","T96"],"state":"idle"},{"e":["T79","T96"],"state":"idle"},{"e":["T90","T96"],"state":"idle"},{"e":["T94","T96"],"state":"idle"},{"e":["T87","T96"],"state":"idle"},{"e":["T95","T96"],"state":"idle"},{"e":["T84","T96"],"state":"idle"},{"e":["T98","T99"],"state":"idle"},{"e":["T96","T100"],"state":"idle"},{"v":"T1","state":"critical"},{"v":"T5","state":"critical"},{"e":["T1","T5"],"state":"critical"},{"v":"T6","state":"critical"},{"e":["T5","T6"],"state":"critical"},{"v":"T7","state":"critical"},{"e":["T6","T7"],"state":"critical"},{"v":"T23","state":"critical"},{"e":["T7","T23"],"state":"critical"},{"v":"T24","state":"critical"},{"e":["T23","T24"],"state":"critical"},{"v":"T42","state":"critical"},{"e":["T24","T42"],"state":"critical"},{"v":"T78","state":"critical"},{"e":["T42","T78"],"state":"critical"},{"v":"T96","state":"critical"},{"e":["T78","T96"],"state":"critical"},{"v":"T97","state":"critical"},{"e":["T96","T97"],"state":"critical"},{"v":"T99","state":"critical"},{"e":["T97","T99"],"state":"critical"},{"v":"T100","state":"critical"},{"e":["T99","T100"],"state":"critical"},{"panel":"order","list":[{"key":"T1","note":"takes 2"},{"key":"T5","note":"takes 2"},{"key":"T6","note":"takes 2"},{"key":"T7","note":"takes 2"},{"key":"T23","note":"takes 4"},{"key":"T24","note":"takes 3"},{"key":"T42","note":"takes 6"},{"key":"T78","note":"takes 2"},{"key":"T96","note":"takes 1"},{"key":"T97","note":"takes 4"},{"key":"T99","note":"takes 20"},{"key":"T100","note":"takes 4"}]}]},{"say":"Done. The critical path takes 52, against 337 for every task one after another. The other tasks finish before anything on the path needs them."}],"traceNote":"","verification":"The steps come from a step-by-step copy of the algorithm. Its result is checked against gograph's on every start.","snippet":"path, cost, err := dag.CriticalPath(g)\nif err != nil {\n\treturn err\n}\nfor _, v := range path {\n\tfmt.Println(v.Label(), v.Weight())\n}\nfmt.Println(cost)"}
