Skip to main content Accessibility help
×
Home

Gradual session types

  • ATSUSHI IGARASHI (a1), PETER THIEMANN (a2), YUYA TSUDA (a3), VASCO T. VASCONCELOS (a4) and PHILIP WADLER (a5)...

Abstract

Session types are a rich type discipline, based on linear types, that lifts the sort of safety claims that come with type systems to communications. However, web-based applications and microservices are often written in a mix of languages, with type disciplines in a spectrum between static and dynamic typing. Gradual session types address this mixed setting by providing a framework which grants seamless transition between statically typed handling of sessions and any required degree of dynamic typing. We propose Gradual GV as a gradually typed extension of the functional session type system GV. Following a standard framework of gradual typing, Gradual GV consists of an external language, which relaxes the type system of GV using dynamic types; an internal language with casts, for which operational semantics is given; and a cast-insertion translation from the former to the latter. We demonstrate type and communication safety as well as blame safety, thus extending previous results to functional languages with session-based communication. The interplay of linearity and dynamic types requires a novel approach to specifying the dynamics of the language.

    • Send article to Kindle

      To send this article to your Kindle, first ensure no-reply@cambridge.org is added to your Approved Personal Document E-mail List under your Personal Document Settings on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part of your Kindle email address below. Find out more about sending to your Kindle. Find out more about sending to your Kindle.

      Note you can select to send to either the @free.kindle.com or @kindle.com variations. ‘@free.kindle.com’ emails are free but can only be sent to your device when it is connected to wi-fi. ‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.

      Find out more about the Kindle Personal Document Service.

      Gradual session types
      Available formats
      ×

      Send article to Dropbox

      To send this article to your Dropbox account, please select one or more formats and confirm that you agree to abide by our usage policies. If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your <service> account. Find out more about sending content to Dropbox.

      Gradual session types
      Available formats
      ×

      Send article to Google Drive

      To send this article to your Google Drive account, please select one or more formats and confirm that you agree to abide by our usage policies. If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your <service> account. Find out more about sending content to Google Drive.

      Gradual session types
      Available formats
      ×

Copyright

This is an Open Access article, distributed under the terms of the Creative Commons Attribution licence (http://creativecommons.org/licenses/by/4.0/), unrestricted re-use, distribution, and reproduction in any medium, provided the original work is properly cited.

References

Hide All
Ahmed, A., Findler, R. B., Siek, J. G. & Wadler, P. (2011) Blame for all. In Proceedings of the 38th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2011, Austin, TX, USA, January 26–28, 2011, Ball, T. & Sagiv, M. (eds), ACM, pp. 201214.
Bader, J., Aldrich, J. & Tanter, É. (2018) Gradual program verification. In Verification, Model Checking, and Abstract Interpretation – 19th International Conference, VMCAI 2018, Los Angeles, CA, USA, January 7–9, 2018, Proceedings, Dillig, I. & Palsberg, J. (eds). Lecture Notes in Computer Science, vol. 10747. Springer, pp. 2546.
Bañados Schwerter, F., Garcia, R. & Tanter, É. (2014) A theory of gradual effect systems. In International Conference on Functional Programming (ICFP). ACM, pp. 283295.
Barendregt, H. P. (1984) The Lambda Calculus: Its Syntax and Semantics. North-Holland.
Bierman, G., Abadi, M. & Torgersen, M. (2014) Understanding TypeScript. In European Conference on Object-Oriented Programming (ECOOP). LNCS, vol. 8586. Springer, pp. 257281.
Bierman, G. M., Meijer, E. & Torgersen, M. (2010) Adding dynamic types to C#. In European Conference on Object-Oriented Programming (ECOOP). LNCS. Springer, pp. 76100.
Bocchi, L., Chen, T.-C., Demangeon, R., Honda, K. & Yoshida, N. (2013) Monitoring networks through multiparty session types. In Formal Techniques for Distributed Systems, Beyer, D. & Boreale, M. (eds). Springer, pp. 5065.
Bocchi, L., Chen, T.-C., Demangeon, R., Honda, K. & Yoshida, N. (2017) Monitoring networks through multiparty session types. Theor. Comput. Sci. 699, 3358.
Brady, E. (2013) Idris, a general-purpose dependently typed programming language: Design and implementation. J. Funct. Program. 23(05), 552593.
Caires, L. & Pfenning, F. (2010) Session types as intuitionistic linear propositions. In International Conference on Concurrency Theory (CONCUR). LNCS. Springer, pp. 222236.
Caires, L., Pfenning, F. & Toninho, B. (2014) Linear logic propositions as session types. Math. Struct. Comput. Sci. 26(03), 367423.
Carbone, M., Honda, K. & Yoshida, N. (2007) Structured communication-centred programming for web services. In De Nicola, R. (ed), Programming Languages and Systems, 16th European Symposium on Programming, ESOP 2007, Held as Part of the Joint European Conferences on Theory and Practics of Software, ETAPS 2007, Braga, Portugal, March 24–April 1, 2007, Proceedings. Lecture Notes in Computer Science, vol. 4421. Springer, pp. 217.
Carbone, M., Honda, K. & Yoshida, N. (2012) Structured communication-centered programming for web services. ACM Trans. Program. Lang. Syst. 34(2), 8.
Castagna, G., Lanvin, V., Petrucciani, T. & Siek, J. G. (2019) Gradual typing: A new perspective. PACMPL 3(POPL), 16:116:32.
Chaudhuri, A., Vekris, P., Goldman, S., Roch, M. & Levi, G. (2017) Fast and precise type checking for JavaScript. PACMPL 1(OOPSLA), 48:148:30.
Cimini, M. & Siek, J. G. (2016) The Gradualizer: A methodology and algorithm for generating gradual type systems. In Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2016, St. Petersburg, FL, USA, January 20–22, 2016, pp. 443455.
Cooper, E., Lindley, S., Wadler, P. & Yallop, J. (2007) Links: Web programming without tiers. In Formal Methods for Components and Objects, de Boer, F. S., Bonsangue, M. M., Graf, S. & de Roever, W. P. (eds). Springer, pp. 266296.
Demangeon, R. & Honda, K. (2011) Full abstraction in a subtyped pi-calculus with linear types. In Katoen, J.-P. & König, B. (eds), CONCUR 2011 - Concurrency Theory - 22nd International Conference, CONCUR 2011, Aachen, Germany, September 6–9, 2011. Proceedings. Lecture Notes in Computer Science, vol. 6901. Springer, pp. 280296.
Demangeon, R., Honda, K., Hu, R., Neykova, R. & Yoshida, N. (2015) Practical interruptible conversations: Distributed dynamic verification with multiparty session types and python. Formal Methods Syst. Des. 46(3), 197225.
Disney, T. & Flanagan, C. (2011) Gradual information flow typing. In STOP. Available at: https://users.soe.ucsc.edu/~cormac/papers/stop11.pdf
Ernst, E., Møller, A., Schwarz, M. & Strocco, F. (2017) Message safety in Dart. Sci. Comput. Program. 133, 5173.
Fähndrich, M., Aiken, M., Hawblitzel, C., Hodson, O., Hunt, G. C., Larus, J. R. & Levi, S. (2006) Language support for fast and reliable message-based communication in Singularity OS. In European Conference on Computer Systems (EuroSys). ACM, pp. 177190.
Fennell, L. & Thiemann, P. (2012). The blame theorem for a linear lambda calculus with type dynamic. In Trends in Functional Programming, Loidl, H-W. & Peña, R. (eds). LNCS, vol. 7829. Springer, pp. 3752.
Fennell, L. & Thiemann, P. (2013) Gradual security typing with references. In 2013 IEEE 26th Computer Security Foundations Symposium, New Orleans, LA, USA, June 26–28, 2013. IEEE Computer Society, pp. 224239.
Fennell, L. & Thiemann, P. (2016) LJGS: Gradual security types for object-oriented languages. In Krishnamurthi, S. & Lerner, B. S. (eds), 30th European Conference on Object-Oriented Programming, ECOOP 2016, July 18–22, 2016, Rome, Italy. LIPIcs, vol. 56. Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, pp. 9:1–9:26.
Findler, R. B. & Felleisen, M. (2002) Contracts for higher-order functions. In International Conference on Functional Programming (ICFP). ACM, pp. 4859.
Flanagan, C. (2006) Hybrid type checking. In Principles of Programming Languages (POPL), Morrisett, J. G. & Peyton Jones, S. L. (eds). ACM, pp. 245256.
Fowler, S. (2016) An Erlang implementation of multiparty session actors. In Interaction and Concurrency Experience, pp. 3650.
Franco, J. & Vasconcelos, V. T. (2013) A concurrent programming language with refined session types. In SEFM. LNCS, vol. 8368. Springer, pp. 1528.
Garcia, R., Clark, A. M. & Tanter, É. (2016) Abstracting gradual typing. In Principles of Programming Languages (POPL). ACM, pp. 429442.
Garcia, R., Tanter, É., Wolff, R. & Aldrich, J. (2014) Foundations of typestate-oriented programming. ACM Trans. Program. Lang. Syst. 36(4), 12:1–12:44.
Gay, S. & Hole, M. (2005) Subtyping for session types in the pi calculus. Acta Informatica 42(2–3), 191225.
Gay, S. & Vasconcelos, V. (2010) Linear type theory for asynchronous session types. J. Funct. Program. 20(01), 1950.
Gay, S. J. (2016) Subtyping supports safe session substitution. In A List of Successes That Can Change the World - Essays Dedicated to Philip Wadler on the Occasion of His 60th Birthday, Lindley, S., McBride, C., Trinder, P. W. & Sannella, D. (eds). Lecture Notes in Computer Science, vol. 9600. Springer, pp. 95108.
Gay, S. J., Vasconcelos, V. T., Ravara, A., Gesbert, N. & Caldeira, A. Z. (2010) Modular session types for distributed object-oriented programming. In Principles of Programming Languages (POPL). ACM, pp. 299312.
Girard, J.-Y. (1987) Linear logic. Theoret. Comput. Sci. 50(1), 1101.
Gommerstadt, H., Jia, L. & Pfenning, F. (2018) Session-typed concurrent contracts. In Programming Languages and Systems - 27th European Symposium on Programming, ESOP 2018, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2018, Thessaloniki, Greece, April 14–20, 2018, Proceedings, Ahmed, A. (ed). Lecture Notes in Computer Science, vol. 10801. Springer, pp. 771798.
Greenberg, M., Pierce, B. C. & Weirich, S. (2010) Contracts made manifest. In Principles of Programming Languages (POPL). ACM, pp. 353364.
Honda, K. (1993) Types for dyadic interaction. In International Conference on Concurrency Theory (CONCUR). LNCS, vol. 715. Springer, pp. 509523.
Honda, K., Mukhamedov, A., Brown, G., Chen, T. & Yoshida, N. (2011) Scribbling interactions with a formal foundation. In ICDCIT. LNCS, vol. 6536. Springer, pp. 5575.
Honda, K., Vasconcelos, V. & Kubo, M. (1998) Language primitives and type discipline for structured communication-based programming. In European Symposium on Programming (ESOP). LNCS. Springer, pp. 122138.
Honda, K., Yoshida, N. & Carbone, M. (2008) Multiparty asynchronous session types. In Principles of Programming Languages (POPL). ACM, pp. 273284.
Honda, K., Yoshida, N. & Carbone, M. (2016) Multiparty asynchronous session types. J. ACM 63(1), 9.
Hu, R., Kouzapas, D., Pernet, O., Yoshida, N. & Honda, K. (2010) Type-safe eventful sessions in Java. In European Conference on Object-Oriented Programming (ECOOP). LNCS, vol. 6183. Springer, pp. 329353.
Hu, R. & Yoshida, N. (2016) Hybrid session verification through endpoint API generation. In Fundamental Approaches to Software Engineering (FASE). LNCS, vol. 9633. Springer, pp. 401418.
Hu, R., Yoshida, N. & Honda, K. (2008) Session-based distributed programming in Java. In European Conference on Object-Oriented Programming (ECOOP). LNCS, vol. 5142. Springer, pp. 516541.
Igarashi, A., Thiemann, P., Vasconcelos, V. T. & Wadler, P. (2017a) Gradual session types. PACMPL 1(ICFP), 38:138:28.
Igarashi, Y., Sekiyama, T. & Igarashi, A. (2017b) On polymorphic gradual typing. PACMPL 1(ICFP), 40:140:29.
Jafery, K. A. & Dunfield, J. (2017) Sums of uncertainty: Refinements go gradual. In Castagna, G. & Gordon, A. D. (eds), Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France, January 18–20, 2017. ACM, pp. 804–817.
Jespersen, T. B. L., Munksgaard, P. & Larsen, K. F. (2015) Session types for Rust. In Workshop on Generic Programming (WGP). ACM, pp. 1322.
Jia, L., Gommerstadt, H. & Pfenning, F. (2016) Monitors and blame assignment for higher-order session types. In Bodk, R. & Majumdar, R. (eds), Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2016, St. Petersburg, FL, USA, January 20–22, 2016. ACM, pp. 582594.
Kobayashi, N., Pierce, B. C. & Turner, D. N. (1999) Linearity and the pi-calculus. ACM Trans. Program. Lang. Syst. 21(5), 914947.
Kouzapas, D., Dardha, O., Perera, R. & Gay, S. J. (2016) Typechecking protocols with Mungo and StMungo. In Principles and Practice of Declarative Programming (PPDP). ACM, pp. 146159.
Lehmann, N. & Tanter, É. (2017) Gradual refinement types. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France, January 18–20, 2017, Castagna, G. & Gordon, A. D. (eds). ACM, pp. 775788.
Lindley, S. & Morris, J. G. (2016a) Embedding session types in Haskell. In Symposium on Haskell. ACM, pp. 133145.
Lindley, S. & Morris, J. G. (2016b) Talking bananas: Structural recursion for session types. In International Conference on Functional Programming (ICFP). ACM, pp. 434447.
Lindley, S. & Morris, J. G. (2017) Lightweight functional session types. In Behavioural Types: From Theory to Tools. River Publishers.
Melgratti, H. C. & Padovani, L. (2017) Chaperone contracts for higher-order sessions. PACMPL 1(ICFP), 35:1–35:29.
Milner, R., Parrow, J. & Walker, D. (1992) A calculus of mobile processes, I. Inform. Comput. 100(1), 140.
Mostrous, D. & Vasconcelos, V. T. (2011) Session typing for a featherweight Erlang. In Coordination Models and Languages (COORDINATION). LNCS, vol. 6721. Springer, pp. 95109.
Neykova, R. & Yoshida, N. (2014) Multiparty session actors. In Coordination Models and Languages (COORDINATION). LNCS, vol. 8459. Springer, pp. 131146.
Neykova, R. & Yoshida, N. (2017) Let it recover: Multiparty protocol-induced recovery. In International Conference on Compiler Construction (CC). ACM, pp. 98108.
Neykova, R., Yoshida, N. & Hu, R. (2013) SPY: Local verification of global protocols. In International Conference on Runtime Verification (RV). LNCS, vol. 8174. Springer, pp. 358363.
Ng, N., Yoshida, N. & Honda, K. (2012) Multiparty Session C: Safe parallel programming with message optimisation. In International Conference on Modelling Techniques and Tools for Computer Performance Evaluation (TOOLS). LNCS, vol. 7304. Springer, pp. 202218.
Norell, U. (2009) Dependently typed programming in Agda. In Proceedings of the 4th International Workshop on Types in Language Design and Implementation. TLDI’09. ACM, pp. 12.
Orchard, D. & Yoshida, N. (2016) Effects as sessions, sessions as effects. In Principles of Programming Languages (POPL). ACM, pp. 568581.
Ou, X., Tan, G., Mandelbaum, Y. & Walker, D. (2004) Dynamic typing with dependent types. In IFIP International Conference on Theoretical Computer Science, vol. 155. Springer, pp. 437450.
Padovani, L. (2017) A simple library implementation of binary sessions. J. Funct. Program 27, e4.
Pfenning, F. & Griffith, D. (2015) Polarized substructural session types. In International Conference on Foundations of Software Science and Computation Structures. LNCS, vol. 9034. Springer, pp. 322.
Pierce, B. C. (2002) Types and Programming Languages. MIT Press.
Polakow, J. (2015) Embedding a full linear lambda calculus in Haskell. In Symposium on Haskell. ACM, pp. 177188.
Pucella, R. & Tov, J. A. (2008) Haskell session types with (almost) no class. In Symposium on Haskell. ACM, pp. 2536.
Sackman, M. & Eisenbach, S. (2008) Session Types in Haskell: Updating Message Passing for the 21st Century. Available at: https://spiral.imperial.ac.uk:8443/handle/10044/1/5918.
Scalas, A. & Yoshida, N. (2016) Lightweight session programming in Scala. In European Conference on Object-Oriented Programming (ECOOP). LIPIcs. Schloss Dagstuhl, pp. 21:1–21:28.
Schwerter, F. B., Garcia, R. & Tanter, É. (2016) Gradual type-and-effect systems. J. Funct. Program. 26, e19.
Sergey, I. & Clarke, D. (2012) Gradual ownership types. In Programming Languages and Systems - 21st European Symposium on Programming, ESOP 2012, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2012, Tallinn, Estonia, March 24–April 1, 2012. Proceedings, Seidl, H. (ed). Lecture Notes in Computer Science, vol. 7211. Springer, pp. 579599.
Siek, J., Thiemann, P. & Wadler, P. (2015a) Blame and coercion: Together again for the first time. In Programming Language Design and Implementation (PLDI), ACM, pp. 425435.
Siek, J. G., & Taha, W. (2006) Gradual typing for functional languages. In Scheme and Functional Programming Workshop (Scheme), pp. 8192. Available at: http://scheme2006.cs.uchicago.edu and the paper URL is http://scheme2006.cs.uchicago.edu/13-siek.pdf
Siek, J. G. & Taha, W. (2007) Gradual typing for objects. In ECOOP. Lecture Notes in Computer Science, vol. 4609. Springer, pp. 227.
Siek, J. G. & Tobin-Hochstadt, S. (2016) The recursive union of some gradual types. In Lindley, S., McBride, C., Trinder, P. W. & Sannella, D. (eds), A List of Successes That Can Change the World - Essays Dedicated to Philip Wadler on the Occasion of His 60th Birthday. Lecture Notes in Computer Science, vol. 9600. Springer, pp. 388410.
Siek, J. G., Vitousek, M. M., Cimini, M. & Boyland, J. T. (2015b) Refined criteria for gradual typing. In Summit on Advances in Programming Languages (SNAPL). LIPIcs, vol. 32. Schloss Dagstuhl, pp. 274293.
The Coq Development Team (2019) The coq proof assistant, version 8.9.0.
The Dart Team (2014) Dart programming language specification. Google, 1.2 edition.
Thiemann, P. (2014) Session types with gradual typing. In TGC. LNCS, vol. 8902. Springer, pp. 144158.
Thiemann, P. & Fennell, L. (2014) Gradual typing for annotated type systems. In Programming Languages and Systems - 23rd European Symposium on Programming, ESOP 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2014, Grenoble, France, April 5–13, 2014, Proceedings, Shao, Z. (ed). Lecture Notes in Computer Science, vol. 8410. Springer, pp. 4766.
Tobin-Hochstadt, S. & Felleisen, M. (2008) The design and implementation of typed Scheme. In Proceedings of the 35th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2008, San Francisco, California, USA, January 7–12, 2008, Necula, G. C. & Wadler, P. (eds). ACM, pp. 395406.
Toninho, B., Caires, L. & Pfenning, F. (2013) Higher-order processes, functions, and sessions: A monadic integration. In European Symposium on Programming (ESOP). LNCS, vol. 7792. Springer, pp. 350369.
Toninho, B. & Yoshida, N. (2018) Depending on session-typed processes. In FoSSaCS. Lecture Notes in Computer Science, vol. 10803. Springer, pp. 128145.
Toro, M., Garcia, R. & Tanter, É. (2018) Type-driven gradual security with references. ACM Trans. Program. Lang. Syst. 40(4), 16:116:55.
Toro, M., Labrada, E. & Tanter, É. (2019) Gradual parametricity, revisited. PACMPL 3(POPL), 17:117:30.
Tov, J. A. & Pucella, R. (2010) Stateful contracts for affine types. In European Symposium on Programming (ESOP). LNCS, vol. 6012. Springer, pp. 550569.
Vasconcelos, V. T. (2012) Fundamentals of session types. Inform. Comput. 217, 5270.
Vazou, N., Tanter, É. & Horn, D. V. (2018) Gradual liquid type inference. PACMPL 2(OOPSLA), 132:1132:25.
Verlaguet, J. (2013) Facebook: Analysing PHP statically. In Workshop on Commercial Uses of Functional Programming (CUFP).
Vitousek, M. M., Swords, C. & Siek, J. G. (2017) Big types in little runtime: Open-world soundness and collaborative blame for gradual type systems. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France, January 18–20, 2017, Castagna, G. & Gordon, A. D. (eds). ACM, pp. 762774.
Wadler, P. (2012) Propositions as sessions. In International Conference on Functional Programming (ICFP). ACM, pp. 273286.
Wadler, P. (2014) Propositions as sessions. J. Funct. Program. 24(2–3), 384418.
Wadler, P. (2015) A complement to blame. In 1st Summit on Advances in Programming Languages (SNAPL). LIPIcs, vol. 32. Schloss Dagstuhl, pp. 309320.
Wadler, P. & Findler, R. B. (2009) Well-typed programs can’t be blamed. In European Symposium on Programming (ESOP). LNCS, vol. 5502. Springer, pp. 116.
Walker, D. (2005) Substructural type systems. In Advanced Topics in Types and Programming Languages. MIT Press, pp. 343.
Williams, J., Morris, J. G., Wadler, P. & Zalewski, J. (2017) Mixed messages: Measuring conformance and non-interference in TypeScript. In European Conference on Object-Oriented Programming (ECOOP). LIPIcs, vol. 74. Dagstuhl, Germany: Schloss Dagstuhl, pp. 28:128:29.
Willsey, M., Prabhu, R. & Pfenning, F. (2017) Design and implementation of concurrent C0. In International Workshop on Linearity. EPTCS, vol. 238, pp. 7382.
Wolff, R., Garcia, R., Tanter, É. & Aldrich, J. (2011) Gradual typestate. In European Conference on Object-Oriented Programming (ECOOP). LNCS, vol. 6813. Springer, pp. 459483.
Yoshida, N., Hu, R., Neykova, R. & Ng, N. (2014) The Scribble protocol language. In International Symposium on Trustworthy Global Computing. LNCS, vol. 8358. Springer, pp. 2241.
Yoshida, N. & Vasconcelos, V. (2007) Language primitives and type discipline for structured communication-based programming revisited: Two systems for higher-order session communication. Entcs 171(4), 7393.

Gradual session types

  • ATSUSHI IGARASHI (a1), PETER THIEMANN (a2), YUYA TSUDA (a3), VASCO T. VASCONCELOS (a4) and PHILIP WADLER (a5)...

Metrics

Altmetric attention score

Full text views

Total number of HTML views: 0
Total number of PDF views: 0 *
Loading metrics...

Abstract views

Total abstract views: 0 *
Loading metrics...

* Views captured on Cambridge Core between <date>. This data will be updated every 24 hours.

Usage data cannot currently be displayed

Gradual session types

  • ATSUSHI IGARASHI (a1), PETER THIEMANN (a2), YUYA TSUDA (a3), VASCO T. VASCONCELOS (a4) and PHILIP WADLER (a5)...
Submit a response

Discussions

No Discussions have been published for this article.

×

Reply to: Submit a response


Your details


Conflicting interests

Do you have any conflicting interests? *