It's a busy time with the coronavirus and stressful as well but I'm here today with my wife Linda and we want to take this opportunity to recognize the countless women who serve in the United States Navy, active in reserve, uniform and civilian, as well as those who serve as military spouses on the front lines at home. These are challenging times right now for all of us but there's no doubt that women have and will continue to make history in exciting ways. As March comes to an end we want to recognize women's history month as well as the amazing work being done by so many. Each of us is making history in some small way right now. The Navy is full of trailblazers who paved the way for the more than 67,000 women who serve as part of our active force today. These spouses, mothers, daughters, sisters and co-workers serve in every rank from seamen to admiral and in most every job from naval aviators to deep-sea divers. Right now there are female doctors, nurses and corpsmen deployed aboard the USNS Mercy and Comfort as part of the Navy's broader response to the coronavirus epidemic. There are also many women who are acting at home as nurses to their own families. Thousands of women also serve our Navy team as military spouses, supportive family members, government civilians and reservists. I know the sacrifices you are making and what you bring to the Navy team. While some receive public recognition, many do not and I encourage all Navy leaders to take note of these accomplishments. To the women who forged ahead and broke through that glass ceiling, thank you. And to the women who served selflessly with little fanfare day in and day out, we appreciate all that you do. We all have important roles to play in service to the Navy and to our nation and your work matters whether it's at home in an office or board ships at sea, it matters and we thank you. We also would love to see your amazing stories right now so join our conversation at hashtag Navy Women Making History. Well said Linda. See you in the fleet, shipmates.


Carbon nanostructures, CNSs, are promising materials for use in antimicrobial applications due to their unique mechanical, electronic, and biological properties. Recent research has focused on understanding how CNSs interact with microorganisms to assess their potential as antibacterial agents. This review summarizes the current state of knowledge regarding the interactions between CNSs and microbes, focusing on the physical, chemical, and electrical effects of CNSs on cells. This article was authored by Ahmed Aljameili, Surgit Alancheri, Katarina Bazaqa, and others.


Thank you. Hi everyone, so I'm Pierre-Marie and this is Raphael. We are both software engineers at AdaCore and today we'll talk about you, we'll talk to you about Lancet, which is about to bring source code analysis to the message. So, Lancet is a meta-compiler. Okay, what? Lancet, in this project, we created a DSL to make it easy to basically implement frontends, like compiler frontends. So, it's Lancet generates libraries, which can be used to be the first half of compilers that can also be used in debuggers to parse an expression and to evaluate it. For interactive code browsers, when you can click on an identifier and that leads you to the definition of this identifier. To write also static analyzers like linters or think of yeah, Selenkt ID or this kind of thing. And also we want to provide to make it easy to write refactoring tools, that for instance you ask on your whole code base, okay, please rename this type definition and all the usage of it. So, we created this originally because when in the AdaCore system we exactly need this kind of library to implement, to improve tooling in general. So, Lancet was for that, but it can be used for other languages as well. So, let's have a brief tour on the DSL and how you express things, how we can use Lancet actually. So, first of all, so, for now, the Lancet, it's a compiler, you feed it a Python-based DSL. So, you're not really writing Python, just using the Python syntax to express something else. One day we'll probably have a dedicated syntax. So, first of all, that should look familiar. The first, when you create a language, the first step is to create a lecture for it. So, you can split a stream into a sequence of tokens. So, the first thing to do is to actually define the list of tokens that your lecture is supposed to create. And then you provide rules that start from your geeks and compile into some automata to actually implement the lecture. So, this should be familiar if you have already written a specification for flex, for instance. It's the same mechanism. The next layer is to actually define the list of nodes, of three nodes that your passers are going to create. So, here you can see, well, using the Python syntax, you define a class hierarchy where a node can be extracted and so on. And each node can have a list of fields. So, for instance, if you have a function definition, you have a field that gives the name of the function, the list of arguments, the body of it, etc. So, you define the tree. And the next step, you just create, you write passing rules. So, like in Bazen, if you know it, or Gac, you write, so, passers in a recursive descent fashion to, well, you say, okay, this rule, if you find this token and this token, you will produce this node and this in a recursive fashion. So, and this is built, it is compiled into a passing library that is based on packets. So, Lancet will take all the definitions I showed and will compile that. In particular, it will, so, it will analyze the grammar. And from it, it will say, okay, we're creating this kind of node with this kind of field and this kind of field, so it will perform type inference. And if you remember here, so, I can define fields without providing them type. Well, the grammar will infer a type if they are not specified otherwise. You can specify them to be more explicit and, Lancet will check for consistency. Okay, so now we have all the, really, the bottom layer of your front end. So, you have lexing, passing. And the next step is semantic analysis. So, the first thing, so, semantic analysis is the part that will answer questions such as, okay, what is this identifier referring to? What is the type of this expression? And so on. So, the basis for that is what's called in literature scoping or lexical environments. So, here we provide, so, in AST nodes, we provide special annotations that we describe, okay. We have a function, okay, this function creates a scope and everything that will happen inside it will act on the scope, again in a recursive fashion. And so, these special annotations will enable you to create mappings, so, kind of dictionaries that map from identifiers to nodes. So, this is the first step. And then, you will implement semantic analysis using, well, you create, you add yet another kind of annotation on nodes. So, this kind of annotation, so, it's methods. We call them properties in linkage. The public one will actually implement the semantic analysis API that you want to provide to your users as a library author, such as here. So, we have a vertical property that will, well, on the variable reference, it will fetch the corresponding variable declaration. And you can also have private properties that will just be implementation details and users won't see that. And so, these properties, you write them using functional programming language that you created. So, this part here. So, here you take, for instance, the current node that is a variable reference. You take the environment that is associated to it and you perform a request giving its name. So, it's supposed to, is the variable definition in the scope, it will return it. So, here, we'll, we don't see it, but there are types in this, it's a functional language that is typed and we type inference. So, link it, when it compiles it, make sure that your expressions actually have a, are meaningful. And we reject incorrect ones. Okay, so, with just this base, we can already do passing analysis for a great deal of languages. And this is cool. So, all you have to do is to write all the properties you need to answer the request that you want users to, to have access to. But there is still a missing piece, which is, in ADI, we needed it, which is overload resolution, which is so, and type inference. These are problems that are difficult to solve just using a mere functional language because, for example, here, let's see, we have an example, well, we have several functions that are, that have names that are equal, but they accept arguments and have written types that are not exactly similar. So, for simple cases, such as this one or this one, well, here we have a call, a call to F1, so one of these two, that takes an int. So, an integral literal, so it has to be a call to the first one. So, here we have a floating point number, so it has to be this one. Here we call F2 with an integral literal and there are no F2 functions accepting integrals. So, this results to nowhere. And you have complex cases such as this one. So, we can see here that we may be able to solve with some fancy algorithm which F2 is called here. You see, it takes a character literal, but, okay, both F2 takes a character literal. So, here the difficult thing is that solving actually, doing the resolution of names is a problem that requires some non-local knowledge, resolving which function is called by, here by this F1 call. Depends, can depend on something that is quite far. So, yeah, it requires non-local knowledge. So, just to add something about that, this problem is Ada specific. In Ada, we have that. So, you can overload on the return type of a function. But in, for example, a functional programming language is such as OCaml, you have a non-local type inference and you have the same kinds of problem. So, what we are trying to do is have a general solution for these kinds of problems. And this general solution is, well, so, if we take the example that I just quoted earlier. So, this is the complex call that we want to solve. We can collect a set of constraints. So, here, so, let's, for the purpose of discussion, let's call this function called C, this function called B and this one A. So, we see that A takes a character argument. So, here we have this constraint. So, A, its first argument, well, its type must be a character. We pass the result of A2 as an argument of B. So, the return type of A must be the type of the first argument of B. The same applies for the autocoll. And because we're calling, because A is about calling F2, well, we see that A is one of these two. Yes, they are on the same line. One of these two declarations. Same goes for B and C. And so, you collect a set of constraints. And then, well, in Lancet, we provide, along with the functional language, a satisfactory, ah, what's the name? A solver. Yeah, a solver. This don't say satisfiability. Yeah, blah, blah, blah. So, something that takes a set of constraints and that gives you, hopefully, the unique solution to this problem. And so, using all these building blocks, well, you're supposed to already express, be able to express semantic analysis for quite a large corpus of languages. And I will never fail to speak about what's next. Here, here. Let's be quick. We don't have much time. Thank you. Okay. So, Pierre-Marie described to you the mechanism by which you describe your language. So, the language specification. And this is what you as a, like, if you want to write a new language front end, this is what you will do. But then, you will have users for your library. People who want to, for example, write free factorings for AIDA or whatever language. For the moment, we only have AIDA. So, AIDA or AIDA. But then, we expect to have a lot more. So, I'm going to talk about what we generate. So, if it's not obvious yet, because it's a bit complicated, the meta compiler is not a very simple project. This is the pipeline of Lancet. So, basically, you will provide your language specification. This is what Pierre-Marie has been talking about so far. And then, you feed that to Lancet. And it will generate a library, like something you can call from your code. And that will provide you knowledge. So, this library is in AIDA, a language that you may be never heard about. But fear not, because we provide a lot of bindings to other languages, like C, Python. And it's really easy to generate bindings for other languages. And on top of that, the hope, the whole project, is to be able, from this language specification, to generate generic tools that I'm going to get into. So, the base library is made in AIDA. So, it was an easy choice for us. I'm just going to point at the name of the company so that you understand AIDA core. Basically, we needed low-level language that can produce fast codes and that doesn't have memory management, policy built-in that would be complicated for us to handle in IDs. For example, we didn't want to ship a GC along with the libraries because if you need to have results fast, maybe it's not a very good ID, et cetera, et cetera. But we could have chosen another language, but AIDA was an obvious choice for us because we have a lot of AIDA knowledge, and it's right on target for this use. So, since not a lot of people use AIDA, we provide bindings to C and to Python. And Python is the de facto scripting language of the ecosystem. So, once you generated your library, you can write away, use it from Python, launching an interactive shell, and, for example, passing a source code and asking for knowledge about the code. And it's easy to generate bindings to new languages because Lonkit has the knowledge from the language specification about everything, the data types, the fields, the functions that are available so it can very easily generate bindings to other languages. So, an interesting point about Lonkit-generated libraries is that they are crafted for incremental analysis. The reason we express, for example, the properties in a functional language, and the reason everything is declarative is so that we have freedom in the implementation to do something that takes the semantic and generate an incremental analyzer for it. So, as little state as possible in the spec so that we can do an incremental analyzer. And for AIDA, what this means is that if you change a file, you don't need to re-compute every file that depends on it every time like most compiler would do. I know some compiler are more clever than that, but Gnat is not, for example, which is the main compiler for AIDA. So, this was very important for integration into IDEs for us. So, this is an example of something we did with LibAID along, which is an engine generated with Lonkit. And it's a static analyzer for AIDA. It's very small. This code is the whole static analyzer using the LibAID along library. What it does is something very simple. It checks for binary operators like addition, subtraction, and checks if syntactically the two operands are the same. So, it's a very simple static analysis check. And surprisingly, we run it on our code basis and we found a lot of bugs in our code basis despite extensive testing and other more powerful static analysis run on it. So, once you have a static, once you have a syntactic analyzer for your language, well, if you have that at your fingertips, you can do a lot of stuff that is really interesting. And this could be adapted for another Lonkit frontend. We have a Python parser, for example. And we have this one running on Python 2. So, it's very easy to adapt because the API is exactly the same. So, what we also generate automatically from your grammar definition and your tree definition is an unparser. So, we have a mean to parse code, but we also have a mean to take a tree and produce a new source file from it, not using any source information. So, this is useful because if you remember, Pierre-Marie told you that we want to be able to do refactorings with the libraries. So, it means that you can modify the tree and then you can call an unparse primitive and it will generate a new source. So, this is a very neat abstraction to build refactorings upon. So, it uses the grammar and the ST definition. You don't need to write anything else. It will generate the unparser automatically. And so, you can use it to do this kind of stuff. So, this is a native source code, okay? Simple little world program. Very simple. And then we want to change it, change the string literal to by world, but not using said or whatever, but using the tree directly. And so, this is an example program that you can do using the Ada front end. You will look for the call and then you will start a diff and rewrite the string literal and put by world instead of hello world. So, this is all done at a tree level, not at a source level. And then you apply the diff and you obtain the new program. So, this is very convenient. I don't know how much time I have left. Very little, actually. So, we ship a number of tools along with the libraries and the hope from the toolkit project is that the more we go along, the more generic tools we have that you can use. So, once you have a language specification, you have generic tools working on it. So, we have simple command line tools that you can use. Playground is interactive shell based on hyperson. Parse is just an AST dumper. But we have more interesting stuff, like a prototype for a generic code indenter, for example. So, this is for Ada. And what you would do is provide a declarative way of indenting your code for the tree. So, you say for a package declaration, for example, I want the public and the private part to be incremented by block rule, which says incremented by three columns. And then the engine will do that automatically. And if you have a new language front end, all you need to do is to write this map and you have an indenter for your language. Syntax highlighter could be produced along the same way. We have all the information we need to produce a syntax highlighter. And going this way, we could imagine at some point being able to provide a whole server for the language server protocol. So, you write your language specification, you write how to go to definition, autocompletion, et cetera. And it will generate the engine that does it and you can directly plug it into your editor. So, for the moment, this is not done at all. It's just a dream. But we have a prototype for it, which is just a NeoVim plugin, and that already does quite a lot of stuff like indentation, go to definition for Ada. And it does a subset of that for Python too, because we have a Python front end. So, we already have a few prototypes for front ends based on Lancet. So, we have Ada, the beta language that is the most complete. And we have a Python. So, for Python, we mostly have the parser. But we have a very simple model of how the scoping works. So, in Python, it's a dynamic language. You don't really have static scoping, but you can model it so that you can use it in IDE. So, we have that. And we played with other simple languages like JSON or Kconfig to prove that we can actually generate front ends for more languages. And for the moment, that's all. But we hope that raising awareness about the project, people will try to write new front ends, maybe, and tell us that it doesn't work at all and that we need to fix everything. So, thank you for listening. You can find the sources for Lancet on GitHub here. And we have a tutorial. So, if you want to write a new front end for Lancet, we already have a tutorial that you can find here. So, it's still a work in progress. APIs are moving. And for the moment, except the tutorial, we don't have much more doc. But we will gladly accept any feedback issues could request, etc. Thank you very much. Questions? Yes, go ahead. Do you plan on, for example, creating a code generation yourself so somebody can maybe use it to prototype a simple back end for his language or something like this? So, the question was, do you have plans to generate, to be able to generate a simple back end for the languages? I imagine you mean declaratively also. Yeah, of course. So, of course, you can write back end using the front end for the moment, you know, but that's not what you're talking about. We had some ideas about that. It's really not our target at work, but nothing prevents it, nothing prevents it to do it if you, like it's a very interesting topic. So, yeah, I have a few ideas of how to do that, but nothing in the work for the moment. Maybe we'll do that once in no spare time, but maybe. Yeah. Yes? Does your tool preserve comments? Yes. So, we have a concept called 3DS, and so, when you pass the tokens, you can say, this is the token relevant for the tree, and this is the token that you need to store in the tree, but that won't imply, you know, a... Jennifer was passing. Yes, thank you very much. Jennifer was passing. So, in that case, it will be stored in the node. What we don't do for the moment is provide a rewriting API that allows you to insert comments, but we plan to add that at some point too. I think there was a question. It was that question. Okay, cool. Yes? What's the expressiveness of your constraints? So, the question was, what is the expressiveness of your constraints? Since, despite the appearances, I'm not very advanced at constraint solvers, could you precise your question a little bit? For instance, you said that you can implement a type inference like in NL. I think you need to be able to convey the type inference inside the constraint. I'm not sure that you can. So, yeah, so the what the precision was, if you need, if you want to type ML with it, you need to convey the type environment in the constraints. So, we have some ways of doing that. I don't know yet if they are going to be sufficient for ML. I'm working on a prototype and at some point I would like to publish a small example slash paper about that. For the moment, it's we really crafted it for Eda and then we are going to extend the semantics so that it is useful for more than that. Okay, thank you very much.


Hey, Jayon, thanks for the time. I'm wondering if you've met Kenors Jenkins and Danico Autry at this stage yet. Not yet. Looking forward to meeting them when they come in and build that camaraderie at practice and get to work. Is it something you said you're looking forward to it? A lot of turnover on defense. You guys have a lot of gelling to do compared to so far in your career, yeah? Yeah, always a lot to improve on. And with this defense, we got some new pass rushers and new DBs and looking forward to playing with these guys and getting out there on the field learning this playbook and just making plays and having fun. Kayla. Jayon, good to see you, man. Just in terms of that and getting out there as soon as you can for these OTAs, how important is it to kind of build that chemistry with some of these new guys with this defense as early as you can? Headed into training camp. So it's, you know, some new pieces we're adding and, you know, new voices that you got to get used to hearing and and just, you know, when the practice come around and just get to use how somebody plays and how how I play and then get used to that and just keep on building that team camaraderie. Terry. Jayon, from a player standpoint, does it make a big difference that Shane Bowen now has the defensive coordinators title? He and when last year he ran the defense but didn't have that beside his name? Titles don't mean that Shane's a really good coach and we trust them and he makes great play calls decisions. And we just got to go out there and execute it and and keep on building. We want to build from things that we did good last year and the things that we didn't do so good. And that's what the season is for in these practices and and we will. Jim Wyatt and Jan, obviously this season offseason a little bit different than last year. How important are these OTAs in your mind? What are the some of the things that you hope to accomplish and build on as you as you edge toward the season? Just getting used to playbook calls the looks that we're getting from from our offense and the offenses that we'll face in the future and just building on the adjustments and just just getting to know the defense really, really well. So when game time comes around when season hits, we're ready. And what guy you obviously know well is Roshan? I mean, you guys do you feel you're at the point where you guys know what each other's doing pretty much on a regular basis and how much fun is it to be out on the practice field with him? Oh, man, it's really fun to be out there with Roshan and all the other guys. Me personally, given my season cut short last year, I'm excited to come back and keep on building on what what I have displayed in the past and just keep on getting better and having fun with my teammates and making plays and win a lot of football games. Ben Arthur. Hey, Jayon, is there are are there any of the young guys out there as you know, I know it's early, but has anyone sort of jumped out to you on either side of the ball? This is only my second OTA practice, so that would be a better question for our head coach or position coaches. But those guys are going to come along and help us win in the future for sure. Thanks, Kayla.  My goal for this season is always to improve on just my game overall with covering and tackling and just being just overall a complete more player of myself and just continue to be a playmaker for my team and a leader as well and just be overall, just be a leader and a playmaker for this team and keep on building on my strengths and building on my weaknesses. Jim Wyatt. And I think, Jayon, you probably touched on some of this when you got your contract, but when you watched last year, just how difficult was that and what did you what were you trying to take in as you kind of tried to get yourself healthy knowing you weren't going to be able to return and play? Just taking everything one day at a time, you know, it's rough for anybody that season gets cut short like that. And now you just want to be out there with your team. But we accomplished great things last year, winning the division for the first time in a long time. And it was great seeing that and great seeing the guys play out there and win the games. And for this year, just to build on that, nothing that we did last year will matter. And we got to go out there and show everybody who we are for the New Tennessee Tigers.  Yeah, no doubt. You know, playing football since a young age and up to now got a strong love for the game and being able not to participate like I was last year. Definitely wasn't the best feeling, but I'm glad to be back and healthy now and to go out there and display my talents with this team and keep on building and growing. Perron.  You know, being in the system with these coaches, I know it's expected out of me and they know my talents and in my strengths and, you know, great places to put me in position to win. And I'm looking forward to going out there to make plays and, you know, getting balls out, getting interception tackles and GFLs and all that good stuff and just overall helping my team win. Last question, Terry.  Well, each year, you know, even though it's a one year contract, I just take it day by day, game by game and focusing on, you know, getting stronger in a way, room with Frank and conditioning in practice and just taking coaching tips and techniques from Braves and Jim as well and Shane and just keep on growing and just overall just getting ready to be, you know, be a part of the season and be a part of the game with my teammates to make plays.


Hello Earth citizens. My name is Jan and I'm a brain education instructor from Torrance, California. For those of you who are young like me, today we're going to do, and anyone who wants to be flexible, we will do a flexibility routine to heal our bodies and become healthier, happier, and more peaceful. Here we go. Feet shoulder width apart, bounce your shoulders, shake your wrists, your fingertips, take a deep breath in, and breathe out.  One, two, three, four, five, six, seven, eight, nine, ten. Keep shaking.  Feel your body. Take a deep breath in, arms up, and breathe out. Breathe in and breathe out. And now bring your arms above your head, clasp your hands to the sky, straighten your spine and feel your body. Take a deep breath in and breathe out. Breathe in. As you exhale, fold to the side, feel the stretch. Push your hip out, take a deep breath in, and out. Push your palms, push your hip. Breathe in and breathe out. Let's bounce ten times. One, two, three, four, five, six, seven, eight, nine, ten. Push those palms, take a deep breath in.  Breathe in and breathe out. Push your palms, push your hip. Breathe in and breathe out. Let's bounce. One, two, three, four, five, six, seven, eight, nine, ten. Stay here. Push those palms. As you exhale, push, push, push, feel your hip. Breathe in. Bend your knees slightly, come all the way up, exhale up to the ceiling. Now look up at the back of your hands. Stay there, feel the stretch. Push your hands to the sky. Take a deep breath in and breathe out. Breathe in and exhale forward. Stay here. Make your back flat like a table. Breathe in and breathe out. And now come down 45 degrees. Feel the stretch on the back of your legs. Breathe in and out. Come all the way down. You can come to the floor or you can put your hands on your shins. Looking up, feel the stretch. Take a deep breath in and breathe out. And now turn to your left side. Bring your hand on your foot and your knee and stretch all the way down. Let's bounce ten times. One, two, three, four, five, six, seven, eight, nine, ten. Stretch your body. Stretch your chest.  Straighten your leg and let's bounce. One, two, three, four, five, six, seven, eight, nine, ten. Return to the front.  Take a deep breath in.  Rotating your shoulders. One, two, three, four, six, seven and eight. Reverse. One, two, seven, eight. Return. Bring your chin to your chest for deep circles. Go all the way around. Bring your chin all the way down. Inhale up. Exhale down. Two, breathe in. One more time to side. And exhale, reverse. Inhale all the way up. Big, big circle. Chin all the way down. Two, inhale up. Exhale down and return. Move your chin side to side. And return and shake your body. Shake, shake, shake. Swing side to side. Take a deep breath in and breathe out. Bringing arms all the way up. One, two, three, four, five, six, seven, eight. Nine to the middle and one, two, three, four, five, six, seven, eight. Nine coming down and one, two, three, four, five, six, nine, ten. Slowly return. Take a deep breath in. Open, open. Breathe in and breathe out. Place your hands on your hips for deep circles. One, two, reverse. One, side to side. Return. Rub your palms together. And rub your knees. And let's make circles. Six, seven, eight. Into out. Two, one, two, seven, eight. Reverse. One, two, seven, eight. Come all the way up. Take a deep breath in. Now let's put our hands on our hips. Feet a little bit apart. Let's do gentle squat. Coming down. Begin. One, two, go as far as you can, but respect your body condition.  Take a deep breath in and breathe out. Stop. How do you feel? Do you feel more flexible?  Sometimes 10 minutes is not enough. And you may want to rewatch this video to feel even more benefit. Great job to experience a full one hour brain education class. Please visit a nearby Body and Brain Center. Bye. Thank you.


I'm really honored to be invited to provide the keynote speech here today at the ILDC 2019 conference. This is a great gathering of people in India coming together from many different points of view to talk about the importance of land rights as a way to address poverty, as a way to empower women, as a way to use innovative technologies to secure homes and property for people here in India. So it's very exciting to be here. And it's been really great to have you too. Do you want to tell us a little bit about you at the end of a lot of sessions? What were your key takeaways? What were you thinking of the most powerful messages of big ideas that you're going to take away with you? I'll highlight two really big ideas. One was the really interesting use of technology that's going on in Odisha using drones and unmanned aerial vehicles to map out urban spaces where you have to be very precise and very accurate in your measurements of land. But if you can very accurately measure land that's densely populated, you can help provide documentation of rights to people living in those areas. That is important because it means they're much less likely if you can issue documentation or records of rights. They're much less likely to be subject to forcible evictions. They're less likely to lose their homes, lose their businesses, put their children at risk, put their livelihoods at risk. So I think the use of new technologies to address this problem is critically important because there are so many people in this situation. It's very hard for governments to deploy the resources that are necessary to meet these needs. And so if you can find an interesting solution from outside of government to meet the needs, you can work in partnership with government and help achieve a lot of good goals. So for me that was a really interesting takeaway. I thought the other interesting takeaway was around the complexity of the inheritance system here in India. And so understanding that the land laws don't necessarily match up with the inheritance laws or the succession laws and how very different the succession laws are from state to state was a really powerful message. And so I think a good area for folks to do more work on. And Karen, what do you think about like a platform like ILBC where people from so many different kind of contexts, from different countries come together and share their experience? And there's a lot of enriching dialogue that happened here. But what else can be done to take these dialogues forward beyond this platform? Because this ILBC is your platform. And what do you think can be done to actually make the discussions, I mean take actions on this? So there are a couple of things that I think could be done. Number one, this is a great platform for people to connect and meet each other and then to pursue joint projects in the future. So it's a great networking opportunity for me personally. I'm looking forward to talking to a lot of different people and looking for opportunities to work jointly with them on projects moving forward. It was really interesting for me also to see that people from academia are here. So the other thing that can happen is that the papers that are produced can be published in academic journals or translated for media so that people in the media understand what the nature of the problems are in the land sector and as well maybe more importantly understand what some of the solutions can be. So I think you can speak out through academic publications, you can speak out through media, you can make partnerships and build on partnerships and those hopefully can carry on for years after we move this space. Thank you so much. It was really nice talking to you. It was a pleasure talking with you too. Thank you so much. Yeah, great to meet you.