octomap::OccupancyOcTreeBase< NODE > Member List
This is the complete list of members for octomap::OccupancyOcTreeBase< NODE >, including all inherited members.
AbstractOccupancyOcTree()octomap::AbstractOccupancyOcTree
AbstractOcTree()octomap::AbstractOcTree
adjustKeyAtDepth(const OcTreeKey &key, unsigned int depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
adjustKeyAtDepth(unsigned short int key, unsigned int depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
bbx_maxoctomap::OccupancyOcTreeBase< NODE > [protected]
bbx_max_keyoctomap::OccupancyOcTreeBase< NODE > [protected]
bbx_minoctomap::OccupancyOcTreeBase< NODE > [protected]
bbx_min_keyoctomap::OccupancyOcTreeBase< NODE > [protected]
bbxSet() const octomap::OccupancyOcTreeBase< NODE > [inline]
begin(unsigned char maxDepth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
begin_leafs(unsigned char maxDepth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
begin_leafs_bbx(const OcTreeKey &min, const OcTreeKey &max, unsigned char maxDepth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
begin_leafs_bbx(const point3d &min, const point3d &max, unsigned char maxDepth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
begin_tree(unsigned char maxDepth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
binaryFileHeaderoctomap::AbstractOccupancyOcTree [protected, static]
calcMinMax()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
calcNumNodes() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
calcNumNodesRecurs(NODE *node, size_t &num_nodes) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
castRay(const point3d &origin, const point3d &direction, point3d &end, bool ignoreUnknownCells=false, double maxRange=-1.0) const octomap::OccupancyOcTreeBase< NODE > [virtual]
changed_keysoctomap::OccupancyOcTreeBase< NODE > [protected]
changedKeysBegin()octomap::OccupancyOcTreeBase< NODE > [inline]
changedKeysEnd()octomap::OccupancyOcTreeBase< NODE > [inline]
clamping_thres_maxoctomap::AbstractOccupancyOcTree [protected]
clamping_thres_minoctomap::AbstractOccupancyOcTree [protected]
clear()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
computeDiscreteUpdate(const Pointcloud &scan, const octomap::point3d &origin, KeySet &free_cells, KeySet &occupied_cells, double maxrange)octomap::OccupancyOcTreeBase< NODE >
computeRay(const point3d &origin, const point3d &end, std::vector< point3d > &ray)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
computeRayKeys(const point3d &origin, const point3d &end, KeyRay &ray) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
computeUpdate(const Pointcloud &scan, const octomap::point3d &origin, KeySet &free_cells, KeySet &occupied_cells, double maxrange)octomap::OccupancyOcTreeBase< NODE >
coordToKey(double coordinate) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
coordToKey(double coordinate, unsigned depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
coordToKey(const point3d &coord) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
coordToKey(double x, double y, double z) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
coordToKey(const point3d &coord, unsigned depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
coordToKey(double x, double y, double z, unsigned depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
coordToKeyChecked(const point3d &coord, OcTreeKey &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
coordToKeyChecked(const point3d &coord, unsigned depth, OcTreeKey &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
coordToKeyChecked(double x, double y, double z, OcTreeKey &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
coordToKeyChecked(double x, double y, double z, unsigned depth, OcTreeKey &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
coordToKeyChecked(double coordinate, unsigned short int &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
coordToKeyChecked(double coordinate, unsigned depth, unsigned short int &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
create() const =0octomap::AbstractOcTree [pure virtual]
createTree(const std::string id, double res)octomap::AbstractOcTree [static]
deleteNode(double x, double y, double z, unsigned int depth=0)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
deleteNode(const point3d &value, unsigned int depth=0)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
deleteNode(const OcTreeKey &key, unsigned int depth=0)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
deleteNodeRecurs(NODE *node, unsigned int depth, unsigned int max_depth, const OcTreeKey &key)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
enableChangeDetection(bool enable)octomap::OccupancyOcTreeBase< NODE > [inline]
end() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
end_leafs() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
end_leafs_bbx() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
end_tree() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
expand()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
expandRecurs(NODE *node, unsigned int depth, unsigned int max_depth)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
fileHeaderoctomap::AbstractOcTree [protected, static]
getBBXBounds() const octomap::OccupancyOcTreeBase< NODE >
getBBXCenter() const octomap::OccupancyOcTreeBase< NODE >
getBBXMax() const octomap::OccupancyOcTreeBase< NODE > [inline]
getBBXMin() const octomap::OccupancyOcTreeBase< NODE > [inline]
getClampingThresMax() const octomap::AbstractOccupancyOcTree [inline]
getClampingThresMaxLog() const octomap::AbstractOccupancyOcTree [inline]
getClampingThresMin() const octomap::AbstractOccupancyOcTree [inline]
getClampingThresMinLog() const octomap::AbstractOccupancyOcTree [inline]
getMetricMax(double &x, double &y, double &z)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
getMetricMax(double &x, double &y, double &z) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
getMetricMin(double &x, double &y, double &z)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
getMetricMin(double &x, double &y, double &z) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
getMetricSize(double &x, double &y, double &z)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
getMetricSize(double &x, double &y, double &z) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
getNodeSize(unsigned depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
getNormals(const point3d &point, std::vector< point3d > &normals, bool unknownStatus=true) const octomap::OccupancyOcTreeBase< NODE >
getNumLeafNodes() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
getNumLeafNodesRecurs(const NODE *parent) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
getOccupancyThres() const octomap::AbstractOccupancyOcTree [inline]
getOccupancyThresLog() const octomap::AbstractOccupancyOcTree [inline]
getProbHit() const octomap::AbstractOccupancyOcTree [inline]
getProbHitLog() const octomap::AbstractOccupancyOcTree [inline]
getProbMiss() const octomap::AbstractOccupancyOcTree [inline]
getProbMissLog() const octomap::AbstractOccupancyOcTree [inline]
getRayIntersection(const point3d &origin, const point3d &direction, const point3d &center, point3d &intersection, double delta=0.0) const octomap::OccupancyOcTreeBase< NODE > [virtual]
getResolution() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline, virtual]
getRoot() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
getTreeDepth() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
getTreeType() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline, virtual]
getUnknownLeafCenters(point3d_list &node_centers, point3d pmin, point3d pmax) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
inBBX(const point3d &p) const octomap::OccupancyOcTreeBase< NODE >
inBBX(const OcTreeKey &key) const octomap::OccupancyOcTreeBase< NODE >
init()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
insertPointCloud(const Pointcloud &scan, const octomap::point3d &sensor_origin, double maxrange=-1., bool lazy_eval=false, bool discretize=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
insertPointCloud(const Pointcloud &scan, const point3d &sensor_origin, const pose6d &frame_origin, double maxrange=-1., bool lazy_eval=false, bool discretize=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
insertPointCloud(const ScanNode &scan, double maxrange=-1., bool lazy_eval=false, bool discretize=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
insertPointCloudRays(const Pointcloud &scan, const point3d &sensor_origin, double maxrange=-1., bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
insertRay(const point3d &origin, const point3d &end, double maxrange=-1.0, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
integrateHit(NODE *occupancyNode) const octomap::OccupancyOcTreeBase< NODE > [virtual]
integrateMiss(NODE *occupancyNode) const octomap::OccupancyOcTreeBase< NODE > [virtual]
integrateMissOnRay(const point3d &origin, const point3d &end, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [inline, protected]
isNodeAtThreshold(const OcTreeNode *occupancyNode) const octomap::AbstractOccupancyOcTree [inline]
isNodeAtThreshold(const OcTreeNode &occupancyNode) const octomap::AbstractOccupancyOcTree [inline]
isNodeOccupied(const OcTreeNode *occupancyNode) const octomap::AbstractOccupancyOcTree [inline]
isNodeOccupied(const OcTreeNode &occupancyNode) const octomap::AbstractOccupancyOcTree [inline]
iterator typedefoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
keyraysoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
keyToCoord(unsigned short int key, unsigned depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
keyToCoord(unsigned short int key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
keyToCoord(const OcTreeKey &key) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
keyToCoord(const OcTreeKey &key, unsigned depth) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline]
leaf_iterator_bbx_endoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
leaf_iterator_endoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
max_valueoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
memoryFullGrid() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
memoryUsage() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
memoryUsageNode() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline, virtual]
min_valueoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
nodeToMaxLikelihood(NODE *occupancyNode) const octomap::OccupancyOcTreeBase< NODE > [virtual]
nodeToMaxLikelihood(NODE &occupancyNode) const octomap::OccupancyOcTreeBase< NODE > [virtual]
NodeType typedefoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
occ_prob_thres_logoctomap::AbstractOccupancyOcTree [protected]
OccupancyOcTreeBase(double resolution)octomap::OccupancyOcTreeBase< NODE >
OccupancyOcTreeBase(const OccupancyOcTreeBase< NODE > &rhs)octomap::OccupancyOcTreeBase< NODE >
OccupancyOcTreeBase(double resolution, unsigned int tree_depth, unsigned int tree_max_val)octomap::OccupancyOcTreeBase< NODE > [protected]
OCTOMAP_DEPRECATED(virtual void insertScan(const Pointcloud &scan, const octomap::point3d &sensor_origin, double maxrange=-1., bool pruning=true, bool lazy_eval=false))octomap::OccupancyOcTreeBase< NODE > [inline]
OCTOMAP_DEPRECATED(virtual void insertScan(const Pointcloud &scan, const point3d &sensor_origin, const pose6d &frame_origin, double maxrange=-1., bool pruning=true, bool lazy_eval=false))octomap::OccupancyOcTreeBase< NODE > [inline]
OCTOMAP_DEPRECATED(virtual void insertScan(const ScanNode &scan, double maxrange=-1., bool pruning=true, bool lazy_eval=false))octomap::OccupancyOcTreeBase< NODE > [inline]
OCTOMAP_DEPRECATED(virtual void insertScanNaive(const Pointcloud &scan, const point3d &sensor_origin, double maxrange, bool lazy_eval=false))octomap::OccupancyOcTreeBase< NODE > [inline]
OcTreeBaseImpl(double resolution)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
OcTreeBaseImpl(const OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > &rhs)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
OcTreeBaseImpl(double resolution, unsigned int tree_depth, unsigned int tree_max_val)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
operator==(const OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > &rhs) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
prob_hit_logoctomap::AbstractOccupancyOcTree [protected]
prob_miss_logoctomap::AbstractOccupancyOcTree [protected]
prune()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
pruneRecurs(NODE *node, unsigned int depth, unsigned int max_depth, unsigned int &num_pruned)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
read(const std::string &filename)octomap::AbstractOcTree [static]
read(std::istream &s)octomap::AbstractOcTree [static]
readBinary(std::istream &s)octomap::AbstractOccupancyOcTree
readBinary(const std::string &filename)octomap::AbstractOccupancyOcTree
readBinaryData(std::istream &s)octomap::OccupancyOcTreeBase< NODE > [virtual]
readBinaryLegacyHeader(std::istream &s, unsigned int &size, double &res)octomap::AbstractOccupancyOcTree [protected]
readBinaryNode(std::istream &s, NODE *node) const octomap::OccupancyOcTreeBase< NODE >
readData(std::istream &s)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
readHeader(std::istream &s, std::string &id, unsigned &size, double &res)octomap::AbstractOcTree [protected, static]
registerTreeType(AbstractOcTree *tree)octomap::AbstractOcTree [protected, static]
resetChangeDetection()octomap::OccupancyOcTreeBase< NODE > [inline]
resolutionoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
resolution_factoroctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
rootoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
search(double x, double y, double z, unsigned int depth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
search(const point3d &value, unsigned int depth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
search(const OcTreeKey &key, unsigned int depth=0) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
setBBXMax(point3d &max)octomap::OccupancyOcTreeBase< NODE >
setBBXMin(point3d &min)octomap::OccupancyOcTreeBase< NODE >
setClampingThresMax(double thresProb)octomap::AbstractOccupancyOcTree [inline]
setClampingThresMin(double thresProb)octomap::AbstractOccupancyOcTree [inline]
setNodeValue(const OcTreeKey &key, float log_odds_value, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
setNodeValue(const point3d &value, float log_odds_value, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
setNodeValue(double x, double y, double z, float log_odds_value, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
setNodeValueRecurs(NODE *node, bool node_just_created, const OcTreeKey &key, unsigned int depth, const float &log_odds_value, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [protected]
setOccupancyThres(double prob)octomap::AbstractOccupancyOcTree [inline]
setProbHit(double prob)octomap::AbstractOccupancyOcTree [inline]
setProbMiss(double prob)octomap::AbstractOccupancyOcTree [inline]
setResolution(double r)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
size() constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [inline, virtual]
size_changedoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
sizeLookupTableoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
swapContent(OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > &rhs)octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
toMaxLikelihood()octomap::OccupancyOcTreeBase< NODE > [virtual]
toMaxLikelihoodRecurs(NODE *node, unsigned int depth, unsigned int max_depth)octomap::OccupancyOcTreeBase< NODE > [protected]
tree_centeroctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
tree_depthoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
tree_iterator_endoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
tree_max_valoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
tree_sizeoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [protected]
updateInnerOccupancy()octomap::OccupancyOcTreeBase< NODE >
updateInnerOccupancyRecurs(NODE *node, unsigned int depth)octomap::OccupancyOcTreeBase< NODE > [protected]
updateNode(const OcTreeKey &key, float log_odds_update, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNode(const point3d &value, float log_odds_update, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNode(double x, double y, double z, float log_odds_update, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNode(const OcTreeKey &key, bool occupied, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNode(const point3d &value, bool occupied, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNode(double x, double y, double z, bool occupied, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNodeLogOdds(NODE *occupancyNode, const float &update) const octomap::OccupancyOcTreeBase< NODE > [virtual]
updateNodeRecurs(NODE *node, bool node_just_created, const OcTreeKey &key, unsigned int depth, const float &log_odds_update, bool lazy_eval=false)octomap::OccupancyOcTreeBase< NODE > [protected]
use_bbx_limitoctomap::OccupancyOcTreeBase< NODE > [protected]
use_change_detectionoctomap::OccupancyOcTreeBase< NODE > [protected]
useBBXLimit(bool enable)octomap::OccupancyOcTreeBase< NODE > [inline]
volume()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree >
write(const std::string &filename) const octomap::AbstractOcTree
write(std::ostream &s) const octomap::AbstractOcTree
writeBinary(const std::string &filename)octomap::AbstractOccupancyOcTree
writeBinary(std::ostream &s)octomap::AbstractOccupancyOcTree
writeBinaryConst(const std::string &filename) const octomap::AbstractOccupancyOcTree
writeBinaryConst(std::ostream &s) const octomap::AbstractOccupancyOcTree
writeBinaryData(std::ostream &s) const octomap::OccupancyOcTreeBase< NODE > [virtual]
writeBinaryNode(std::ostream &s, const NODE *node) const octomap::OccupancyOcTreeBase< NODE >
writeData(std::ostream &s) constoctomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]
~AbstractOccupancyOcTree()octomap::AbstractOccupancyOcTree [inline, virtual]
~AbstractOcTree()octomap::AbstractOcTree [inline, virtual]
~OccupancyOcTreeBase()octomap::OccupancyOcTreeBase< NODE > [virtual]
~OcTreeBaseImpl()octomap::OcTreeBaseImpl< NODE, AbstractOccupancyOcTree > [virtual]


octomap
Author(s): Kai M. Wurm , Armin Hornung
autogenerated on Thu Jun 6 2019 17:31:45