An elementary and unified approach to program correctness

We present through the algorithmic language DHL (Dijkstra-Hehner language), a practical approach to a simple first order theory based on calculational logic, unifying Hoare and Dijkstra’s iterative style of programming with Hehner’s recursive predicative programming theory, getting the “best of the...

Full description

Autores:
Bohórquez, Jaime
Tipo de recurso:
Article of journal
Fecha de publicación:
2009
Institución:
Escuela Colombiana de Ingeniería Julio Garavito
Repositorio:
Repositorio Institucional ECI
Idioma:
eng
OAI Identifier:
oai:repositorio.escuelaing.edu.co:001/1904
Acceso en línea:
https://repositorio.escuelaing.edu.co/handle/001/1904
Palabra clave:
Teoría de la Programación
Metodología de programación
Algoritmos
Theory of Programming
Programming Methodology
DHL
Algorithms
Rights
closedAccess
License
http://purl.org/coar/access_right/c_14cb
id ESCUELAIG2_b7594c907947f6e227262842c5356306
oai_identifier_str oai:repositorio.escuelaing.edu.co:001/1904
network_acronym_str ESCUELAIG2
network_name_str Repositorio Institucional ECI
repository_id_str
dc.title.eng.fl_str_mv An elementary and unified approach to program correctness
title An elementary and unified approach to program correctness
spellingShingle An elementary and unified approach to program correctness
Teoría de la Programación
Metodología de programación
Algoritmos
Theory of Programming
Programming Methodology
DHL
Algorithms
title_short An elementary and unified approach to program correctness
title_full An elementary and unified approach to program correctness
title_fullStr An elementary and unified approach to program correctness
title_full_unstemmed An elementary and unified approach to program correctness
title_sort An elementary and unified approach to program correctness
dc.creator.fl_str_mv Bohórquez, Jaime
dc.contributor.author.none.fl_str_mv Bohórquez, Jaime
dc.contributor.researchgroup.spa.fl_str_mv Informática
dc.subject.armarc.spa.fl_str_mv Teoría de la Programación
Metodología de programación
Algoritmos
topic Teoría de la Programación
Metodología de programación
Algoritmos
Theory of Programming
Programming Methodology
DHL
Algorithms
dc.subject.proposal.eng.fl_str_mv Theory of Programming
Programming Methodology
DHL
Algorithms
description We present through the algorithmic language DHL (Dijkstra-Hehner language), a practical approach to a simple first order theory based on calculational logic, unifying Hoare and Dijkstra’s iterative style of programming with Hehner’s recursive predicative programming theory, getting the “best of the two worlds” and without having to recur in any way to higher-order approaches such as predicate transformers, Hoare logic, fixed-point or relational theory.
publishDate 2009
dc.date.issued.none.fl_str_mv 2009
dc.date.accessioned.none.fl_str_mv 2021-12-04T16:38:27Z
dc.date.available.none.fl_str_mv 2021-12-04T16:38:27Z
dc.type.spa.fl_str_mv Artículo de revista
dc.type.coar.fl_str_mv http://purl.org/coar/resource_type/c_2df8fbb1
dc.type.coarversion.fl_str_mv http://purl.org/coar/version/c_970fb48d4fbd8a85
dc.type.version.spa.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.coar.spa.fl_str_mv http://purl.org/coar/resource_type/c_6501
dc.type.content.spa.fl_str_mv Text
dc.type.driver.spa.fl_str_mv info:eu-repo/semantics/article
dc.type.redcol.spa.fl_str_mv http://purl.org/redcol/resource_type/ART
format http://purl.org/coar/resource_type/c_6501
status_str publishedVersion
dc.identifier.issn.none.fl_str_mv 1433299X
dc.identifier.uri.none.fl_str_mv https://repositorio.escuelaing.edu.co/handle/001/1904
identifier_str_mv 1433299X
url https://repositorio.escuelaing.edu.co/handle/001/1904
dc.language.iso.spa.fl_str_mv eng
language eng
dc.relation.citationendpage.spa.fl_str_mv 627
dc.relation.citationstartpage.spa.fl_str_mv 611
dc.relation.citationvolume.spa.fl_str_mv 22
dc.relation.indexed.spa.fl_str_mv N/A
dc.relation.ispartofjournal.eng.fl_str_mv Formal Aspects of Computing
dc.relation.references.spa.fl_str_mv Back RJR (1978) On the Correctness of Refinement Steps in Program Development. PhD thesis, University of Helsinki. Also available as report A-1978-5
Back RJR (1980) Correctness preserving program refinements: proof theory and applications, volume 131 of Mathematical Center Tracts. Mathematical Centre, Amsterdam
Backhouse R (2003) Program Construction: Calculating Implementations from Specifications. Wiley, New York
Backhouse R, Fokkinga M (2001) The associativity of equivalence and the towers of Hanoi problem. Inf Process Lett 77(2–4): 71–76
Backhouse R, Michaelis D (2006) Exercises in quantifier manipulation. In: Uustalu T (eds) MPC, volume 4014 of Lecture Notes in Computer Science. Springer, Berlin, pp 69–81
Bohórquez JA (2007) An inductive theorem on the correctness of general recursive programs. Logic Journal of the IGPL 15(5–6): 373–399
Bohórquez JA (2008) Intuitionistic logic according to Dijkstra’s calculus of equational deduction. Notre Dame J Form Log 49(4): 361–384
Dijkstra EW, Feijen WHJ (1988) Een Methode van Programmeren. Academic Service, Den Haag, 1984. Also available as A Method of Programming. Addison-Wesley, Reading
Dijkstra EW (1968) Go to statement considered harmful. Commun ACM 11(3): 147–148
Dijkstra EW (1975) Guarded commands, nondeterminacy and formal derivation of programs. Commun ACM 18(8): 453–457
Dijkstra EW (1976) A discipline of programming. Prentice-Hall Inc., Englewood Cliffs. With a foreword by C.A.R. Hoare, Prentice-Hall Series in Automatic Computation
Dijkstra EW (1994) How computing science created a new mathematical style. EWD 1073 in The writings of Edsger W. Dijkstra, 2000. http://www.cs.utexas.edu/users/EWD
Dijkstra EW, Scholten CS (1990) Predicate calculus and program semantics. Springer, Berlin
Dromey RG (1982) How to solve it by computer. Prentice Hall, Englewood Cliffs
Floyd RW (1967) Assigning meanings to programs. In: Proceedings of the symposium on applied mathematics, American Mathematical Society XIX:19–32
Feijen WHJ, van Gasteren AJM (1996) Programming, proving, and calculation. In: Neville Dean C, Hinchey MG (eds) Teaching and learning formal methods. Academic Press, New York
Gries D (1981) The science of programming. Springer, Berlin
Gries D, Schneider FB (1993) A logical approach to discrete math. Texts and Monographs in Computer Science. Springer, Berlin
Hehner ECR (1976) DO considered OD: a contribution to the programming calculus. Technical Report CSRG-75, University of Toronto, Computer Systems Research Group, Toronto
Hehner ECR (1984) Predicative programming. I, II. Commun ACM 27(2):134–143, 144–151
Hehner ECR (1989) Termination is timing. In: MPC: International conference on mathematics of program construction. LNCS, Springer, Berlin
Hehner ECR (1990) A practical theory of programming. Sci Comput Program 14(2–3): 133–158
Hehner ECR (2004) From boolean algebra to unified algebra. MATHINT: The Mathematical Intelligencer 26
Hehner ECR (2004) A practical theory of programming, 2nd edn. Springer, New York
Hehner ECR (2005) Specified blocks. In: Meyer B, Woodcock J (eds) VSTTE, volume 4171 of Lecture Notes in Computer Science. Springer, Berlin, pp 384–391
Hehner ECR (2006) Retrospective and prospective for unifying theories of programming. In: Dunne S, Stoddart B (eds) UTP, volume 4010 of Lecture Notes in Computer Science. Springer, Berlin, pp 1–17
Hehner ECR (2007) Unified algebra. Int J Math Sci (WASET) 1(1):20–37 (electronic)
Hoare CAR, Jifeng H (1987) The weakest prespecification. Inf Process Lett 24(2): 127–132
Hoare CAR, Jifeng H (1998) Unifying theories of programming. Prentice Hall, London
Hoare CAR (1969) An axiomatic basis for computer programming. Commun Assoc Comput Mach 12(10): 576–583
Hoare CAR (1983) An axiomatic basis for computer programming (reprint). Commun ACM 26(1): 53–56
Hoare CAR (1984) Programs are predicates. Philos Trans Roy Soc Lond Ser A 312(1522): 475–489
Hoare CAR (1992) Programs are predicates. In: Proceedings of the international conference on fifth generation computer systems, pp 211–218, ICOT, Japan, 1992. Association for Computing Machinery
Kaldewaij A (1990) Programming: the derivation of algorithms. International Series in Computer Science. Prentice-Hall, Englewood Cliffs
Lifschitz V (2001) On calculational proofs. Ann Pure Appl Logic 113(1–3): 207–224
Manna Z (1974) Mathematical theory of computation. McGraw-Hill, New York
Manna Z (1980) Lectures on the logic of computer programming. Philadelphia, PA. With contributions by N. Dershowitz and R. Waldinger
Morgan C (1990) Programming from specifications. Prentice Hall, Englewood Cliffs
Morris JM (1990) Programs from specifications. In: Dijkstra EW (eds) Formal development of programs and proofs. Addison-Wesley, Reading
Martin AJ, Rem M (1984) A presentation of the fibonacci algorithm. IPL: Inf Process Lett 19
van de Snepscheut Jan LA (1993) What computing is all about. Texts and monographs in computer science. Springer, New-York
van Gasteren AJM (1990) On the shape of mathematical arguments, volume 445 of Lecture Notes in Computer Science. Springer, Berlin
van Gasteren AJM, Bijlsma A (1998) An extension of the program derivation format. In: Gries D, Roever WP (eds) PROCOMET, volume 125 of IFIP conference proceedings. Chapman & Hall, London, pp 167–185
Wirth N (1971) Program development by stepwise refinement. Commun ACM 14: 221–227
dc.rights.coar.fl_str_mv http://purl.org/coar/access_right/c_14cb
dc.rights.accessrights.spa.fl_str_mv info:eu-repo/semantics/closedAccess
eu_rights_str_mv closedAccess
rights_invalid_str_mv http://purl.org/coar/access_right/c_14cb
dc.format.extent.spa.fl_str_mv 17 páginas.
dc.format.mimetype.spa.fl_str_mv application/pdf
dc.publisher.spa.fl_str_mv Springer
dc.source.spa.fl_str_mv https://link.springer.com/article/10.1007%2Fs00165-009-0137-4
institution Escuela Colombiana de Ingeniería Julio Garavito
bitstream.url.fl_str_mv https://repositorio.escuelaing.edu.co/bitstream/001/1904/5/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.pdf.txt
https://repositorio.escuelaing.edu.co/bitstream/001/1904/4/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.png
https://repositorio.escuelaing.edu.co/bitstream/001/1904/6/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.pdf.jpg
https://repositorio.escuelaing.edu.co/bitstream/001/1904/3/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.pdf
https://repositorio.escuelaing.edu.co/bitstream/001/1904/2/license.txt
bitstream.checksum.fl_str_mv 43f942d0fdd4a3be8b286be3f6c8537e
457309e21962f6542f9bfc41f4cecb9c
42614a1fddf876edc8a3fd779d8a9605
0509aa741b3938c420c441bf46551a25
5a7ca94c2e5326ee169f979d71d0f06e
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Escuela Colombiana de Ingeniería Julio Garavito
repository.mail.fl_str_mv repositorio.eci@escuelaing.edu.co
_version_ 1814355628199510016
spelling Bohórquez, Jaime34ca64f10c7c3bbadec92bdb453a4170600Informática2021-12-04T16:38:27Z2021-12-04T16:38:27Z20091433299Xhttps://repositorio.escuelaing.edu.co/handle/001/1904We present through the algorithmic language DHL (Dijkstra-Hehner language), a practical approach to a simple first order theory based on calculational logic, unifying Hoare and Dijkstra’s iterative style of programming with Hehner’s recursive predicative programming theory, getting the “best of the two worlds” and without having to recur in any way to higher-order approaches such as predicate transformers, Hoare logic, fixed-point or relational theory.Presentamos a través del lenguaje algorítmico DHL (Dijkstra-Hehner language), una aproximación práctica a una teoría simple de primer orden basada en lógica de cálculo, unificando el estilo iterativo de programación de Hoare y Dijkstra con la teoría recursiva de programación predicativa de Hehner, obteniendo “lo mejor de los dos”. mundos” y sin tener que recurrir en modo alguno a enfoques de orden superior como los transformadores de predicados, la lógica de Hoare, el punto fijo o la teoría relacional.17 páginas.application/pdfengSpringerhttps://link.springer.com/article/10.1007%2Fs00165-009-0137-4An elementary and unified approach to program correctnessArtículo de revistainfo:eu-repo/semantics/publishedVersionhttp://purl.org/coar/resource_type/c_6501http://purl.org/coar/resource_type/c_2df8fbb1Textinfo:eu-repo/semantics/articlehttp://purl.org/redcol/resource_type/ARThttp://purl.org/coar/version/c_970fb48d4fbd8a8562761122N/AFormal Aspects of ComputingBack RJR (1978) On the Correctness of Refinement Steps in Program Development. PhD thesis, University of Helsinki. Also available as report A-1978-5Back RJR (1980) Correctness preserving program refinements: proof theory and applications, volume 131 of Mathematical Center Tracts. Mathematical Centre, AmsterdamBackhouse R (2003) Program Construction: Calculating Implementations from Specifications. Wiley, New YorkBackhouse R, Fokkinga M (2001) The associativity of equivalence and the towers of Hanoi problem. Inf Process Lett 77(2–4): 71–76Backhouse R, Michaelis D (2006) Exercises in quantifier manipulation. In: Uustalu T (eds) MPC, volume 4014 of Lecture Notes in Computer Science. Springer, Berlin, pp 69–81Bohórquez JA (2007) An inductive theorem on the correctness of general recursive programs. Logic Journal of the IGPL 15(5–6): 373–399Bohórquez JA (2008) Intuitionistic logic according to Dijkstra’s calculus of equational deduction. Notre Dame J Form Log 49(4): 361–384Dijkstra EW, Feijen WHJ (1988) Een Methode van Programmeren. Academic Service, Den Haag, 1984. Also available as A Method of Programming. Addison-Wesley, ReadingDijkstra EW (1968) Go to statement considered harmful. Commun ACM 11(3): 147–148Dijkstra EW (1975) Guarded commands, nondeterminacy and formal derivation of programs. Commun ACM 18(8): 453–457Dijkstra EW (1976) A discipline of programming. Prentice-Hall Inc., Englewood Cliffs. With a foreword by C.A.R. Hoare, Prentice-Hall Series in Automatic ComputationDijkstra EW (1994) How computing science created a new mathematical style. EWD 1073 in The writings of Edsger W. Dijkstra, 2000. http://www.cs.utexas.edu/users/EWDDijkstra EW, Scholten CS (1990) Predicate calculus and program semantics. Springer, BerlinDromey RG (1982) How to solve it by computer. Prentice Hall, Englewood CliffsFloyd RW (1967) Assigning meanings to programs. In: Proceedings of the symposium on applied mathematics, American Mathematical Society XIX:19–32Feijen WHJ, van Gasteren AJM (1996) Programming, proving, and calculation. In: Neville Dean C, Hinchey MG (eds) Teaching and learning formal methods. Academic Press, New YorkGries D (1981) The science of programming. Springer, BerlinGries D, Schneider FB (1993) A logical approach to discrete math. Texts and Monographs in Computer Science. Springer, BerlinHehner ECR (1976) DO considered OD: a contribution to the programming calculus. Technical Report CSRG-75, University of Toronto, Computer Systems Research Group, TorontoHehner ECR (1984) Predicative programming. I, II. Commun ACM 27(2):134–143, 144–151Hehner ECR (1989) Termination is timing. In: MPC: International conference on mathematics of program construction. LNCS, Springer, BerlinHehner ECR (1990) A practical theory of programming. Sci Comput Program 14(2–3): 133–158Hehner ECR (2004) From boolean algebra to unified algebra. MATHINT: The Mathematical Intelligencer 26Hehner ECR (2004) A practical theory of programming, 2nd edn. Springer, New YorkHehner ECR (2005) Specified blocks. In: Meyer B, Woodcock J (eds) VSTTE, volume 4171 of Lecture Notes in Computer Science. Springer, Berlin, pp 384–391Hehner ECR (2006) Retrospective and prospective for unifying theories of programming. In: Dunne S, Stoddart B (eds) UTP, volume 4010 of Lecture Notes in Computer Science. Springer, Berlin, pp 1–17Hehner ECR (2007) Unified algebra. Int J Math Sci (WASET) 1(1):20–37 (electronic)Hoare CAR, Jifeng H (1987) The weakest prespecification. Inf Process Lett 24(2): 127–132Hoare CAR, Jifeng H (1998) Unifying theories of programming. Prentice Hall, LondonHoare CAR (1969) An axiomatic basis for computer programming. Commun Assoc Comput Mach 12(10): 576–583Hoare CAR (1983) An axiomatic basis for computer programming (reprint). Commun ACM 26(1): 53–56Hoare CAR (1984) Programs are predicates. Philos Trans Roy Soc Lond Ser A 312(1522): 475–489Hoare CAR (1992) Programs are predicates. In: Proceedings of the international conference on fifth generation computer systems, pp 211–218, ICOT, Japan, 1992. Association for Computing MachineryKaldewaij A (1990) Programming: the derivation of algorithms. International Series in Computer Science. Prentice-Hall, Englewood CliffsLifschitz V (2001) On calculational proofs. Ann Pure Appl Logic 113(1–3): 207–224Manna Z (1974) Mathematical theory of computation. McGraw-Hill, New YorkManna Z (1980) Lectures on the logic of computer programming. Philadelphia, PA. With contributions by N. Dershowitz and R. WaldingerMorgan C (1990) Programming from specifications. Prentice Hall, Englewood CliffsMorris JM (1990) Programs from specifications. In: Dijkstra EW (eds) Formal development of programs and proofs. Addison-Wesley, ReadingMartin AJ, Rem M (1984) A presentation of the fibonacci algorithm. IPL: Inf Process Lett 19van de Snepscheut Jan LA (1993) What computing is all about. Texts and monographs in computer science. Springer, New-Yorkvan Gasteren AJM (1990) On the shape of mathematical arguments, volume 445 of Lecture Notes in Computer Science. Springer, Berlinvan Gasteren AJM, Bijlsma A (1998) An extension of the program derivation format. In: Gries D, Roever WP (eds) PROCOMET, volume 125 of IFIP conference proceedings. Chapman & Hall, London, pp 167–185Wirth N (1971) Program development by stepwise refinement. Commun ACM 14: 221–227info:eu-repo/semantics/closedAccesshttp://purl.org/coar/access_right/c_14cbTeoría de la ProgramaciónMetodología de programaciónAlgoritmosTheory of ProgrammingProgramming MethodologyDHLAlgorithmsTEXTAn elementary and unified approach to program correctness.pdf.txtAn elementary and unified approach to program correctness.pdf.txtExtracted texttext/plain55446https://repositorio.escuelaing.edu.co/bitstream/001/1904/5/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.pdf.txt43f942d0fdd4a3be8b286be3f6c8537eMD55metadata only accessTHUMBNAILAn elementary and unified approach to program correctness.pngAn elementary and unified approach to program correctness.pngimage/png128453https://repositorio.escuelaing.edu.co/bitstream/001/1904/4/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.png457309e21962f6542f9bfc41f4cecb9cMD54open accessAn elementary and unified approach to program correctness.pdf.jpgAn elementary and unified approach to program correctness.pdf.jpgGenerated Thumbnailimage/jpeg12013https://repositorio.escuelaing.edu.co/bitstream/001/1904/6/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.pdf.jpg42614a1fddf876edc8a3fd779d8a9605MD56metadata only accessORIGINALAn elementary and unified approach to program correctness.pdfAn elementary and unified approach to program correctness.pdfArtículo de revistaapplication/pdf211632https://repositorio.escuelaing.edu.co/bitstream/001/1904/3/An%20elementary%20and%20unified%20approach%20to%20program%20correctness.pdf0509aa741b3938c420c441bf46551a25MD53metadata only accessLICENSElicense.txtlicense.txttext/plain; charset=utf-81881https://repositorio.escuelaing.edu.co/bitstream/001/1904/2/license.txt5a7ca94c2e5326ee169f979d71d0f06eMD52open access001/1904oai:repositorio.escuelaing.edu.co:001/19042022-11-22 03:01:10.369metadata only accessRepositorio Escuela Colombiana de Ingeniería Julio Garavitorepositorio.eci@escuelaing.edu.coU0kgVVNURUQgSEFDRSBQQVJURSBERUwgR1JVUE8gREUgUEFSRVMgRVZBTFVBRE9SRVMgREUgTEEgQ09MRUNDScOTTiAiUEVFUiBSRVZJRVciLCBPTUlUQSBFU1RBIExJQ0VOQ0lBLgoKQXV0b3Jpem8gYSBsYSBFc2N1ZWxhIENvbG9tYmlhbmEgZGUgSW5nZW5pZXLDrWEgSnVsaW8gR2FyYXZpdG8gcGFyYSBwdWJsaWNhciBlbCB0cmFiYWpvIGRlIGdyYWRvLCBhcnTDrWN1bG8sIHZpZGVvLCAKY29uZmVyZW5jaWEsIGxpYnJvLCBpbWFnZW4sIGZvdG9ncmFmw61hLCBhdWRpbywgcHJlc2VudGFjacOzbiB1IG90cm8gKGVuICAgIGFkZWxhbnRlIGRvY3VtZW50bykgcXVlIGVuIGxhIGZlY2hhIAplbnRyZWdvIGVuIGZvcm1hdG8gZGlnaXRhbCwgeSBsZSBwZXJtaXRvIGRlIGZvcm1hIGluZGVmaW5pZGEgcXVlIGxvIHB1YmxpcXVlIGVuIGVsIHJlcG9zaXRvcmlvIGluc3RpdHVjaW9uYWwsIAplbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsYSBMZXkgMjMgZGUgMTk4MiwgbGEgTGV5IDQ0IGRlIDE5OTMsIHkgZGVtw6FzIGxleWVzIHkganVyaXNwcnVkZW5jaWEgdmlnZW50ZQphbCByZXNwZWN0bywgcGFyYSBmaW5lcyBlZHVjYXRpdm9zIHkgbm8gbHVjcmF0aXZvcy4gRXN0YSBhdXRvcml6YWNpw7NuIGVzIHbDoWxpZGEgcGFyYSBsYXMgZmFjdWx0YWRlcyB5IGRlcmVjaG9zIGRlIAp1c28gc29icmUgbGEgb2JyYSBlbiBmb3JtYXRvIGRpZ2l0YWwsIGVsZWN0csOzbmljbywgdmlydHVhbDsgeSBwYXJhIHVzb3MgZW4gcmVkZXMsIGludGVybmV0LCBleHRyYW5ldCwgeSBjdWFscXVpZXIgCmZvcm1hdG8gbyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyLgpFbiBtaSBjYWxpZGFkIGRlIGF1dG9yLCBleHByZXNvIHF1ZSBlbCBkb2N1bWVudG8gb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwgeSBsbyBlbGFib3LDqSBzaW4gCnF1ZWJyYW50YXIgbmkgc3VwbGFudGFyIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvcy4gUG9yIGxvIHRhbnRvLCBlcyBkZSBtaSBleGNsdXNpdmEgYXV0b3LDrWEgeSwgZW4gY29uc2VjdWVuY2lhLCAKdGVuZ28gbGEgdGl0dWxhcmlkYWQgc29icmUgw6lsLiBFbiBjYXNvIGRlIHF1ZWphIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyByZWZlcmVudGUgYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgCmVsIGRvY3VtZW50byBlbiBjdWVzdGnDs24sIGFzdW1pcsOpIGxhIHJlc3BvbnNhYmlsaWRhZCB0b3RhbCB5IHNhbGRyw6kgZW4gZGVmZW5zYSBkZSBsb3MgZGVyZWNob3MgYXF1w60gYXV0b3JpemFkb3MuIEVzdG8gCnNpZ25pZmljYSBxdWUsIHBhcmEgdG9kb3MgbG9zIGVmZWN0b3MsIGxhIEVzY3VlbGEgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KVG9kYSBwZXJzb25hIHF1ZSBjb25zdWx0ZSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIEVzY3VlbGEsIGVsIENhdMOhbG9nbyBlbiBsw61uZWEgdSBvdHJvIG1lZGlvIGVsZWN0csOzbmljbywgCnBvZHLDoSBjb3BpYXIgYXBhcnRlcyBkZWwgdGV4dG8sIGNvbiBlbCBjb21wcm9taXNvIGRlIGNpdGFyIHNpZW1wcmUgbGEgZnVlbnRlLCBsYSBjdWFsIGluY2x1eWUgZWwgdMOtdHVsbyBkZWwgdHJhYmFqbyB5IGVsIAphdXRvci5Fc3RhIGF1dG9yaXphY2nDs24gbm8gaW1wbGljYSByZW51bmNpYSBhIGxhIGZhY3VsdGFkIHF1ZSB0ZW5nbyBkZSBwdWJsaWNhciB0b3RhbCBvIHBhcmNpYWxtZW50ZSBsYSBvYnJhIGVuIG90cm9zIAptZWRpb3MuRXN0YSBhdXRvcml6YWNpw7NuIGVzdMOhIHJlc3BhbGRhZGEgcG9yIGxhcyBmaXJtYXMgZGVsIChsb3MpIGF1dG9yKGVzKSBkZWwgZG9jdW1lbnRvLiAKU8OtIGF1dG9yaXpvIChhbWJvcykK