IP Library Granted Patent US 12,411,736
Granted Patent B2
US 12,411,736 · App. 18/791,544 · Granted Sep 9, 2025

Data reconstruction in a storage network and methods for use therewith

Inventors: Greg R. Dhuse (Chicago, IL); Vance T. Thornton (Columbus, OH); Jason K. Resch (Warwick, RI); Ilya Volvovski (Chicago, IL); Dustin M. Hendrickson (Chicago, IL); John Quigley (Chicago, IL)
Assignee: Pure Storage, Inc.
G06F11/1092G06F11/0727G06F11/141G06F11/167G06F16/13H04L9/3242H04L9/3247H04L9/3263H04L9/3271H04L63/06H04L63/12H04L67/06H04W12/041H04W12/0431H04W12/35G06F16/137G06F21/31G06F21/6209G06F2211/1028H04L63/0428H04L67/1097H04L2209/043H04L2209/30H04L2209/34H04L2209/56H04L2209/80H04W12/10
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,411,736
App. No.
18/791,544
Granted
Sep 9, 2025
Kind
B2
Abstract

A processor in a storage network operates by: receiving an access request for a data segment, wherein the data segment is encoded utilizing an error correcting information dispersal algorithm as a set of encoded data slices that are stored in a plurality of storage units of the storage network and wherein each encoded data slice of the set of encoded data slices includes a corresponding checksum of a plurality of checksums; retrieving, from the storage network, a subset of encoded data slices that includes a threshold number of encoded data slices of the set of encoded data slices; determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices includes at least one corrupted encoded data slice; retrieving from at least one of the plurality of storage units an addition number of encoded data slices required to generate a reconstructed data segment based on the subset of encoded data slices; generating the reconstructed data segment in accordance with the error correcting information dispersal algorithm, using the additional number of encoded data slices and at least some of the subset of encoded data slices; providing the reconstructed data segment in response to the access request; forming a reconstructed set of encoded data slices utilizing the error correcting information dispersal algorithm on the reconstructed data segment; and replacing the at least one corrupted encoded data slice with at least one reconstructed encoded data slice of the reconstructed set of encoded data slices.

Claims (59)

1. A method comprising:

receiving an access request for a data segment, wherein the data segment is encoded utilizing an error correcting information dispersal algorithm as a set of encoded data slices that are stored in a plurality of storage units of a storage network and wherein each encoded data slice of the set of encoded data slices includes a corresponding checksum of a plurality of checksums;

retrieving, from the storage network, a subset of encoded data slices that includes at least a threshold number of encoded data slices of the set of encoded data slices;

determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices includes at least one corrupted encoded data slice;

retrieving from at least one of the plurality of storage units an additional number of encoded data slices when required to generate a reconstructed data segment based on the subset of encoded data slices;

generating the reconstructed data segment in accordance with the error correcting information dispersal algorithm, using the additional number of encoded data slices and at least some of the subset of encoded data slices;

providing the reconstructed data segment in response to the access request;

forming at least one reconstructed encoded data slice utilizing the error correcting information dispersal algorithm on the reconstructed data segment; and

replacing the at least one corrupted encoded data slice with the at least one reconstructed encoded data slice.

2. The method of claim 1 , wherein the threshold number of encoded data slices corresponds to a minimum number of the set of encoded data slices required to reconstruct the data segment.

3. The method of claim 1 , wherein the error correcting information dispersal algorithm is a Cauchy-Reed-Solomon coding.

4. The method of claim 1 , wherein the error correcting information dispersal algorithm is an erasure coding.

5. The method of claim 1 , further comprising:

determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices does not include a corrupted encoded data slice;

decoding the threshold number of encoded data slices to recover the data segment;

verifying accuracy of the recovered data segment; and

when the accuracy of the recovered data segment has been verified, providing the recovered data segment in response to the access request.

6. The method of claim 1 , wherein a first of the plurality of storage units is remotely located from a second of the plurality of storage units within the storage network.

7. The method of claim 1 , wherein the plurality of checksums are based on a cyclic redundancy check.

8. A computer comprising:

a port configured to support communications with a storage network;

an application, coupled to the port, that is configured to enable a computer to perform operations that include:

receiving an access request for a data segment, wherein the data segment is encoded utilizing an error correcting information dispersal algorithm as a set of encoded data slices that are stored in a plurality of storage units of a storage network and wherein each encoded data slice of the set of encoded data slices includes a corresponding checksum of a plurality of checksums;

retrieving, from the storage network, a subset of encoded data slices that includes at least a threshold number of encoded data slices of the set of encoded data slices;

determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices includes at least one corrupted encoded data slice;

retrieving from at least one of the plurality of storage units an additional number of encoded data slices when required to generate a reconstructed data segment based on the subset of encoded data slices;

generating the reconstructed data segment in accordance with the error correcting information dispersal algorithm, using the additional number of encoded data slices and at least some of the subset of encoded data slices;

providing the reconstructed data segment in response to the access request;

forming at least one reconstructed encoded data slice utilizing the error correcting information dispersal algorithm on the reconstructed data segment; and

replacing the at least one corrupted encoded data slice with the at least one reconstructed encoded data slice.

9. The computer of claim 8 , wherein the error correcting information dispersal algorithm is a Reed-Solomon coding.

10. The computer of claim 8 , wherein the error correcting information dispersal algorithm is a Cauchy-Reed-Solomon coding.

11. The computer of claim 8 , wherein the error correcting information dispersal algorithm is an erasure coding.

12. The computer of claim 8 , wherein the operations further comprise:

determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices does not include a corrupted encoded data slice;

decoding the threshold number of encoded data slices to recover the data segment;

verifying accuracy of the recovered data segment; and

when the accuracy of the recovered data segment has been verified, providing the recovered data segment in response to the access request.

13. The computer of claim 8 , wherein a first of the plurality of storage units is remotely located from a second of the plurality of storage units within the storage network.

14. The computer of claim 8 , wherein the plurality of checksums are based on a cyclic redundancy check.

15. A non-transitory computer readable storage medium comprises:

at least one memory section that stores operational instructions that, when executed by a processing system of a storage network that includes a processor and a memory, causes the processing system to perform operations that include:

receiving an access request for a data segment, wherein the data segment is encoded utilizing an error correcting information dispersal algorithm as a set of encoded data slices that are stored in a plurality of storage units of a storage network and wherein each encoded data slice of the set of encoded data slices includes a corresponding checksum of a plurality of checksums;

retrieving, from the storage network, a subset of encoded data slices that includes at least a threshold number of encoded data slices of the set of encoded data slices;

determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices includes at least one corrupted encoded data slice;

retrieving from at least one of the plurality of storage units an additional number of encoded data slices when required to generate a reconstructed data segment based on the subset of encoded data slices;

generating the reconstructed data segment in accordance with the error correcting information dispersal algorithm, using the additional number of encoded data slices and at least some of the subset of encoded data slices;

providing the reconstructed data segment in response to the access request;

forming at least one reconstructed encoded data slice utilizing the error correcting information dispersal algorithm on the reconstructed data segment; and

replacing the at least one corrupted encoded data slice with the at least one reconstructed encoded data slice.

16. The non-transitory computer readable storage medium of claim 15 , wherein the error correcting information dispersal algorithm is a Reed-Solomon coding.

17. The non-transitory computer readable storage medium of claim 15 , wherein the error correcting information dispersal algorithm is a Cauchy-Reed-Solomon coding.

18. The non-transitory computer readable storage medium of claim 15 , wherein the error correcting information dispersal algorithm is an erasure coding.

19. The non-transitory computer readable storage medium of claim 15 , wherein the operations further comprise:

determining, based on ones of the plurality of checksums corresponding to the subset of encoded data slices, when the subset of encoded data slices does not include a corrupted encoded data slice;

decoding the threshold number of encoded data slices to recover the data segment;

verifying accuracy of the recovered data segment; and

when the accuracy of the recovered data segment has been verified, providing the recovered data segment in response to the access request.

20. The non-transitory computer readable storage medium of claim 15 , wherein a first of the plurality of storage units is remotely located from a second of the plurality of storage units within the storage network.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 1, 2024
From: DHUSE, GREG R.; THORNTON, VANCE T.; RESCH, JASON K.; VOLVOVSKI, ILYA; HENDRICKSON, DUSTIN M.; QUIGLEY, JOHN
To: PURE STORAGE, INC.
Reel/Frame 068154/0172 →
Continuity (24)
Continuation 17645563 · Dec 22, 2021
Continuation In Part 16988135 · Aug 7, 2020
Continuation 16390530 · Apr 22, 2019
Continuation In Part 16149667 · Oct 2, 2018
Continuation In Part 15819810 · Nov 21, 2017
Continuation 14447890 · Jul 31, 2014
Continuation In Part 13869655 · Apr 24, 2013
Continuation 13154725 · Jun 7, 2011
Continuation 12749592 · Mar 30, 2010
Continuation In Part 12218594 · Jul 16, 2008
Continuation In Part 12218200 · Jul 14, 2008
Continuation In Part 12080042 · Mar 31, 2008
Continuation In Part 11973613 · Oct 9, 2007
Continuation In Part 11973621 · Oct 9, 2007
Continuation In Part 11973622 · Oct 9, 2007
Continuation In Part 11973542 · Oct 9, 2007
Continuation In Part 11403684 · Apr 13, 2006
Continuation In Part 11403391 · Apr 13, 2006
Continuation In Part 11404071 · Apr 13, 2006
Continuation In Part 11241555 · Sep 30, 2005
Provisional Application 61655736 · Jun 5, 2012
Provisional Application 61357430 · Jun 22, 2010
Provisional Application 61237624 · Aug 27, 2009
Related Publication 20240394146A1 · Nov 28, 2024
References Cited (182)
US 4092732A · Ouchi · 1978 [cited by applicant]
US 5454101A · Mackay · 1995 [cited by applicant]
US 5485474A · Rabin · 1996 [cited by applicant]
US 5584008A · Shimada · 1996 [cited by applicant]
US 5774643A · Lubbers · 1998 [cited by applicant]
US 5802364A · Senator · 1998 [cited by applicant]
US 5809285A · Hilland · 1998 [cited by applicant]
US 5890156A · Rekieta · 1999 [cited by applicant]
US 5987622A · Lo Verso · 1999 [cited by applicant]
US 5991414A · Garay · 1999 [cited by applicant]
US 6012159A · Fischer · 2000 [cited by applicant]
US 6058454A · Gerlach · 2000 [cited by applicant]
US 6128277A · Bruck · 2000 [cited by applicant]
US 6175571B1 · Haddock · 2001 [cited by applicant]
US 6192472B1 · Garay · 2001 [cited by applicant]
US 6256688B1 · Suetaka · 2001 [cited by applicant]
US 6272658B1 · Steele · 2001 [cited by applicant]
US 6301604B1 · Nojima · 2001 [cited by applicant]
US 6356949B1 · Katsandres · 2002 [cited by applicant]
US 6366995B1 · Vilkov · 2002 [cited by applicant]
US 6374336B1 · Peters · 2002 [cited by applicant]
US 6415373B1 · Peters · 2002 [cited by applicant]
US 6418539B1 · Walker · 2002 [cited by applicant]
US 6449688B1 · Peters · 2002 [cited by applicant]
US 6567948B2 · Steele · 2003 [cited by applicant]
US 6571282B1 · Bowman-Amuah · 2003 [cited by applicant]
US 6609223B1 · Wolfgang · 2003 [cited by applicant]
US 6718361B1 · Basani · 2004 [cited by applicant]
US 6760808B2 · Peters · 2004 [cited by applicant]
US 6785768B2 · Peters · 2004 [cited by applicant]
US 6785783B2 · Buckland · 2004 [cited by applicant]
US 6826711B2 · Moulton · 2004 [cited by applicant]
US 6836432B1 · Parker · 2004 [cited by applicant]
US 6879596B1 · Dooply · 2005 [cited by applicant]
US 6898667B2 · Umberger · 2005 [cited by applicant]
US 6978366B1 · Ignatchenko · 2005 [cited by applicant]
US 7000143B2 · Moulton · 2006 [cited by applicant]
US 7003688B1 · Pittelkow · 2006 [cited by applicant]
US 7024451B2 · Jorgenson · 2006 [cited by applicant]
US 7024609B2 · Wolfgang · 2006 [cited by applicant]
US 7080101B1 · Watson · 2006 [cited by applicant]
US 7103824B2 · Halford · 2006 [cited by applicant]
US 7103915B2 · Redlich · 2006 [cited by applicant]
US 7111115B2 · Peters · 2006 [cited by applicant]
US 7140044B2 · Redlich · 2006 [cited by applicant]
US 7146644B2 · Redlich · 2006 [cited by applicant]
US 7171493B2 · Shu · 2007 [cited by applicant]
US 7222133B1 · Raipurkar · 2007 [cited by applicant]
US 7225263B1 · Clymer · 2007 [cited by applicant]
US 7240236B2 · Cutts · 2007 [cited by applicant]
US 7272613B2 · Sim · 2007 [cited by applicant]
US 7418649B2 · Li · 2008 [cited by applicant]
US 7457835B2 · Toebes · 2008 [cited by applicant]
US 7529834B1 · Birrell · 2009 [cited by examiner]
US 7533133B1 · Lanzatella · 2009 [cited by applicant]
US 7574570B2 · Gladwin et al. · 2009 [cited by applicant]
US 7581156B2 · Manasse · 2009 [cited by applicant]
US 7607063B2 · Kikuchi · 2009 [cited by applicant]
US 7636724B2 · De La Torre · 2009 [cited by applicant]
US 7680822B1 · Vyas · 2010 [cited by applicant]
US 7681104B1 · Sim-Tang · 2010 [cited by examiner]
US 7681105B1 · Sim-Tang · 2010 [cited by examiner]
US 7743275B1 · Tormasov · 2010 [cited by applicant]
US 7831793B2 · Chakravarty · 2010 [cited by applicant]
US 7865673B2 · Moore · 2011 [cited by applicant]
US 7904475B2 · Gladwin · 2011 [cited by applicant]
US 7925666B1 · Johnson · 2011 [cited by applicant]
US 7945639B2 · Gavrilov · 2011 [cited by applicant]
US 7962641B1 · Dhuse · 2011 [cited by applicant]
US 8051362B2 · Li · 2011 [cited by applicant]
US 8145818B2 · Murayama · 2012 [cited by applicant]
US 8171101B2 · Gladwin · 2012 [cited by applicant]
US 8209363B2 · Palthepu · 2012 [cited by applicant]
US 8214590B2 · Ulrich · 2012 [cited by applicant]
US 8281181B2 · Resch · 2012 [cited by applicant]
US 8281404B2 · Frey · 2012 [cited by applicant]
US 8285878B2 · Gladwin · 2012 [cited by applicant]
US 8335904B1 · Kitchen · 2012 [cited by applicant]
US 8386840B2 · Stougie · 2013 [cited by applicant]
US 8406421B2 · Kaymen · 2013 [cited by applicant]
US 8429514B1 · Goel · 2013 [cited by applicant]
US 8433849B2 · De Schrijver · 2013 [cited by applicant]
US 8464133B2 · Grube · 2013 [cited by applicant]
US 8620879B2 · Cairns · 2013 [cited by applicant]
US 8694467B2 · Sun · 2014 [cited by applicant]
US 8713405B2 · Healey · 2014 [cited by applicant]
US 8856530B2 · Patti · 2014 [cited by applicant]
US 8862837B1 · Marshak · 2014 [cited by applicant]
US 8868508B2 · Drobychev · 2014 [cited by applicant]
US 8880799B2 · Foster · 2014 [cited by applicant]
US 8914632B1 · Shankar · 2014 [cited by applicant]
US 8918478B2 · Ozzie · 2014 [cited by applicant]
US 8935493B1 · Dolan · 2015 [cited by applicant]
US 8938591B2 · Mark · 2015 [cited by examiner]
US 8972694B1 · Dolan · 2015 [cited by applicant]
US 9098519B2 · Pavlov · 2015 [cited by examiner]
US 9235350B2 · Mark · 2016 [cited by applicant]
US 9305069B2 · Zunger · 2016 [cited by examiner]
US 9332422B2 · Bai · 2016 [cited by examiner]
US 9372809B2 · Testardi · 2016 [cited by examiner]
US 9792295B1 · Rus · 2017 [cited by applicant]
US 9811262B1 · Rus · 2017 [cited by applicant]
US 9996413B2 · Dhuse · 2018 [cited by examiner]
US 20020062422A1 · Butterworth · 2002 [cited by applicant]
US 20020166079A1 · Ulrich · 2002 [cited by applicant]
US 20030018927A1 · Gadir · 2003 [cited by applicant]
US 20030037261A1 · Meffert · 2003 [cited by applicant]
US 20030065617A1 · Watkins · 2003 [cited by applicant]
US 20030065656A1 · de la Torre · 2003 [cited by applicant]
US 20030084020A1 · Shu · 2003 [cited by applicant]
US 20040024963A1 · Talagala · 2004 [cited by applicant]
US 20040122917A1 · Menon · 2004 [cited by applicant]
US 20040215998A1 · Buxton · 2004 [cited by applicant]
US 20040228493A1 · Ma · 2004 [cited by applicant]
US 20050055603A1 · Soran · 2005 [cited by applicant]
US 20050100022A1 · Ramprashad · 2005 [cited by applicant]
US 20050114594A1 · Corbett · 2005 [cited by applicant]
US 20050125593A1 · Karpoff · 2005 [cited by applicant]
US 20050131993A1 · Fatula, Jr. · 2005 [cited by applicant]
US 20050132070A1 · Redlich · 2005 [cited by applicant]
US 20050144382A1 · Schmisseur · 2005 [cited by applicant]
US 20050160329A1 · Briggs · 2005 [cited by applicant]
US 20050210270A1 · Rohatgi · 2005 [cited by applicant]
US 20050229069A1 · Hassner · 2005 [cited by applicant]
US 20060041719A1 · Chui · 2006 [cited by applicant]
US 20060047907A1 · Shiga · 2006 [cited by applicant]
US 20060136448A1 · Cialini · 2006 [cited by applicant]
US 20060156059A1 · Kitamura · 2006 [cited by applicant]
US 20060224603A1 · Correll, Jr. · 2006 [cited by applicant]
US 20070030734A1 · Sinclair · 2007 [cited by applicant]
US 20070079081A1 · Gladwin · 2007 [cited by applicant]
US 20070079082A1 · Gladwin · 2007 [cited by applicant]
US 20070079083A1 · Gladwin · 2007 [cited by applicant]
US 20070088970A1 · Buxton · 2007 [cited by applicant]
US 20070113032A1 · Kameyama · 2007 [cited by applicant]
US 20070174192A1 · Gladwin · 2007 [cited by applicant]
US 20070214285A1 · Au · 2007 [cited by applicant]
US 20070234110A1 · Soran · 2007 [cited by applicant]
US 20070283167A1 · Venters, III · 2007 [cited by applicant]
US 20080183975A1 · Foster · 2008 [cited by examiner]
US 20080235234A1 · Beedubail · 2008 [cited by applicant]
US 20090037500A1 · Kirshenbaum · 2009 [cited by applicant]
US 20090094250A1 · Dhuse · 2009 [cited by examiner]
US 20090094251A1 · Gladwin · 2009 [cited by applicant]
US 20090094318A1 · Gladwin · 2009 [cited by applicant]
US 20100023524A1 · Gladwin · 2010 [cited by examiner]
US 20100088464A1 · Yang · 2010 [cited by applicant]
US 20100138604A1 · Noguchi · 2010 [cited by applicant]
US 20100218037A1 · Swartz · 2010 [cited by applicant]
US 20100268692A1 · Resch · 2010 [cited by applicant]
US 20100299313A1 · Orsini · 2010 [cited by applicant]
US 20110029809A1 · Dhuse · 2011 [cited by examiner]
US 20110029840A1 · Ozzie · 2011 [cited by applicant]
US 20110087948A1 · Murakami · 2011 [cited by applicant]
US 20110126060A1 · Grube · 2011 [cited by applicant]
US 20110225202A1 · Man · 2011 [cited by applicant]
US 20110289122A1 · Grube · 2011 [cited by applicant]
US 20120060072A1 · Simitci · 2012 [cited by applicant]
US 20120131683A1 · Nassar · 2012 [cited by applicant]
US 20130246470A1 · Price · 2013 [cited by applicant]
US 20130275844A1 · Thornton · 2013 [cited by examiner]
US 20150074216A1 · Park · 2015 [cited by examiner]
US 20150355979A1 · Volvovski · 2015 [cited by examiner]
US 20220114053A1 · Dhuse · 2022 [cited by examiner]
Chung; An Automatic Data Segmentation Method for 3D Measured Data Points; National Taiwan University; pp. 1-8; 1998. [cited by applicant]
Harrison; Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms; IETF Network Working Group; RFC 4513; Jun. 2006; pp. 1-32. [cited by applicant]
Kubiatowicz, et al.; OceanStore: An Architecture for Global-Scale Persistent Storage; Proceedings of the Ninth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS 20… [cited by applicant]
Legg; Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules; IETF Network Working Group; RFC 4517; Jun. 2006; pp. 1-50. [cited by applicant]
Plank, T1: Erasure Codes for Storage Applications; FAST2005, 4th Usenix Conference on File Storage Technologies; Dec. 13-16, 2005; pp. 1-74. [cited by applicant]
Rabin; Efficient Dispersal of Information for Security, Load Balancing, and Fault Tolerance; Journal of the Association for Computer Machinery; vol. 36, No. 2; Apr. 1989; pp. 335-348. [cited by applicant]
Satran, et al.; Internet Small Computer Systems Interface (iSCSI); IETF Network Working Group; RFC 3720; Apr. 2004; pp. 1-257. [cited by applicant]
Sciberras; Lightweight Directory Access Protocol (LDAP): Schema for User Applications; IETF Network Working Group; RFC 4519; Jun. 2006; pp. 1-33. [cited by applicant]
Sermersheim; Lightweight Directory Access Protocol (LDAP): The Protocol; IETF Network Working Group; RFC 4511; Jun. 2006; pp. 1-68. [cited by applicant]
Shamir; How to Share a Secret; Communications of the ACM; vol. 22, No. 11; Nov. 1979; pp. 612-613. [cited by applicant]
Smith; Lightweight Directory Access Protocol (LDAP): Uniform Resource Locator; IETF Network Working Group; RFC 4516; Jun. 2006; pp. 1-15. [cited by applicant]
Smith; Lightweight Directory Access Protocol (LDAP): String Representation of Search Filters; IETF Network Working Group; RFC 4515; Jun. 2006; pp. 1-12. [cited by applicant]
Wildi; Java iSCSi Initiator; Master Thesis; Department of Computer and Information Science, University of Konstanz; Feb. 2007; 60 pgs. [cited by applicant]
Xin, et al.; Evaluation of Distributed Recovery in Large-Scale Storage Systems; 13th IEEE International Symposium on High Performance Distributed Computing; Jun. 2004; pp. 172-181. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): Directory Information Models; IETF Network Working Group; RFC 4512; Jun. 2006; pp. 1-49. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation; IETF Network Working Group; RFC 4518; Jun. 2006; pp. 1-14. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names; IETF Network Working Group; RFC 4514; Jun. 2006; pp. 1-15. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): Technical Specification Road Map; IETF Network Working Group; RFC 4510; Jun. 2006; pp. 1-8. [cited by applicant]