Alex Vanin
e8fe07edd0
[ #184 ] Use SDK client cache in object.Rangehash
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-18 18:18:07 +03:00
Alex Vanin
f85e88c4f8
[ #184 ] Use SDK client cache in object.Range
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-18 18:18:07 +03:00
Alex Vanin
d485a5967d
[ #184 ] Use SDK client cache in object.Search
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-18 18:18:07 +03:00
Alex Vanin
7ba95dd5fc
[ #184 ] Use SDK client cache in object.Put
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-18 18:18:07 +03:00
Alex Vanin
e9a6365333
[ #184 ] Use SDK client cache in object.Head
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-18 18:18:07 +03:00
Leonard Lyubich
58fcb35fb0
[ #174 ] Use Marshal(JSON)/Unmarshal(JSON) methods for encoding/decoding
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-17 11:56:00 +03:00
Leonard Lyubich
3de8febe57
[ #174 ] Update to latest neofs-api-go changes
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-17 11:56:00 +03:00
Alex Vanin
e47c866d6a
[ #169 ] Add --ttl
argument in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-16 12:50:21 +03:00
Alex Vanin
e580f2afd6
[ #160 ] Update object CLI flags
...
* remove no-leaf
* rename leaf to phy
* remove no-root
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-16 10:02:12 +03:00
Alex Vanin
eb13322bf0
[ #166 ] Use async pools in object service handlers
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-13 15:54:00 +03:00
Alex Vanin
ded45e1fbc
[ #159 ] Add keyer to neofs-cli
...
Keyer prints information about private key, public key,
NEO3 Wallet, scripthash. It can generate new private key
or generate multisig address.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-09 18:59:21 +03:00
Leonard Lyubich
3c17e871e1
[ #158 ] cmd/neofs-node: Handle objects from tombstone by metabase
...
Handle tombstone content by metabase instead of object GC queue.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-09 14:07:20 +03:00
Leonard Lyubich
36d5af812e
[ #158 ] metabase: Add logger to DB configuration
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-09 14:07:20 +03:00
Leonard Lyubich
60e4b5ddff
[ #158 ] metabase: Construct DB using options
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-09 14:07:20 +03:00
Alex Vanin
0021f1cc5f
[ #81 ] cmd/neofs-cli: Use hex encoding of node's public key
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-06 16:37:48 +03:00
Leonard Lyubich
25398262fc
[ #81 ] cmd/neofs-cli: Implement "nodeinfo" sub-cmd of "netmap" cmd
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-06 16:37:48 +03:00
Leonard Lyubich
5d94594007
[ #81 ] cmd/neofs-cli: Implement "epoch" sub-cmd of "netmap" cmd
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-06 16:37:48 +03:00
Alex Vanin
65be09d3db
[ #155 ] Update neofs-api-go with refactored pkg/netmap
...
Refactored pkg/netmap package provides JSON converters for
NodeInfo and PlacementPolicy structures, that has been used
by client applications.
It also updates Node structure itself so it is a part of
grpc <-> v2 <-> pkg conversion chain.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-06 09:55:05 +03:00
Alex Vanin
49da96d006
[ #146 ] Set stdout as default output for CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-05 18:37:24 +03:00
Alex Vanin
64caa15556
[ #148 ] Use base name as FileName
attribute value
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-05 18:37:06 +03:00
Alex Vanin
54818d5a11
[ #144 ] Support well-known application attributes for object in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-05 09:28:13 +03:00
Alex Vanin
83926647d7
[ #144 ] Support well-known application attributes for container in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-05 09:28:13 +03:00
Leonard Lyubich
8125b544b4
[ #136 ] cmd/neofs-node: Use new metabase in app
...
Remove BoltDB bucket package. Construct meta.DB instance in node app.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-11-03 18:42:32 +03:00
Alex Vanin
97077294fc
[ #141 ] Fix double sidechain GAS emission on asset mint
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-03 16:28:01 +03:00
Alex Vanin
0c49c08609
[ #139 ] Use storage node GAS emission in inner ring app
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-03 16:20:41 +03:00
Alex Vanin
83119c00ec
[ #127 ] Remove magic number from config
...
With neo-project/neo-modules#358 nodes support RPC to
return used magic number. Therefore client doesn't need
that configuration value any more.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-02 13:54:31 +03:00
Alex Vanin
2bd827a478
[ #134 ] Resend bootstrap txs periodically
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-02 10:53:11 +03:00
Alex Vanin
976ba06300
[ #132 ] Use netmap cleaner in inner ring server
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-11-02 10:52:52 +03:00
Alex Vanin
b12d26f974
Update neofs-api-go to latest version
...
Handle errors provided by JSON encoders.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-30 11:28:49 +03:00
Alex Vanin
b93c146824
[ #26 ] Add extnded ACL table converter in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-28 13:36:25 +03:00
Alex Vanin
c4e9e258fd
[ #120 ] Add utility command to sign bearer token in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-23 15:31:04 +03:00
Alex Vanin
e7f9da9139
[ #120 ] Add --bearer
argument in CLI
...
Bearer token should be stored in file and correctly
signed.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-23 15:31:04 +03:00
Leonard Lyubich
334e0e6f0f
[ #109 ] cmd/neofs-node: Activate Replicator
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-23 15:23:22 +03:00
Alex Vanin
0c3e6c7a04
[ #40 ] cmd/neofs-node: Remove max object size value from config
...
Now max object size value is taken from global config in sidechain.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-23 14:18:00 +03:00
Leonard Lyubich
23f00a3cd2
[ #40 ] cmd/neofs-node: Re-implement max object size source
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-23 14:03:25 +03:00
Leonard Lyubich
d05b2ff500
[ #83 ] cmd/neofs-node: Add network state option to response service
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-23 10:54:48 +03:00
Leonard Lyubich
19f9c7eacb
[ #83 ] services: Remove setting of meta header from executing services
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-23 10:54:48 +03:00
Leonard Lyubich
3065a7363b
[ #83 ] cmd/neofs-node: Use response services in application
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-23 10:54:48 +03:00
Alex Vanin
23ec33e821
[ #106 ] Check bearer token lifetime
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-22 18:02:11 +03:00
Leonard Lyubich
0bdfd18469
[ #60 ] cmd/neofs-node: Initialize network state on boot
...
Get current epoch number from morph client and store the value in local
state structure.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-22 11:54:08 +03:00
Leonard Lyubich
a8481223d6
[ #60 ] cmd/neofs-node: Implement primary network State instance
...
Define networkState structure and implement netmap.State interface on it.
Set epoch number on NewEpoch notification from chain. Provide
WithNetworkState option to Put service constructor.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-22 11:54:08 +03:00
Alex Vanin
c28641d290
[ #95 ] Support --json
flag in container.get command
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-21 18:22:59 +03:00
Alex Vanin
e40dc0412d
[ #26 ] Add get and set EACL commands in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-21 18:22:59 +03:00
Alex Vanin
1482b0c5d0
[ #79 ] Simplify getCID and getOID functions in CLI
...
Parser from string is available in neofs-api-go.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-21 18:22:59 +03:00
Leonard Lyubich
f52f643fe4
[ #108 ] cmd/neofs-node: Add Policer worker to application
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-21 14:42:51 +03:00
Leonard Lyubich
07fe49088c
[ #108 ] cmd/neofs-node: Listen new epoch notifications from morph
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-21 14:42:51 +03:00
Alex Vanin
e6f04f7785
[ #104 ] Update neofs-api-go with new protobuf API
...
Also update contains JSON converters for neofs-cli
and fixes bug in container.set-acl command of SDK.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-20 17:31:59 +03:00
Evgenii Stratonikov
4d2ff842a2
[ #79 ] Implement object commands
...
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-10-19 14:35:39 +03:00
Alex Vanin
b7dfc73bbc
[ #25 ] Use comma separated container attributes in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-17 13:16:59 +03:00
Alex Vanin
feac279ced
[ #25 ] Add container.get command in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-17 13:16:59 +03:00
Alex Vanin
26e13f4b28
[ #25 ] Add container.list-objects command in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-17 13:16:59 +03:00
Alex Vanin
c0a4343282
[ #25 ] Use api-go stringers and parsers for ID types in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-17 13:16:59 +03:00
Alex Vanin
db0dd6363f
[ #25 ] Add container.create, list, delete commands to CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-15 10:25:41 +03:00
Alex Vanin
d83411016a
[ #25 ] Use printVerbose
wrapper for one-line messages
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-15 10:25:41 +03:00
Evgeniy Kulikov
53f7b58130
[ #93 ] Add gRPC Reflection service
...
Added gRPC Reflection service that can be enabled
by settings `grpc.enable_reflect_service`.
Read more about at
https://github.com/grpc/grpc-go/blob/master/Documentation/server-reflection-tutorial.md
Signed-off-by: Evgeniy Kulikov <kim@nspcc.ru>
2020-10-15 10:20:58 +03:00
Alex Vanin
dd48666357
[ #72 ] Shutdown inner ring app if RPC node has been terminated
...
Adopt error channel from Listener interface.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-14 09:37:48 +03:00
Alex Vanin
a9d296faa8
[ #87 ] Use viper to configure key and endpoint in CLI
...
With viper we can set up key and endpoint with config
and environmental variables with `NEOFS_CLI` prefix.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
69dd95d748
[ #78 ] Generate random key in CLI with --key new
argument
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
c2083d773c
[ #76 ] Add owner argument for accounting.balance command
...
With `--owner` argument user can look for balances of other
nodes by knowing their owner ID which is NEO3 compatible
address.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
945bb723ed
[ #76 ] Do not print error message twice in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
80cd4039a8
[ #76 ] Implement accounting.balance command in CLI
...
It prints result as a float type value. With verbose flag
it prints decimal precision and value.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
84928527d7
[ #87 ] Add verbose global flag in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
cb1ca511cb
[ #77 ] Add endpoint global argument in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
fc700cbbdc
[ #78 ] Add private key global argument in CLI
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-13 14:02:48 +03:00
Alex Vanin
f1f20b49db
[ #86 ] Add alphabet contract processor
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-12 14:43:33 +03:00
Alex Vanin
4308a6f522
[ #86 ] Run timer for gas emission event
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-12 14:43:33 +03:00
Alex Vanin
6bc787bb19
[ #86 ] Add alphabet contract configuration
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-12 14:43:33 +03:00
Alex Vanin
dee1d81b04
[ #84 ] Run netmap service in neofs-node app
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-09 09:15:18 +03:00
Alex Vanin
20c27d0542
[ #84 ] Add API version to neofs-node config
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-09 09:15:18 +03:00
Alex Vanin
65a93af176
[ #84 ] Fix loop variable capture issue in neofs-node workers
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-09 09:15:18 +03:00
Alex Vanin
0e7e0bd2d6
[ #84 ] Remove mocks and debug code from neofs-node services
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-09 09:15:18 +03:00
Alex Vanin
a9e801cb22
[ #71 ] Make GC configurable
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-05 14:03:55 +03:00
Leonard Lyubich
1d676fcfb2
[ #69 ] object/acl: Add eACL components to service
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 14:02:14 +03:00
Leonard Lyubich
30e6912c7b
[ #69 ] object/acl: Construct service from options
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 14:02:14 +03:00
Leonard Lyubich
e5898c9ca8
[ #69 ] object/acl: Rename BasicChecker to Service
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 14:02:14 +03:00
Leonard Lyubich
ab57fddb2b
[ #70 ] cmd/neofs-node: Add object GC to app
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 09:36:29 +03:00
Leonard Lyubich
798fca9354
[ #70 ] core/object: Process a delete group at tombstone
...
Send object group to delete queue processor after tombstone content
validation.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 09:36:29 +03:00
Leonard Lyubich
276ed6c04b
[ #70 ] cmd/neofs-node: Implement Del method on in-memory bucket
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 09:36:29 +03:00
Leonard Lyubich
9a604a50b9
[ #70 ] cmd/neofs-node: Start asynchronous workers on app launch
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-05 09:36:29 +03:00
Alex Vanin
6fe6005e71
[ #66 ] Check basic ACL in object service pipeline
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 19:47:49 +03:00
Alex Vanin
2ee24998ba
[ #68 ] Add go pprof to neofs-storage
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 19:47:08 +03:00
Alex Vanin
6ee908c2db
[ #65 ] Support FS bucket and BoltDB bucket
...
These buckets can be used to store blobs and metadata.
They will be removed as enhanced blob storage will be
implemented for neofs-node. To setup storage type
use `storage.object.type` and `storage.meta.type` params.
Available options:
- inmemory (default)
- boltdb
- filesystem
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 14:48:00 +03:00
Alex Vanin
861bac3892
[ #59 ] Use max msg size in transport server and splitter
...
For GRPC it is about 4 MiB.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
d2009c8731
[ #59 ] Add grpc payload splitter in object service chain
...
GRPC has default message limit of 4MiB. Since every transmitted
neofs message has to be signed, then original message should
be split into transfer fit structures before signature service.
This commit introduce transport payload splitter for object
service pipeline. This splitter works with stream response
for methods:
- object.Get
- object.Range
- object.Search
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
13080aa7a1
[ #43 ] cmd/neofs-node: Fetch max object size from config
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
e158497560
[ #43 ] cmd/neofs-node: Support hostnames with dns, ipv4 and ipv6 addresses
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
8585e147d0
[ #43 ] cmd/neofs-node: Use morph wrappers as data sources
...
Morph wrappers are being uses as sources for containers and
snapshots of network map.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Leonard Lyubich
1914b4dbad
[ #43 ] cmd/neofs-node: Use object service in application
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:36 +03:00
Leonard Lyubich
ea511d559c
[ #43 ] cmd/neofs-node: Refactor mocked object service
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:36 +03:00
Leonard Lyubich
a5ae128f34
[ #43 ] cmd/neofs-node: Implement mocked max object size source
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:36 +03:00
Leonard Lyubich
8dced272d2
[ #43 ] cmd/neofs-node: Implement in-memory bucket
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:36 +03:00
Leonard Lyubich
480362b02f
[ #43 ] cmd/neofs-node: Make cfg provide network address source interface
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:36 +03:00
Leonard Lyubich
caedef82af
[ #43 ] cmd/neofs-node: Change object executor mocked calls
...
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
1a169a1a9d
[ #49 ] Use zap.Logger in neofs-storage
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
df5fb23ba8
[ #36 ] Move node attribute code into separate file
...
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
8e4416ad4b
[ #36 ] Add default capacity and price attributes
...
Default values for capacity and price will be 0, so storage node
won't be present in placement. Add these attributes if they are
not explicitly set up by user config.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
1759ff57f1
[ #36 ] Parse attributes from node config
...
Well-known attributes set up with explicit configuration
values, other attributes set up from chain of attributes.
Chain of attributes is a string, that contains keys-value pairs,
divided by semicolon. Pairs itself divided by slash.
E.g. "StorageType:HDD/RPM:7200"
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:36 +03:00
Alex Vanin
3ed02d5f64
[ #28 ] Wrap bootstrap errors with prefix message
...
Generic morph invocation errors are more useful, if they have
extra info about invocation context.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:35 +03:00
Alex Vanin
86b9aefcae
[ #28 ] Make storage node configurable
...
To run storage node at dev-env environment it should have
configurable parameters. To keep `cfg` structures we can
read configuration from env and yml config file with viper
and parse values such as script hashes, fees, keys into
`cfg` structures.
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2020-10-02 11:25:35 +03:00
Stanislav Bogatyrev
246a15de35
cli: Add empty neofs-cli app structure
...
In the following release `neofs-cli` will be used to directly manage NeoFS Node.
All required definitions and interfaces are also moving from `neofs-api` to
`neofs-node` repository, so it's more convinient to have `neofs-cli` here.
Signed-off-by: Stanislav Bogatyrev <stanislav@nspcc.ru>
2020-10-02 11:25:35 +03:00