Stepping Through Diagrams
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:20Try to reproduce our tunnelling bug
🏃
0:20Try to reproduce our tunnelling bug
🏃
0:20Try to reproduce our tunnelling bug
🏃
2:36Hit a corner embedding bug
🏃
2:36Hit a corner embedding bug
🏃
2:36Hit a corner embedding bug
🏃
5:12Diagramming displacement upon camera re-centering
🏃
5:12Diagramming displacement upon camera re-centering
🏃
5:12Diagramming displacement upon camera re-centering
🏃
10:40Double-check that we checked Day 643
🗹
10:40Double-check that we checked Day 643
🗹
10:40Double-check that we checked Day 643
🗹
11:21Consider re-centering the debug visualisation with the camera
📖
11:21Consider re-centering the debug visualisation with the camera
📖
11:21Consider re-centering the debug visualisation with the camera
📖
13:11Introduce OffsetDebugDiagrams() for UpdateAndRenderWorld() to call
13:11Introduce OffsetDebugDiagrams() for UpdateAndRenderWorld() to call
13:11Introduce OffsetDebugDiagrams() for UpdateAndRenderWorld() to call
17:48Reacquaint ourselves with the lighting re-centering code
📖
17:48Reacquaint ourselves with the lighting re-centering code
📖
17:48Reacquaint ourselves with the lighting re-centering code
📖
20:10Unify the camera offset, introducing DIAGRAM_SetOrigin() and augmenting diagram_group with LastOriginP
20:10Unify the camera offset, introducing DIAGRAM_SetOrigin() and augmenting diagram_group with LastOriginP
20:10Unify the camera offset, introducing DIAGRAM_SetOrigin() and augmenting diagram_group with LastOriginP
27:49Our diagram offsetting is slightly off
🏃
27:49Our diagram offsetting is slightly off
🏃
27:49Our diagram offsetting is slightly off
🏃
27:58Fix the Diagram_Sphere case in DIAGRAM_SetOrigin()
27:58Fix the Diagram_Sphere case in DIAGRAM_SetOrigin()
27:58Fix the Diagram_Sphere case in DIAGRAM_SetOrigin()
28:27Our diagram offsetting remains slightly off
🏃
28:27Our diagram offsetting remains slightly off
🏃
28:27Our diagram offsetting remains slightly off
🏃
28:36Invert the Offset computation in DIAGRAM_SetOrigin()
28:36Invert the Offset computation in DIAGRAM_SetOrigin()
28:36Invert the Offset computation in DIAGRAM_SetOrigin()
29:02Our diagram offsetting remains slightly off
🏃
29:02Our diagram offsetting remains slightly off
🏃
29:02Our diagram offsetting remains slightly off
🏃
29:26Investigate our incorrect offsetting in DIAGRAM_SetOrigin()
📖
29:26Investigate our incorrect offsetting in DIAGRAM_SetOrigin()
📖
29:26Investigate our incorrect offsetting in DIAGRAM_SetOrigin()
📖
32:49Revert the orientation of the Offset computation in DIAGRAM_SetOrigin()
32:49Revert the orientation of the Offset computation in DIAGRAM_SetOrigin()
32:49Revert the orientation of the Offset computation in DIAGRAM_SetOrigin()
33:04Try to understand our offsetting incorrectness
🏃
33:04Try to understand our offsetting incorrectness
🏃
33:04Try to understand our offsetting incorrectness
🏃
35:37Investigate our incorrect offsetting in DIAGRAM_SetOrigin() (cont.)
📖
35:37Investigate our incorrect offsetting in DIAGRAM_SetOrigin() (cont.)
📖
35:37Investigate our incorrect offsetting in DIAGRAM_SetOrigin() (cont.)
📖
37:08Step in to DIAGRAM_SetOrigin()
🏃
37:08Step in to DIAGRAM_SetOrigin()
🏃
37:08Step in to DIAGRAM_SetOrigin()
🏃
39:11Make DIAGRAM_SetOrigin() offset the diagrams when LastOriginP and OriginP differ
39:11Make DIAGRAM_SetOrigin() offset the diagrams when LastOriginP and OriginP differ
39:11Make DIAGRAM_SetOrigin() offset the diagrams when LastOriginP and OriginP differ
39:47Our diagram offsetting is now perfect
🏃
39:47Our diagram offsetting is now perfect
🏃
39:47Our diagram offsetting is now perfect
🏃
40:30Demo the need for stepping through diagrams
🏃
40:30Demo the need for stepping through diagrams
🏃
40:30Demo the need for stepping through diagrams
🏃
41:31Plan to support stepping through diagrams
📖
41:31Plan to support stepping through diagrams
📖
41:31Plan to support stepping through diagrams
📖
43:15Enable RenderDiagrams() to filter diagrams
43:15Enable RenderDiagrams() to filter diagrams
43:15Enable RenderDiagrams() to filter diagrams
54:27We see no diagrams
🏃
54:27We see no diagrams
🏃
54:27We see no diagrams
🏃
54:41Make RenderDiagrams() initialise ShouldDraw to true
54:41Make RenderDiagrams() initialise ShouldDraw to true
54:41Make RenderDiagrams() initialise ShouldDraw to true
55:01We see diagrams
🏃
55:01We see diagrams
🏃
55:01We see diagrams
🏃
55:08Discover 4coder Fleury right-clicking purple
🗹
55:08Discover 4coder Fleury right-clicking purple
🗹
55:08Discover 4coder Fleury right-clicking purple
🗹
56:10Make CollisionEditor() create diagram filter hierarchy stepping buttons
56:10Make CollisionEditor() create diagram filter hierarchy stepping buttons
56:10Make CollisionEditor() create diagram filter hierarchy stepping buttons
1:01:49Try out our diagram filter buttons
🏃
1:01:49Try out our diagram filter buttons
🏃
1:01:49Try out our diagram filter buttons
🏃
1:02:38Make CollisionEditor() draw the Up / Down buttons on the same line
1:02:38Make CollisionEditor() draw the Up / Down buttons on the same line
1:02:38Make CollisionEditor() draw the Up / Down buttons on the same line
1:03:03Try out our diagram filter buttons
🏃
1:03:03Try out our diagram filter buttons
🏃
1:03:03Try out our diagram filter buttons
🏃
1:03:18Make CollisionEditor() create a diagram stepping slider
1:03:18Make CollisionEditor() create a diagram stepping slider
1:03:18Make CollisionEditor() create a diagram stepping slider
1:05:10Hit a read access violation in EditablePx()
🏃
1:05:10Hit a read access violation in EditablePx()
🏃
1:05:10Hit a read access violation in EditablePx()
🏃
1:05:30Fix CollisionEditor() to only create the diagram stepping slider when valid
1:05:30Fix CollisionEditor() to only create the diagram stepping slider when valid
1:05:30Fix CollisionEditor() to only create the diagram stepping slider when valid
1:05:46Try out our diagram stepping slider
🏃
1:05:46Try out our diagram stepping slider
🏃
1:05:46Try out our diagram stepping slider
🏃
1:06:08Fix CollisionEditor() to print the filter max depth as a u32
1:06:08Fix CollisionEditor() to print the filter max depth as a u32
1:06:08Fix CollisionEditor() to print the filter max depth as a u32
1:06:28Try out our diagram stepping slider
🏃
1:06:28Try out our diagram stepping slider
🏃
1:06:28Try out our diagram stepping slider
🏃
1:07:11Scour RenderDiagrams() for bugs
📖
1:07:11Scour RenderDiagrams() for bugs
📖
1:07:11Scour RenderDiagrams() for bugs
📖
1:08:49Reduce the verbosity of RenderDiagrams()
1:08:49Reduce the verbosity of RenderDiagrams()
1:08:49Reduce the verbosity of RenderDiagrams()
1:09:25Scour RenderDiagrams() for bugs (cont.)
📖
1:09:25Scour RenderDiagrams() for bugs (cont.)
📖
1:09:25Scour RenderDiagrams() for bugs (cont.)
📖
1:10:23Fix RenderDiagrams() to set whether we ShouldDraw a filter level, before preparing ShouldDraw for the next filter level
1:10:23Fix RenderDiagrams() to set whether we ShouldDraw a filter level, before preparing ShouldDraw for the next filter level
1:10:23Fix RenderDiagrams() to set whether we ShouldDraw a filter level, before preparing ShouldDraw for the next filter level
1:10:43Try out our diagram filtering buttons and stepping slider
🏃
1:10:43Try out our diagram filtering buttons and stepping slider
🏃
1:10:43Try out our diagram filtering buttons and stepping slider
🏃
1:11:56Make EditablePx() take a specified dX value
1:11:56Make EditablePx() take a specified dX value
1:11:56Make EditablePx() take a specified dX value
1:12:58Try out our more precise diagram stepping slider
🏃
1:12:58Try out our more precise diagram stepping slider
🏃
1:12:58Try out our more precise diagram stepping slider
🏃
1:13:14Surpassing the total diagram count is problematic
🏃
1:13:14Surpassing the total diagram count is problematic
🏃
1:13:14Surpassing the total diagram count is problematic
🏃
1:14:02Scour RenderDiagrams() for diagram stepping bugs (cont.)
📖
1:14:02Scour RenderDiagrams() for diagram stepping bugs (cont.)
📖
1:14:02Scour RenderDiagrams() for diagram stepping bugs (cont.)
📖
1:15:35Make RenderDiagrams() assert that DiagramDepth ends up 0
1:15:35Make RenderDiagrams() assert that DiagramDepth ends up 0
1:15:35Make RenderDiagrams() assert that DiagramDepth ends up 0
1:15:55Hit that assertion in RenderDiagrams()
🏃
1:15:55Hit that assertion in RenderDiagrams()
🏃
1:15:55Hit that assertion in RenderDiagrams()
🏃
1:16:01Check if our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:16:01Check if our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:16:01Check if our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:17:13Hit that assertion in RenderDiagrams() and see that DiagramDepth ends up 1
🏃
1:17:13Hit that assertion in RenderDiagrams() and see that DiagramDepth ends up 1
🏃
1:17:13Hit that assertion in RenderDiagrams() and see that DiagramDepth ends up 1
🏃
1:19:10Consider how best to balance the DIAGRAM_Begin() and DIAGRAM_End() calls in the "Collision Voxel" loop of MoveEntity()
📖
1:19:10Consider how best to balance the DIAGRAM_Begin() and DIAGRAM_End() calls in the "Collision Voxel" loop of MoveEntity()
📖
1:19:10Consider how best to balance the DIAGRAM_Begin() and DIAGRAM_End() calls in the "Collision Voxel" loop of MoveEntity()
📖
1:21:42Balance the DIAGRAM_Begin() and DIAGRAM_End() calls in the "Collision Voxel" loop of MoveEntity()
1:21:42Balance the DIAGRAM_Begin() and DIAGRAM_End() calls in the "Collision Voxel" loop of MoveEntity()
1:21:42Balance the DIAGRAM_Begin() and DIAGRAM_End() calls in the "Collision Voxel" loop of MoveEntity()
1:22:29Still hit the DiagramDepth == 0 assertion in RenderDiagrams()
🏃
1:22:29Still hit the DiagramDepth == 0 assertion in RenderDiagrams()
🏃
1:22:29Still hit the DiagramDepth == 0 assertion in RenderDiagrams()
🏃
1:23:24Double-check that our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:23:24Double-check that our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:23:24Double-check that our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:24:23Try unsuccessfully to hit our DiagramDepth == 0 assertion in -Od
🏃
1:24:23Try unsuccessfully to hit our DiagramDepth == 0 assertion in -Od
🏃
1:24:23Try unsuccessfully to hit our DiagramDepth == 0 assertion in -Od
🏃
1:25:42Hit the DiagramDepth == 0 assertion in -O2 and see from the asm that DiagramDepth ends up 1
🏃
1:25:42Hit the DiagramDepth == 0 assertion in -O2 and see from the asm that DiagramDepth ends up 1
🏃
1:25:42Hit the DiagramDepth == 0 assertion in -O2 and see from the asm that DiagramDepth ends up 1
🏃
1:26:36Double-check that our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:26:36Double-check that our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:26:36Double-check that our DIAGRAM_Begin() and DIAGRAM_End() calls are balanced
📖
1:27:32Fix MoveEntity() to call DIAGRAM_End() before DIAGRAM_Capture()
1:27:32Fix MoveEntity() to call DIAGRAM_End() before DIAGRAM_Capture()
1:27:32Fix MoveEntity() to call DIAGRAM_End() before DIAGRAM_Capture()
1:27:58Try stepping through our diagrams
🏃
1:27:58Try stepping through our diagrams
🏃
1:27:58Try stepping through our diagrams
🏃
1:29:31Scour RenderDiagrams() for diagram filtering bugs
📖
1:29:31Scour RenderDiagrams() for diagram filtering bugs
📖
1:29:31Scour RenderDiagrams() for diagram filtering bugs
📖
1:31:23Fix RenderDiagrams() to reset the DiagramIndex to 0 on Diagram_End
1:31:23Fix RenderDiagrams() to reset the DiagramIndex to 0 on Diagram_End
1:31:23Fix RenderDiagrams() to reset the DiagramIndex to 0 on Diagram_End
1:32:07Try stepping through our diagrams at various filter levels
🏃
1:32:07Try stepping through our diagrams at various filter levels
🏃
1:32:07Try stepping through our diagrams at various filter levels
🏃
1:34:49Try setting FundamentalUnit to 1.375 in PlayWorld(), to make that and MOTION_DISPLACEMENT_SIZE well-defined in relation to each other
1:34:49Try setting FundamentalUnit to 1.375 in PlayWorld(), to make that and MOTION_DISPLACEMENT_SIZE well-defined in relation to each other
1:34:49Try setting FundamentalUnit to 1.375 in PlayWorld(), to make that and MOTION_DISPLACEMENT_SIZE well-defined in relation to each other
1:37:00Our glove still gets stuck
🏃
1:37:00Our glove still gets stuck
🏃
1:37:00Our glove still gets stuck
🏃
1:37:14Our simulation centres don't move by an even amount
📖
1:37:14Our simulation centres don't move by an even amount
📖
1:37:14Our simulation centres don't move by an even amount
📖
1:37:52Consider fixing our collision voxel sliding issue
🏃
1:37:52Consider fixing our collision voxel sliding issue
🏃
1:37:52Consider fixing our collision voxel sliding issue
🏃
1:38:17Reacquaint ourselves with the simulation centering code in UpdateCameraForEntityMovement()
📖
1:38:17Reacquaint ourselves with the simulation centering code in UpdateCameraForEntityMovement()
📖
1:38:17Reacquaint ourselves with the simulation centering code in UpdateCameraForEntityMovement()
📖
1:39:17Consider rounding the SimulationCenter to the FundamentalUnit
📖
1:39:17Consider rounding the SimulationCenter to the FundamentalUnit
📖
1:39:17Consider rounding the SimulationCenter to the FundamentalUnit
📖
1:41:04Revert the FundamentalUnit to 1.4 in PlayWorld(), and make UpdateCameraForEntityMovement() round the SimulationCenter to the MOTION_DISPLACEMENT_SIZE
1:41:04Revert the FundamentalUnit to 1.4 in PlayWorld(), and make UpdateCameraForEntityMovement() round the SimulationCenter to the MOTION_DISPLACEMENT_SIZE
1:41:04Revert the FundamentalUnit to 1.4 in PlayWorld(), and make UpdateCameraForEntityMovement() round the SimulationCenter to the MOTION_DISPLACEMENT_SIZE
1:42:22No longer hit that camera movement-based sticking bug
🏃
1:42:22No longer hit that camera movement-based sticking bug
🏃
1:42:22No longer hit that camera movement-based sticking bug
🏃
1:43:09Embed in a wall, and step through the diagrams
🏃
1:43:09Embed in a wall, and step through the diagrams
🏃
1:43:09Embed in a wall, and step through the diagrams
🏃
1:44:48Introduce AlignToMovementVoxel() for UpdateCameraForEntityMovement() to call
1:44:48Introduce AlignToMovementVoxel() for UpdateCameraForEntityMovement() to call
1:44:48Introduce AlignToMovementVoxel() for UpdateCameraForEntityMovement() to call
1:48:12Reflect on our diagram stepping
🏃
1:48:12Reflect on our diagram stepping
🏃
1:48:12Reflect on our diagram stepping
🏃
1:49:03Hit a collision detection bug
🏃
1:49:03Hit a collision detection bug
🏃
1:49:03Hit a collision detection bug
🏃
1:50:02Investigate our collision detection bug
📖
1:50:02Investigate our collision detection bug
📖
1:50:02Investigate our collision detection bug
📖
1:51:35Reproduce a collision detection bug
🏃
1:51:35Reproduce a collision detection bug
🏃
1:51:35Reproduce a collision detection bug
🏃
1:52:29Consider enabling ShapesCollide() to dump the diagram data
🏃
1:52:29Consider enabling ShapesCollide() to dump the diagram data
🏃
1:52:29Consider enabling ShapesCollide() to dump the diagram data
🏃
1:57:14Q&A
🗩
1:57:14Q&A
🗩
1:57:14Q&A
🗩
1:57:35sir_klausi Maybe it's a gigantic box and not a little one?
🗪
1:57:35sir_klausi Maybe it's a gigantic box and not a little one?
🗪
1:57:35sir_klausi Maybe it's a gigantic box and not a little one?
🗪
1:57:49mindmark42 Q: Could it be the hero's head? Odd it's not drawing it
🗪
1:57:49mindmark42 Q: Could it be the hero's head? Odd it's not drawing it
🗪
1:57:49mindmark42 Q: Could it be the hero's head? Odd it's not drawing it
🗪
1:58:11centhusiast Q: Can we move diagonally in the game?
🗪
1:58:11centhusiast Q: Can we move diagonally in the game?
🗪
1:58:11centhusiast Q: Can we move diagonally in the game?
🗪
1:58:25vaualbus Q: Can we not write somewhere like in the debug output the box P and size?
🗪
1:58:25vaualbus Q: Can we not write somewhere like in the debug output the box P and size?
🗪
1:58:25vaualbus Q: Can we not write somewhere like in the debug output the box P and size?
🗪
1:59:27mindmark42 Q: Is the refinement still running?
🗪
1:59:27mindmark42 Q: Is the refinement still running?
🗪
1:59:27mindmark42 Q: Is the refinement still running?
🗪
1:59:43longboolean Q: So is the bug that it got this bug in the corner and then it got launched into the wall, explaining the tunneling?
🗪
1:59:43longboolean Q: So is the bug that it got this bug in the corner and then it got launched into the wall, explaining the tunneling?
🗪
1:59:43longboolean Q: So is the bug that it got this bug in the corner and then it got launched into the wall, explaining the tunneling?
🗪
1:59:57centhusiast Q: Do we still use the entity cache system? I remember it was a cool thing introduced in Handmade Hero
🗪
1:59:57centhusiast Q: Do we still use the entity cache system? I remember it was a cool thing introduced in Handmade Hero
🗪
1:59:57centhusiast Q: Do we still use the entity cache system? I remember it was a cool thing introduced in Handmade Hero
🗪
2:00:45longboolean Q: So you don't think the mystery box pushed it into the wall?
🗪
2:00:45longboolean Q: So you don't think the mystery box pushed it into the wall?
🗪
2:00:45longboolean Q: So you don't think the mystery box pushed it into the wall?
🗪
2:01:57sagian2005 Q: Maybe the opposite is happening here: It's colliding then the camera is moving?
🗪
2:01:57sagian2005 Q: Maybe the opposite is happening here: It's colliding then the camera is moving?
🗪
2:01:57sagian2005 Q: Maybe the opposite is happening here: It's colliding then the camera is moving?
🗪
2:02:03Try to reproduce our collision detection bug
🏃
2:02:03Try to reproduce our collision detection bug
🏃
2:02:03Try to reproduce our collision detection bug
🏃
2:05:12okprogamer Q: We can ask general questions now?
🗪
2:05:12okprogamer Q: We can ask general questions now?
🗪
2:05:12okprogamer Q: We can ask general questions now?
🗪
2:05:33Try to reproduce our collision detection bug (cont.)
🏃
2:05:33Try to reproduce our collision detection bug (cont.)
🏃
2:05:33Try to reproduce our collision detection bug (cont.)
🏃
2:06:00Step through the diagrams of our collision detection bug
🏃
2:06:00Step through the diagrams of our collision detection bug
🏃
2:06:00Step through the diagrams of our collision detection bug
🏃
2:08:51sagian2005 Q: What is that line going off to the left?
🗪
2:08:51sagian2005 Q: What is that line going off to the left?
🗪
2:08:51sagian2005 Q: What is that line going off to the left?
🗪
2:09:34ablindorphan Q: Are the direction indicators normalised? Any way to also visualise the magnitude?
🗪
2:09:34ablindorphan Q: Are the direction indicators normalised? Any way to also visualise the magnitude?
🗪
2:09:34ablindorphan Q: Are the direction indicators normalised? Any way to also visualise the magnitude?
🗪
2:11:40Investigate the possibility of us having an inverted phantom box
📖
2:11:40Investigate the possibility of us having an inverted phantom box
📖
2:11:40Investigate the possibility of us having an inverted phantom box
📖
2:12:29Assert in ShapesCollide() that each box HasArea()
2:12:29Assert in ShapesCollide() that each box HasArea()
2:12:29Assert in ShapesCollide() that each box HasArea()
2:13:04Hit our assertion in ShapesCollide()
🏃
2:13:04Hit our assertion in ShapesCollide()
🏃
2:13:04Hit our assertion in ShapesCollide()
🏃
2:13:37Hit our assertion in ShapesCollide() in -Od and inspect the phantom boxes
🏃
2:13:37Hit our assertion in ShapesCollide() in -Od and inspect the phantom boxes
🏃
2:13:37Hit our assertion in ShapesCollide() in -Od and inspect the phantom boxes
🏃
2:15:04Make CollidesAtP() only check for collisions if the TestEntity->CollisionVolume HasArea()
2:15:04Make CollidesAtP() only check for collisions if the TestEntity->CollisionVolume HasArea()
2:15:04Make CollidesAtP() only check for collisions if the TestEntity->CollisionVolume HasArea()
2:16:44Provisionally consider our collision detection bug to be fixed
🏃
2:16:44Provisionally consider our collision detection bug to be fixed
🏃
2:16:44Provisionally consider our collision detection bug to be fixed
🏃
2:18:26Wrap it up with a plug of Meow the Infinite: Book Two1
🗩
2:18:26Wrap it up with a plug of Meow the Infinite: Book Two1
🗩
2:18:26Wrap it up with a plug of Meow the Infinite: Book Two1
🗩
2:19:46sagian2005 Your camera is still flipped. Meow is backwards
🗪
2:19:46sagian2005 Your camera is still flipped. Meow is backwards
🗪
2:19:46sagian2005 Your camera is still flipped. Meow is backwards
🗪
2:20:19Finish wrapping it up with the determination to see what those phantom entities were, and plugs of the Cryptocurrency interviews and Babylon 5 season one recap with Jonas Kyratzes
🗩
2:20:19Finish wrapping it up with the determination to see what those phantom entities were, and plugs of the Cryptocurrency interviews and Babylon 5 season one recap with Jonas Kyratzes
🗩
2:20:19Finish wrapping it up with the determination to see what those phantom entities were, and plugs of the Cryptocurrency interviews and Babylon 5 season one recap with Jonas Kyratzes
🗩