Commit graph

2132 commits

Author SHA1 Message Date
Blake Harnden
388ae44cf2 daemon: small adjustment/cleanup to shutting down all sessions from coreemu 2022-04-04 09:15:34 -07:00
Blake Harnden
543e9982c0 daemon: apply wireless link label even for 0 to force gui update for now 2022-04-02 22:08:59 -07:00
Blake Harnden
42cd1a1019 daemon: force wireless link config options2 to have netem to force a clear/update 2022-04-01 21:30:42 -07:00
Blake Harnden
559cac18e8 grpc: fixed wireless config client/server 2022-04-01 21:23:58 -07:00
Blake Harnden
9d97699b1f daemon: fixed issue starting session and clearing session options, small cleanup to SessionOptions init 2022-04-01 11:46:28 -07:00
Blake Harnden
5d4642006c daemon: added core player writer and player to core library and added wireless event handling, fixed issues with wireless nodes being written to xml 2022-03-31 16:31:20 -07:00
Blake Harnden
ba0e4adb04 Merge branch 'develop' into enhancement/core-player 2022-03-31 09:57:53 -07:00
Blake Harnden
84acb82c18 daemon/grpc/gui: further updates for a new working wireless node, added grpc support for control and additions to gui for creation 2022-03-30 21:13:28 -07:00
Blake Harnden
e4a6ecf3c2 daemon: initial code to support a new style wireless approach 2022-03-29 12:16:07 -07:00
Blake Harnden
73aaa8ca18 daemon: updated bad doc string 2022-03-25 10:53:52 -07:00
Blake Harnden
1fa0ac25b5 gui: removed host from node model types and updated node config to only display type 2022-03-24 17:15:44 -07:00
Blake Harnden
26f0848cb4 daemon: update iface to use desired name when configuring, gui: dont assign mac to non container nodes 2022-03-22 21:08:31 -07:00
Blake Harnden
d83bfed608 merged latest updates from develop 2022-03-22 10:03:03 -07:00
bharnden
e3466f0669
Merge pull request #677 from coreemu/enhancement/consistent-linking
Enhancement/consistent linking
2022-03-22 09:47:29 -07:00
Blake Harnden
6d8ae4af2e core-cli: add geo position to node output for query session and node 2022-03-21 21:35:05 -07:00
Blake Harnden
2df8aa4379 updated version to 8.2.0 for next release 2022-03-21 21:04:43 -07:00
Blake Harnden
b941395100 core-cli: updates to add back json output 2022-03-21 20:59:18 -07:00
Blake Harnden
5398cdd2d5 core-cli: fixed xml load call to use the right parameter type 2022-03-21 15:57:13 -07:00
Blake Harnden
7ed007496c daemon: add linked method to session and grpc support leveraging new linking semantics, update add_link validation check 2022-03-21 15:42:14 -07:00
Blake Harnden
e5e14ad67b grpc: added wlan/emane links to grpc calls to allow knowing initial wireless link state, same as before changes 2022-03-21 09:55:57 -07:00
Blake Harnden
dc9b6adc98 daemon/gui: adjustments to account for network node wired links having proper interface ids, which allow for unique configuration with the new linking semantics 2022-03-18 15:53:13 -07:00
Blake Harnden
b71272519d daemon: revamp to align gre tunnels for distributed to align with changes, also moved gre tunnels for wired links to occur directly when linking, allowing runtime distributed functionality, also updates to phyical node to leverage a core node, but avoid using namespacing 2022-03-18 12:31:04 -07:00
Blake Harnden
8c24e9cfa6 daemon: updates to fix rj45 to account for iface link revamp 2022-03-17 21:21:03 -07:00
Blake Harnden
3c8f6a9512 daemon: fix convert interface grpc utility to properly get ip4/ip6 addresses 2022-03-17 16:44:12 -07:00
Blake Harnden
4f58d5d8eb daemon: removed unused EmaneNet function 2022-03-17 16:43:31 -07:00
Blake Harnden
7b16f9cb74 daemon: moved node cmd to base, allowing interface config to not need a node parameter 2022-03-17 16:31:03 -07:00
Blake Harnden
cd7f1a641e daemon: initial pass to revamp how node linking and link management is done, provides a consistent way to link all wired nodes and allows them to be configured for tc for the same behavior across the board 2022-03-17 15:28:38 -07:00
Blake Harnden
e59fc02ec3 scripts: initial core-player script to playback .core files 2022-03-11 13:29:24 -08:00
Blake Harnden
41db531e97 daemon: removed some unused Session functions and change to make proper use of set_user 2022-03-08 15:50:19 -08:00
Blake Harnden
dde339cc46 daemon: removed bitmap, which is not used 2022-03-08 14:32:01 -08:00
Blake Harnden
c8a589ef76 daemon: removing python tlv related code and tests related to it 2022-03-08 14:18:47 -08:00
Blake Harnden
f324cfbc4a daemon: updated core.conf to change .core references to .coregui 2022-03-08 11:36:57 -08:00
Blake Harnden
f545726ed5 daemon: small improvements to command error reporting, as well as catching and reporting config service get text dynamic exceptions 2022-03-04 09:55:40 -08:00
Blake Harnden
0536747d9a daemon/gui: adjustments to how a session instantiates, allowing the new python gui to move to a failed start state, this allows inpecting the failed nodes to see what went wrong 2022-03-04 09:19:56 -08:00
Blake Harnden
2eef7076f4 daemon: updated how local services are loaded to leverage full core path imports, avoiding name collisions with external modules 2022-03-02 12:42:53 -08:00
Blake Harnden
a42697ecce daemon: consolidated the code for CoreNode commands into the class itself 2022-02-28 22:05:01 -08:00
Blake Harnden
074a2263ce daemon: updates to network base to set default behavior for abstract function 2022-02-25 15:06:14 -08:00
Blake Harnden
e557b402b6 daemon: fix PhysicalNode instantiation issues, remove old functions that are no longer use and update session to use the new variation 2022-02-25 14:46:03 -08:00
Blake Harnden
58ffd045e2 daemon: pulling in an old legacy gui related fix for now, that was not merged back 2022-02-25 11:05:14 -08:00
Blake Harnden
a341691d69 install: poetry updates to fix vulnerability issues with protobuf, py, and cryptography 2022-02-18 00:33:18 -08:00
Blake Harnden
458b7f15ce pygui: fixed antenna image to properly show alpha png 2022-02-18 00:24:30 -08:00
Blake Harnden
96f2408e01 daemon: fixed deadlock issue when starting/stopping nftables queue 2022-02-17 23:44:30 -08:00
Blake Harnden
3c64654598 services: fix missing configurations for ospfv2 in config services 2022-02-17 10:14:04 -08:00
Blake Harnden
e80d22096c install: bumping version to 8.1.0 for next release 2022-02-10 16:17:22 -08:00
Blake Harnden
0e2219f6c8 daemon: fixed issue creating directory for files when needed, within node 2022-02-05 12:19:24 -08:00
Blake Harnden
490a4acf24 daemon: fixed issues related to rj45 2022-02-05 00:46:25 -08:00
Blake Harnden
efb97d1a5d daemon: updates to remove the delay for processing wlan changes along with code to support it 2022-02-05 00:39:11 -08:00
Blake Harnden
43737a42e4 daemon: update nftables bridge tables to use priority -1 to beat default inet table rules if present 2022-02-03 14:29:42 -08:00
Blake Harnden
44b7b6a27e daemon: update config service files to use paths for retrieving templates and generating files in the same consistent way 2022-02-03 14:28:56 -08:00
Blake Harnden
8f767208e0 daemon: small adjustment to fix xml related issues parsing links for now, until bigger refactoring 2022-01-26 11:35:23 -08:00
Blake Harnden
d5b05a39e8 gui: adjustment to update drawing asymmetric edge data when joining a session 2022-01-26 11:19:30 -08:00
Blake Harnden
6791269eeb daemon: refactored interfaces to store configuration options as link options, instead of using a dictionary 2022-01-25 21:39:52 -08:00
Blake Harnden
e9b83b0d28 daemon: refactored how interfaces are configured, updated link edits to allow proper bi-directional support for network to network interfaces, improved and added more unit tests for link add/edit/delete 2022-01-25 09:13:39 -08:00
Blake Harnden
8f89488fd5 grpc: added config service actions and update the gui to leverage them as the default for node context menus of running nodes 2022-01-11 16:29:55 -08:00
bharnden
fdc009699e
Merge branch 'develop' into dependabot/pip/daemon/lxml-4.6.5 2022-01-11 12:32:19 -08:00
Blake Harnden
871b1ae2af daemon: updates to support configuring and tracking mtu, along with over refactoring 2022-01-07 16:03:45 -08:00
Blake Harnden
0b531d7fd8 daemon: adjustments to support global configurable mtu values for node interfaces and bridges 2021-12-21 08:59:48 -08:00
dependabot[bot]
5e843f15bb
build(deps): bump lxml from 4.5.1 to 4.6.5 in /daemon
Bumps [lxml](https://github.com/lxml/lxml) from 4.5.1 to 4.6.5.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.5.1...lxml-4.6.5)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 20:56:53 +00:00
Blake Harnden
5ff4447528 daemon: reverting adjustment for executing scripts for corehandler specific logic 2021-11-18 09:19:31 -08:00
Blake Harnden
9da64af79b grpc: added args to execute script to reflect prior gui functionality, updated new and old gui to use the same exact logic for executing scripts for consistency 2021-11-18 09:02:42 -08:00
Blake Harnden
49709261fc daemon: updated wlan config option to use float type for range, instead of string 2021-11-16 10:15:58 -08:00
Blake Harnden
22e92111d0 daemon: updates to provide config types for configurable values, without the need to specify the enumerated type 2021-11-15 16:40:30 -08:00
bharnden
750489c2e1
Merge branch 'develop' into dependabot/pip/daemon/pyyaml-5.4 2021-11-11 11:15:27 -08:00
bharnden
ed90b9bbc3
Merge pull request #608 from coreemu/dependabot/pip/daemon/lxml-4.6.3
build(deps): bump lxml from 4.5.1 to 4.6.3 in /daemon
2021-11-11 11:02:24 -08:00
Blake Harnden
b78c07bd24 docs: update node types to include lxc/docker type documentation, instead of being hidden within examples 2021-11-11 10:59:11 -08:00
Blake Harnden
1ce6e51318 pygui: updates to properly save and load canvas size for each canvas separately 2021-10-29 14:56:50 -07:00
Blake Harnden
2b89503432 updates to sample1 scenarios to remove any custom service configurations, since the defaults should be used, fixes an issue specifically in sample1.imn 2021-10-29 14:11:11 -07:00
Blake Harnden
04fb3322b5 daemon: updated ovs net client to use proper set_mac_learning function, due to code changes prior 2021-10-27 08:23:54 -07:00
Blake Harnden
209303b085 merged latest release from master 2021-09-22 13:46:34 -07:00
dependabot[bot]
18163c577f
build(deps): bump pyyaml from 5.3.1 to 5.4 in /daemon
Bumps [pyyaml](https://github.com/yaml/pyyaml) from 5.3.1 to 5.4.
- [Release notes](https://github.com/yaml/pyyaml/releases)
- [Changelog](https://github.com/yaml/pyyaml/blob/master/CHANGES)
- [Commits](https://github.com/yaml/pyyaml/compare/5.3.1...5.4)

---
updated-dependencies:
- dependency-name: pyyaml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-22 20:27:28 +00:00
dependabot[bot]
0a88851be3
build(deps): bump lxml from 4.5.1 to 4.6.3 in /daemon
Bumps [lxml](https://github.com/lxml/lxml) from 4.5.1 to 4.6.3.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.5.1...lxml-4.6.3)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-22 20:27:09 +00:00
Blake Harnden
bb592cda58 updated changelog and bumped versions for release 2021-09-17 16:14:28 -07:00
Blake Harnden
bd896d1336 daemon: added capability to config services to shadow directory structures, from a given path, or from a local source, files may be templates or a straight copy and can be sourced from node named unique paths for node specific files, also refactored and renamed file creation related functions for nodes 2021-09-17 14:34:37 -07:00
dependabot[bot]
d14d10803f
build(deps): bump pillow from 7.1.2 to 8.3.2 in /daemon
Bumps [pillow](https://github.com/python-pillow/Pillow) from 7.1.2 to 8.3.2.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/7.1.2...8.3.2)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 03:43:53 +00:00
Blake Harnden
b96dc621cd grpc: refactoring for editing/moving nodes, they are now two separate processes, with specific logic to carry each out 2021-08-27 16:58:44 -07:00
Blake Harnden
ac5bbf5c6d pygui: updates to limit copy/paste to the graph widget itself and some small related cleanup to graph hot key functionalities 2021-08-26 15:12:51 -07:00
Blake Harnden
8e905b6a37 pygui: updates to improve draw order when joining a session, should help avoid some undesired visuals while reading in bigger scenarios 2021-08-26 10:42:02 -07:00
Blake Harnden
631cbbc73e pygui: add configuration and ip options to enable/disable ip4/ip6 assignment, improved gui configuration to handle new fields that do not already exist 2021-07-15 16:42:19 -07:00
Blake Harnden
150d4bd6ea pygui: added option to exit after directory creation 2021-07-15 11:26:36 -07:00
Blake Harnden
aa5bb08a16 grpc: fixed issue for start session not attempting to create directory when using definition 2021-07-14 16:39:18 -07:00
Blake Harnden
1347839200 pygui: adjustments to have save as update the current session to the newly defined file, saves will then continue to use the new save as name 2021-07-14 14:44:23 -07:00
Blake Harnden
8d303bdc2a pygui: changes to allow adding directory paths that do not exist within gui for customizing services 2021-07-14 13:45:49 -07:00
Blake Harnden
4879d6e297 pygui: small cleanup for removing service configuration when they are removed/toggled 2021-07-12 11:01:36 -07:00
Blake Harnden
54ac807a4f grpc: changes to support nodes containing configuration data, allowing for node creation with configs and querying nodes with their configs 2021-07-12 10:29:53 -07:00
Blake Harnden
8678922c92 grpc: removed global emane config from session protobuf 2021-06-04 18:55:54 -07:00
Blake Harnden
7198d2adc9 pygui: fixed issue in emane configuration for node interfaces using the wrong values 2021-06-03 21:48:07 -07:00
Blake Harnden
425a2ee141 core-cli: add position output for querying nodes 2021-06-03 21:37:56 -07:00
Blake Harnden
7fcedf527f daemon: add check to catch infinity values resulting from geo transformations and throw an error 2021-06-03 21:37:26 -07:00
Blake Harnden
44d797c633 pygui: fix so the emane config dialog will select the current emane configuration for a given emane node 2021-05-28 22:18:13 -07:00
Blake Harnden
a63e3e8d96 daemon: fix to also boot config services when a node is added during runtime 2021-05-26 21:01:24 -07:00
Blake Harnden
f928284fb7 daemon: fixed emane setup to move binding check to after validating if emane is needed 2021-05-26 14:48:28 -07:00
Blake Harnden
b51200e397 daemon: updated emane model platform configuration to remove controlportendpoint option, as this will be something core itself will define 2021-05-26 12:57:35 -07:00
Blake Harnden
3fcefc4d79 daemon: updated emane shutdown to kill emane daemon for a given interface, instead of killall 2021-05-26 12:29:46 -07:00
Blake Harnden
777097c85e daemon: updated emane position hooks and updating nem position logic to live in emane manager 2021-05-26 12:22:36 -07:00
Blake Harnden
795a5f5865 daemon: refactoring for starting up and shutting down emane daemon per interface 2021-05-26 09:54:32 -07:00
Blake Harnden
820539191d daemon: adjustments to emane model post startup to accept an interface, since settings may be unique per interface, updated tdma to use this information for trying to initialize its tdma schedule properly 2021-05-25 12:14:28 -07:00
Blake Harnden
8d5c3bd212 grpc: update grpc call for get emane event channel to take in a nem id, since channels may now be unique per nem 2021-05-25 10:52:50 -07:00
Blake Harnden
bcd9cc7ac2 daemon: updates to provide new logic for emane event services, creating one per unique control channel, added mapping for nems to associated service for generated events 2021-05-24 21:41:05 -07:00
Blake Harnden
ef0fa8c1a7 daemon: updates to emane manager to setup ota/event control networks on nodes and host based on individual nem configurations 2021-05-21 22:57:27 -07:00
Blake Harnden
4ff650af67 pygui: removed global emane configuration dialog 2021-05-20 12:24:54 -07:00
Blake Harnden
6b5148566c daemon: adjustment for emane monitor shutdown to avoid locking 2021-05-19 20:49:18 -07:00
Blake Harnden
5bc3345d37 adjustments to remove global emane configuration, platform configurations can now be configured per nem, retrieve emane specific core settings from session options 2021-05-19 20:44:00 -07:00
Blake Harnden
071023b1d9 added platform config to emane models, to replace global config, moved core specific emane global configs to session options 2021-05-18 21:29:38 -07:00
Blake Harnden
e2a9f6b1f4 daemon: initial changes to support one emane process per nem 2021-05-18 09:48:38 -07:00
Blake Harnden
d16f6b234b daemon: fix for wlan to take loss value strings as floats 2021-05-11 23:57:35 -07:00
Blake Harnden
e5d28b01c6 pygui: removed host from gui, default node is now PC 2021-05-11 22:59:21 -07:00
Blake Harnden
5e843a7674 daemon: update to nftables update tracker to use a queue for more reactive changes 2021-05-10 23:31:11 -07:00
Blake Harnden
5286938e44 daemon: small cleanup to nftables management 2021-05-10 20:34:10 -07:00
Blake Harnden
11d8bb0674 daemon: renamed network variables to not be named in a private way, since they were being used externally 2021-05-10 15:18:15 -07:00
Blake Harnden
30291a8438 daemon: updates to switch from using ebtables to nftables for wlan linking/unlinking 2021-05-10 15:07:42 -07:00
Blake Harnden
208c746b67 daemon: fixed issue setting default config services if legacy services were specifically provided 2021-05-10 12:39:20 -07:00
Blake Harnden
5ffc3e2aa4 pygui: fixed issue with loading recent xml files 2021-05-10 12:07:55 -07:00
Blake Harnden
85c5ad22e4 daemon: adjustments to load local emane models and config services better using a full import 2021-05-07 22:49:58 -07:00
Blake Harnden
3a08b13d6e changes to rename core-pygui to core-gui to be the default gui, renamed core-gui to core-gui-legacy to denote its deprecation 2021-05-07 14:30:28 -07:00
Blake Harnden
ad09bd5504 initial changes to mark older style services as deprecated and make configurable services the defaults for the python gui, added attribute to still allow supporting the legacy gui for time being and logic to compensate 2021-05-07 13:10:05 -07:00
Blake Harnden
ca8b4f1f6e bumped version on develop to denote major changes 2021-05-07 12:01:08 -07:00
Blake Harnden
13778e1d30 pygui: updated emane config dialog to sort emane models consistently 2021-05-07 10:58:23 -07:00
Blake Harnden
50e3aadc6b daemon: refactoring to load emane models one time during startup, updates to account for this change 2021-05-07 10:40:18 -07:00
Blake Harnden
1ddb7b7b24 daemon: small cleanup for service loading in CoreEmu 2021-05-06 16:05:13 -07:00
Blake Harnden
53ae6ac784 grpc: updated create session to return a session object with default values, avoids scripts needing to create and then join, can just create and leverage the returned object 2021-05-06 15:06:16 -07:00
Blake Harnden
598cb0f10d grpc: removed set session state, states are a by product of actions done within a session and probably best to automate that instead of relying on clients responsibly setting proper values 2021-05-06 11:39:18 -07:00
Blake Harnden
d40435fa68 grpc: removed add session server, achieved with start session providing servers for session 2021-05-06 10:56:51 -07:00
Blake Harnden
7e6b87101b updated grpc wrapper client test to be just the grpc client test 2021-05-04 17:02:48 -07:00
Blake Harnden
8108db545a grpc: combined get services and get config services into new get config call, that can be used to get all daemon configuration information 2021-05-04 16:58:51 -07:00
Blake Harnden
42dc56c56b grpc: removed set node config service, achieved with start session 2021-05-04 15:57:53 -07:00
Blake Harnden
805be3f809 grpc: removed get node config services, achieved with get node or get session 2021-05-04 15:42:32 -07:00
Blake Harnden
e299d3dd16 grpc: removed set node service file, achieved with start session, removed get node config service configs, achieved with get session 2021-05-04 15:02:23 -07:00
Blake Harnden
3e2cb86b6b grpc: removed set node service, achieved with start session 2021-05-04 14:55:12 -07:00
Blake Harnden
c574ace9a0 grpc: removed get node service configs, achieved with get session 2021-05-04 14:40:17 -07:00
Blake Harnden
9205fe1764 grpc: removed get mobility configs, achieved with get session 2021-05-04 14:27:46 -07:00
Blake Harnden
618d89b8db grpc: removed get model configs, can be achieved with get session 2021-05-04 13:51:17 -07:00
Blake Harnden
639b29a134 grpc: removed get wlan configs, achieved with get session 2021-05-04 13:36:10 -07:00
Blake Harnden
15acdaa40f grpc: removed old client, refactored wrapped client to be the new standard client, removed old client tests, updated documentation 2021-05-04 13:29:22 -07:00
Blake Harnden
924e86da2b scripts: updated imn to xml to use grpc wrapped client 2021-05-04 10:02:15 -07:00
Blake Harnden
0ed30a4feb scripts: updated route monitor to use grpc wrapped client 2021-05-04 09:56:58 -07:00
Blake Harnden
1cbe891dab grpc: updated core-cli to use the wrapped client, removed json output for now 2021-05-03 16:55:53 -07:00
Blake Harnden
917c45e70b grpc: updates to wrapper classes to help write client code in a more simple way using the consolidated api, updated examples to used the wrapped client 2021-05-03 15:25:18 -07:00
Blake Harnden
38e162aec5 grpc: removed get_node_links, added links to get_node instead 2021-05-02 20:58:24 -07:00
Blake Harnden
f271b0289e grpc: removed add hook and get gooks, can be achieved with get session and start session 2021-04-27 21:48:20 -07:00
Blake Harnden
634341dd03 grpc: removed set session metadata, now accomplished with start session 2021-04-27 21:08:58 -07:00
Blake Harnden
a217c2445c grpc: removed set session location, achieved with start session 2021-04-27 10:59:10 -07:00
Blake Harnden
e0fe86bcb2 grpc: updated start_session to have a definition option, to allow saving xml files and getting service configurations, without fully starting a session 2021-04-27 10:49:52 -07:00
Blake Harnden
f891974e3a grpc: removed set session user, added to start session 2021-04-24 22:35:45 -07:00
Blake Harnden
d8a3f9e78c grpc: removed set/get sessopm options, removed get session metadata/location, can be done with get/start session 2021-04-24 22:10:28 -07:00
Blake Harnden
d4c008e564 grpc: removed get/set session options, now accomplished through get_session and start_session 2021-04-24 21:37:00 -07:00
Blake Harnden
3d356272f1 pygui: adjust service configuration to not use grpc calls, data is saved and provided in start session call 2021-04-23 22:51:35 -07:00
Blake Harnden
4830538053 daemon: fixed issue in dhcp server subnet line using wrong address 2021-04-23 14:00:05 -07:00
Blake Harnden
dcf402ae04 daemon: fixed issue with dhcp service and dealing with addresses with a prefix of 32 2021-04-22 23:02:42 -07:00
Blake Harnden
7938379e6d grpc: added session options to session wrapped object, updated get_session and start_session to utilize this change, updated pygui to leverage as well 2021-04-22 16:12:33 -07:00
Blake Harnden
597834a993 added default logging configuration for __main__ scripts 2021-04-21 23:22:54 -07:00