Okay, hello everyone, thank you for being here and well this is my first time presenting at this conference so I would like to start by saying thanks to the organizers for this opportunity. So my name is Gustavo Silva and today we are going to be talking about flexible rate transformations and the implications these transformations have on a race bound checking and in the security of the Linux kernel, the upstream Linux kernel. Okay, but first a couple of words about who am I. I have a background in embedded systems. Before working as a kernel engineer I was an embedded software engineer so I gained experience developing applications with real-time operating systems and embedded Linux. This is my sixth year working as a kernel engineer. I collaborate with the kernel self-protection project and also with the Google open-source security team in the kernel division. Well, I'm a volunteer at Kinson computers. You want to know more about this organization you can ask me and we can have a conversation later. Okay, well this is the agenda. When I was writing the slides for this presentation I noticed that there were arrays appears twice in the title of my presentation so I thought that it was a good idea to start by saying a couple of words on arrays in C. So we are going to start with that and then we are going to explain how we sometimes we need to use arrays as trained arrays and then trained arrays as flexible arrays and then using flexible structures. Then we are going to move on to the main part of this presentation and we are going to talk about how we currently have multiple different ways to declare a flexible array and how well those are problematic and if we want to gain proper array bounce checking on trained arrays we need to remove that ambiguity from the kernel. Then of course we are going to tap on the case of UAPI. Whenever we need to land a lot of changes across the whole kernel tree there's going to be the case where we also need to touch UAPI. So let's see how we are doing that and well finally the current status of this work and some conclusions. Okay, well let me start with this. Here's the most simple declaration of an array in C. So here we have happy array and the size of happy array is clearly well-defined declaration. So happy array has enough space to hold 10 elements of type integer. One definition of an array is that well an array is a continuously allocated sequence of objects of the same type and another important thing to say about arrays is that they are very useful because we can iterate over an array right? So as long as we access this array through its valid indexes everything is going to be fine. So happy array is going to remain happy as long as we continue to access it within its boundaries. The problem with this is that the C language doesn't enforce arrays boundaries so it is always up to the developers to make sure that every access they every time they have to access any array they need to check that well it is going to be within the boundaries of the array right? Otherwise we are going to arrive into what I like to call the land of possibilities which well it's on the fine behavior. Well here's an example of a miserable array. Okay well sometimes in the kernel we need to use a trailing arrays and a trailing array is merely an array that is going to be declared at the end of a structure. So we have here an example the struct trailing to illustrate that it contains a trailing array and again something quite important to mention here is that if you notice happy array the size of happy array is clearly well defined at declaration. However there are going to be a lot of cases in which we actually don't know how big our array is going to be at compile time so we are going to depend on runtime to actually know how many space we need to allocate for for this array right? So in this case here I have an example of an array that depends on on some variables at runtime in order to depend in order to determine the total size of the total number of elements that it is going to contain. I guess this is a good example because well usually this type of objects this type of objects this variable length objects they need a header to describe the contents of their data right? So I think that structure is like a quite good example of a trailing array as an object of variable length. Okay now let's get into flexible arrays and flexible structures. Well a flexible array is merely a trailing array which with size is going to be determined at runtime and a flexible structure is just a structure that contains a flexible array at the end right? Okay we currently have three different ways to declare a flexible array and we classify those different ways into two main groups one that we call fake flexible arrays and which are in this case one element arrays and zero length arrays. So the need for for declaring a trailing array as a variable length object has been around since forever right? Since we needed to load firmware and make sense of it. So in this case people are starting to use one element arrays to declare this type of object and well before I add more to that I want to mention that well the opposite of a fake flexible array is of course a true flexible array. So what's a true flexible array? A true flexible array is a flexible array member. This type of object was introduced in C99 so this is part of the language. Unlike the other two ways we have to declare a flexible array one is a bogey hack. We are going to get into why it's a bogey hack and the second one is a new extension that if I remember correctly was added to in C90. Well let's get a little bit more deeper into what is why one element arrays are bogey. Here I have an example but well the problem with one element arrays is that one element. So that one element is always going to contribute to the total size of the containing structure. So that can be problematic. Developers need to be aware all the time that every time they use this flexible structure this containing structure they need to be aware that they are making use of a one element array. And at the bottom there are two lines of code as an example of how people usually compute the total size that they need to allocate for both the flexible structure and in the array right the flexible array. So you can see there that in this case count is going to in this example count is supposed to hold the total elements in the array. So to calculate the size for the allocation well we need to take into account the size of the container structure plus the size of the element type of the array and well we are going to multiply this by the number of elements we are going to we want our array to to ultimately have right. So you notice we need to subtract one from from that from that number of items in our array. So that's problematic I mean every time we use this type of arrays we always need to remember that okay this array is already contributing to the size of my container structure so whenever I need to do something we need to compute something with the size either of the container structure or with the size of the type of the array we need to take into account that extra size right. And well the second line at the bottom is how you can how you can write the same pattern but instead using the struct size helper which is at this moment a recommended way to do it. And well of course having that one element inside your flexible structure is a potential source of all by one problems. So again when we are working on flexible transformations we need to audit every place at which we identify that the size of the structure is being used for something. So also we need to verify that the original code doesn't already contain any kind of all by one problems. And well let's get into zero lake arrays. Well zero lake arrays is an extension that was added to observe like a remediation for the fact that at that moment the language didn't have a proper way to declare this type of objects right. This type of flexible arrays. So the difference is that compared to one element arrays well zero lake arrays don't they don't contribute to the size of the container structure.  And well again at the bottom there is an example of how you you can use the open coded version to calculate the total size to allocate for both the container structure in the in the flexible array at the end right. The fake flexible array. So well of course this this is not a happy array this is an unhappy array because well its size is zero. That's a bad joke but anyways okay now what is a true flexible array well in C99 a flexible array member was added to the language. So so now we have a proper way to declare this type of objects without having to to to be concerned about that exercise that we could be carrying around if you instead use a one element array right. So now every time we need to use this type of objects well the best way to do it is just using a flexible array member. And well one of the characteristics of this arrays is that they have to be at the end of the structure right. This is enforced by the compiler and the other two ways we have to declare the same thing we can actually have one of those arrays in the middle of a structure and the compiler is going to be totally fine with that. And of course that's again that again opens the door for potential problems right particular on the fine behavior. Okay well now let's see what happens well we've been talking about using the size of an array calculating the size of our container structure to calculate the total size for an allocation well now let's take a look at what size of opinions are about this type of trailing arrays. Okay first if we apply size of to a one element array we of course are going to get the size of the type of that one element right. If we apply size of to a zero length array instead well of course we are going to get zero because we are declaring that this array its size is zero. And in the case of a flexible array well here size of is going to fail because the compiler is going to complain that we are trying to apply size of to an object of incomplete size right so declaration a flexible array member lacks of a size so that's why it is of incomplete size. So well this illustrates a little bit how can be how this type of arrays having this all these different ways to declare the same thing can be problematic because again we need to remember how each one of those are have to be used right what are the things that we need to take into account all the time when we are making use of each one of those. So the behavior is different. Okay now again the lot of possibilities. I was doing some stock size transformations in the kernel I was working transforming this open code open coded pattern to to the stock size to use the stock size helper instead. And then I I ran into this issue and the problem here is that we have this zero length array just in the middle of a structure. And that is not a problem the problem is that this array is actually being used as a flexible array member so this is around time the size is not going to be zero right it's going to be bigger. And at the moment we try to make use of this array well all sorts of things could happen right one of them is that we can override RCU head which is just after it. Here the solution is just placing the serial length array just at the end of the structure and that would be the solution for the problem. However if we replace this serial length array with a proper flexible array member now the compiler is going to enforce this behavior so if other people come and yeah they made a mistake and introduce a new member to this structure just after this array well the compiler is going to complain so they are not going to be able to introduce undefined behavior as in this case. And well this might well be this actually is the the first time we did a flexible array transformation in the kernel self-protection project. I was doing other things but I run into this issue so I at the time I fixed this as undefined behavior. And the funny thing here is that this issue was introduced in 2011 and was fixed until 2019. So again this might well be considered ground zero when it comes to this work of making working on flexible array transformations in the kernel. Okay so so far we have seen how it is ambiguous it is it can be problematic to have ambiguous ways to declare the same thing. Now we talk a little bit about how these flexible array transformations have contributed to enabling array bounds. Currently we have we have array bounds enabled. It is disabled for GCC 12 only because well we realize GCC had a lot of problems so we disable as of now as of by now it is disabled only for GCC 12 but for the for the rest of the version is enabled and for Clang of course. Okay here when we were trying to enable array bounds we ran into a lot of false positives. The problem was that well people were using these fake flexible array declarations to to to declare having a dynamically sized object right. And well some of those some of those arrays were being indexed directly right through directly through their indexed. So those are false positives in the solution there. Well was only transformed those all those instances that we found into proper flexible array members so with that the false positives and the warnings all they went away. And we could continue making progress towards enabling array bounds right. So array flexible array transformations also has to have contribute to enabling array bounds in the kernel. And well here is a very simple example. This here we have the array name that was originally used was originally declared as one element array. And the warning is that well some code was trying to access index one of name right. But a declaration well name has only be can only be accessed through index zero. So yeah of course name was being used as a flexible array member. And here the fix was just transformed into a flexible array member. And that was a simple fix. And there are other more a little bit more elaborate where we have to well we could use a struct size instead of the open-coded version you can see at the top. Originally the people were using this pattern that we just saw. And they had to subtract one from the from the variable that was going to contain the total elements for the array right. So that's the that's that's a main issue with this type of flexible arrays. And of course at the bottom we have the one element array that was transformed into a proper flexible array member. And with that all those warnings went away. Okay well now let's talk a little bit about how this work also contributes to to the recent hardening of main copy. So this is an example of how a flexible array can be used with main copy. Here we have flexible structure. And of course we have our flexible array. And we want to copy some data into our flexible array right. So the size of the data is going to be some size. So this is a fairly simple example of how we can use main copy in flexible arrays. Now let's talk a little bit about how main copy works internally. With the recent updates to 45 source main copy internally used well by the way this is a simplification of the main copy function of the 45 main copy function. Internally main copy on the 45 source uses building object size. So what this function does is that it's going to give us the size of the object right. That we pass a pointer to an object. We pass a pointer to this function. And the function is going to give us back the size of the object this pointer is pointing to. So here well at the bottom of main copy we can see how we are trying to get the size of destination and the size of source at compile time. Okay so far any questions? Because I don't know if I'm going too quick or I mean I have a lot of materials so I have 75 slides so okay let's let's continue. Okay well now the thing is that if we apply well if we we try to to get the size of a flexible array through the use of building object size well the function is going to return minus one which means that it actually doesn't know how big this object is. And in this case it's totally fine because let's remember that flexible array meant that our flexible array our true flexible array member it doesn't have a size of declaration so it's fine it's fine that a building object size doesn't know how how big it is. Again so it is an object of incomplete size so yeah it cannot determine its size. Okay but what about fake flexible arrays what happened with them they do have a size one of them the one element array well we are saying that well it's the number of elements is going to be one therefore we are able to determine the total size of the array and of course a zero length array its size is going to be zero. Okay it turns out that building object size returns minus one for all those cases it doesn't know how big they are even though those arrays clearly have a size of declaration so that's another problem with this type of with these different variants to declare a flexible array. And again let's remember what size of thing about this arrays yeah it can be a bit confusing right. Okay but now let's see what happens if we try to use building object size to get the size of any trailing array what we found out is that building object size is going to return minus one all the time so it actually doesn't matter how big your trailing array is building object size still is not able to reason about the total size for that array so that's really really problematic. So yeah what is going on I mean we are trusting on building size to 45 and copy and it happens that it is not able to reason about the size of any trailing array. So yeah the thing is that at this moment main cop is not able to sanity check any trailing array and of course this is a case for go fix the compiler I mean and yeah we definitely need to fix the compiler we need to find a way to fix this because otherwise we are not going to be able to to add proper bounce check into to to to arrays to trailing arrays that have a size at declaration right. Of course size of is the only one that is able to reason correctly about the situation. Here it turns the size of the array the actual size of the array and it says that well it fails when we try to use when we try to apply this operator to the flexible array member okay but it might be worth it exploring a little bit why it is that building object size cannot reason about any trailing array. So yeah it happens that we have some legacy code in this example we have a socket address structure this is from BSD this is code from BSD so in this case we have this trailing array SA data socket address data and a declaration its size is clearly well defined however at runtime this array can go all the way up to 255 bytes of size right. So it is a trailing array with a fixed size of declaration that at runtime is going to be is going to behave as a flexible array member so that's problematic and that's actually the reason why compilers are currently trading all trailing arrays as if they were flexible array members and well this is part of the log in that book if you are curious about this situation you can go and take a look at that issue and well you're going to find exactly this explanation right we have legacy code that we need to keep running so we are sacrificing some legitimate cases in which building object size they have enough information the compiler has enough information to determine the size of an array but it just says that it doesn't know because you might want to use this train array as a flexible array member somehow right okay so yeah we have a problem so what do we do about it okay we need a couple of solutions first we need to get rid of the ambiguity of having multiple ways to declare a flexible array member right so we need to we need to have code that if we find the declaration of a one element array we know that the developers for some reason they indeed need to use this array they they need this array to contain only one element all the time in the case that this is supposed to be a variable length object well we need to see that they have declared this as a true flexible array member we also need to fix a compiler so again there's a link to a bulk in boxy laugh for GCC and where people is working on this problem so yeah from the side from the kernel side we need to do we need to get rid of flexible arrays of course we need to be we need to get rid of fake flexible arrays the one element arrays in the serial length arrays and we should only use every time we need to write new code that man that needs this type of code construct this type of objects we need to use flexible array members all the time so we need to avoid introducing more of this fake flexible arrays into the code base it of course we need to fix the compiler we need to fix how currently building object size is working in we have another another we have another solution we have there are other things that we can do so in this case we can add a new option that is going to be called a strict flex arrays so this is already working progress people both in clang and in GCC they are working on this and well a strict flex arrays is going to be supported in GCC 13 and clan 16 so let's see how this works okay this new option have different level values in the case that you use this option with level value zero this is currently the default behavior which is any trailing array can be considered a flexible array members so everything is going to remain the same it will use this option with a level value one well now only fake flexible arrays in true flexible array members are going to be used as variable length objects right so building object size is going to continue returning that it doesn't know the size of the object we level value to now only zero length zero length arrays and in flexible array members are going to be considered flexible array members around time so in this case now we are we are fixing the the one element array part right in the final option is the final level value is level three the sad thing about this is that currently as of today this is going to be supported only on GCC so there is an ongoing discussion from the clan side so they they don't want to introduce this option yet so we need to I know we need to persuade it to do it so in this case level value three well this is what we want this is what we need now finally only true flexible array members are going to be treated as as flexible array as objects of variable length at build time I'm sorry I'm sorry a runtime and yeah that's what we need so yeah so this is a lot of work I mean this is work in progress we have been doing flexible array transformations for more than a couple of years now and yeah we still need to do a lot more because the thing is that transforming one element arrays transforming zero length arrays into flexible array members is fairly simple compared to transforming one element arrays because as I have said we need to audit a lot of code we need to make sure that the developers originally they didn't introduce another one problem and we have found many cases where we have found cases in which they are they are allocating one to many items for this array or they are doing some they are using this flexible array structure without one element array into a couple more other structures so we need to verify that or the every time they are computing the size of these structures to get any other value to do any other thing everything is is is under control right so that's time consuming that's problematic and well yeah what we need to do is to finish all those transformations we need to complete that work and I know how long it's going to take but well we also need to enable flexible strict flex arrays with a level value of three we also need to convince client developers to add this option and well until if we complete that work if we transform all the fake flexible arrays into actual true flexible array members and we convince client of adding this new option that you see already has well at that point we can say that main copy a fortified main copy is going to be finally able to to sanity check all trailing arrays right of fixed size of fixed size okay so yeah so at this point we know how to gain bounce checking on on trailing flexible on trailing arrays so fixed size okay so now what about flexible array members we would like to add both checkings to those obvious however they are more challenging so this is this a solution that has been proposed from from I know how much this has been along I mean there have been people that has proposed this solution to this kind of problem so in this case the solution would be to add a new attribute a new attribute to relate somehow a valuable at runtime that we know it is going to contain the total number of elements for our array and relate this valuable to our flexible array member so with that compilers can reason about well now I know at least where I can go and look for the size of this flexible array right well let's tap on the case of uapi a little bit of course uapi is always challenging we need to we need to avoid breaking user space of course so the challenging thing in particular with one element arrays with transforming one element arrays into flexible array members is here's an example of that originally what we were doing we were duplicating all the members in the structure putting them into a couple of structures within a union right so that's a lot of a code chart and well now we have a better solution now we can use this new helper declare flex array so if you are maintainer and you happen to you know that you have one of these one elements in your code and you want to help us transform it well you can use now this helper so instead of duplicating all the members in the structure you can just add a new a union and inside you can just you add the one element that is going to be continued that will be continually used into by user space and you can add now a flexible array member through the use of the clear flex array so the flexible array member is the is the array that is going to be used on the side of the kernel right yeah the bad news is that again the size of this structure well is not going to be affected I mean that one element array is going to contribute to the size of this structure right okay what's the current status of this work well and one of the strategies that we have been following is first to address the issue of zero length arrays so as I said those are fairly simple to address so we have mostly finished that part of the work however we don't have a way to to prevent more of those issues to enter the code base so so yeah if you are writing new code please use flexible array members and and yeah well the one element arrays is still working progress that's the more challenging part of the work and yeah it's time consuming is we need to take a look at every place we need to double check stuff and after we transform the whole thing we need to verify that we we are not introducing off by one problems right and well yeah we've been using some different tools as they are problematic to to transform and sometimes the code ends having a lot of changes we need to somehow prove the maintainers that this update to their code is not is maintaining the executable part right as before and after the changes right that we are not actually modifying the logic that in that everything is continue is working right it's still working right so with for that we'd be using object dump recently we've we've been trying to use a Yidra I don't know quite right how to pronounce that but been deep also in some custom different tools and well conclusions well we definitely need to remove that ambiguity from the kernel we need to adopt the use of flexible array members every time we need an object of valuable length right so we need to stop introducing more one element arrays to the code base we need to stop introducing more zero length arrays to the code base and of course we need to update when well we need to convince client people to add this level value for a strict flex arrays and we first need to transform all the fake flexible arrays into flexible array members in order to be able to finally enable this compiler option right which is pretty new and of course well with this work completed the recent vulnerabilities that have been discovered over I know at least three years all could have been addressed by by this by this hardening to main copy in this flexible array transformations so this work is it's absolutely important it really improves the security of the kernel because if we can complete this work we can say that we are going to add sanity checking to all trailing arrays both of fixed size or a variable length through the use of a fortified main copy and that would be really really great and yeah well the last point is that we know exactly how to do this well it is just that it's going to take time but at least we have a clear vision I have to address this problem so I guess that's that's good progress and with that thank you I don't know if you have any questions about anything so you mentioned that you can prevent the you know the zero length arrays and then I guess in the future this one length arrays entering kernel but what has been efficient for us in past when we did similar like future undertaking of converting the atomic T to ref county to convert like a kernel reference counting to its proper type like a rotary coca-cennel pattern which would detect it and when they've integrated it to zero day so every time anyone tries to check in code when you code with this you know the offending thing that would be email sent to the where he's trying to check in with code me I don't know if anyone else and then even if they don't react I would look at the code and if it's indeed looks like you know they're doing what I shouldn't be doing I'll start following up with an email for developer and I was first afraid that it's going to be very noisy like I'm gonna get a lot of these emails but no it's actually like a special over time now my I might get an email once a couple of months like oh somebody's again trying to do it so so I highly recommend for kind of monitoring this while people kind of really forget this practice to this coca-cennel pattern automatically to grade it in zero day has been very sufficient yeah thank you yeah that definitely is a great idea I mean we run into the same issue when we were removing variable length arrays from the kernel and those by the way those those were raised in the stack we needed the help of the maintainer of Linux next so we were asking him to please enable this option so anytime people introduce new instances of this issue it can be reported in yeah that was some great help so yeah definitely we can do something similar now with coxsino yeah yeah thanks for suggesting so you mentioned one of the commits that you found at ground zero and was market of affixes so it could be back ported so have you found many other real bugs and what's the plan here to make sure they are back ported because back porting all the changes that introduce it here not feasible in my opinion oh no yeah and and actually we are not even thinking about it I mean we are not thinking about porting all the flexible transformations yeah no that's I mean I would be difficult yeah yeah well yeah the real bugs what we try to do is well to include the fixes stack and so with the hope that they are going to be taken by the stable people and they are going to be back ported yeah of course thank you do you know what the opposition to the the client folks have with adding the the equal three option yeah I if I remember correctly the argument is that well just don't use Sierra Leica race right something something like that right if I remember correctly yeah I can answer them the minutiae of that which is the clang folks take the position that if you're going to eliminate the GNU extension then you can't have a zero-length array because it's not legal in the C standard you cannot declare arrays with zero length and C standard the GNU extension was allowing a zero-sized array and then it is also a flexible array so they didn't want this like a splitting of of the use like oh yeah we'll still have a GNU extension but it will only provide us with arrays that have no size which them seems like a ridiculous position to take unfortunately that's not the reality of our world which is when the GNU extension was added some code made flexible array use out of it and some code literally use them as empty arrays as markers in structures and scattered over the kernel and sometimes there's an array that normally has a some larger size and due to config options or something the macro that defines its size drops to zero and there you know the code to work on it ceases to exist because it just gets dead code eliminated whatever but the definition of that array still exists in the structure and like you can't the option the clang is asking to use o the dash w zero length array which is which will warn on finding the definition in a structure it's like well like we can't we don't live in that world where we have this perfection and like I guess we can come up with some horrendous way to deal with that but it's much cleaner to just say yeah yeah yeah we accept having zero-length arrays there they exist like we have them we just want them to never be flexible arrays yeah because we currently actually we have built the kernel with clang in this w zero-length arrays option enabled and we have there are some configuration that in which we have more than 60,000 of those issues right and of course it is obvious not all of them are being used as flexible array members right okay well I guess that's it so well thank you thank you


Hi, I'm Zor. Welcome to Unisor Education. During the previous few lectures, we have discussed scalar and vector fields, and we were talking about certain characteristics of these fields, like gradient for scalar field and for vector fields, we were talking about divergence and curl. And curl was in two-dimensional and three-dimensional case. All this was basically a preparation for Maxwell equations of electromagnetic field, because these operators are very much involved in expression of these Maxwell equations in contemporary form. Maxwell himself, by the way, did not use something like a nabla symbol. He was using straight partial derivatives. And in our case, we were trying to kind of shorten the formula, and that's why we have used this very convenient symbol nabla, which can be applied as a multiplication to a scalar field or as a scalar product of a vector field or a vector product of a vector field. Now, again, before getting involved in Maxwell equations, let's just do a couple of problems related to fields. We will basically calculate all these characteristics like gradient, divergence, and curl, just to be a little bit more familiar with numbers, with fields, how they feel, etc. Now, this lecture is part of the course, Physics 14, presented on Unisor.com, and I suggest you always to watch the lecture from the website, because it's a course, which means there is a menu, there is a sub-menu, so you have to go, for instance, for this lecture to a Physics 14 course on this website, and there are other courses like Mass 14s, for example, and the part of the course related to whatever I'm talking about is called Waves, and then the sub-menu would be field waves, and among field waves, you will see this particular lecture, which is field problems, basically. And there are other lectures as well as the ones which we were talking before, and the ones which we will be talking as far as Maxwell's equations are. Okay, so I have three problems relatively straightforward, but again, the purpose is to get familiar with fields and calculations of these characteristics of the fields. Okay, the first problem is about gravity. So we have a gravitational field. Let's consider a planet Earth on a macro scale. So we are always considering these masses as point masses, and obviously the gravitational field is the field where you have the forces radially directed towards the source. So if this is the source, mass m, so all the gravitational forces are this type, towards the center. This is not exactly towards the center. Okay, now according to the Newton's law, if we have a mass m, then the force of the gravitational field would be g times m times m. This is gravitational constant. This is mass of the source of gravitation. This is mass of the probe object. And it will be inversely proportional to square of the distance, right? And I'm talking about x, y, z as coordinates basically of this point, considering my center mass is at point 0, 0, 0, at origin of coordinates. And this mass is at x, y, z. So this is something which I'm sure we all remember from physics, from elementary physics. Now maybe a little bit less familiar or maybe you don't remember it well. For this gravitational force there is a concept of potential, gravitational potential. Now what is potential? Potential of the field is amount of work which is needed to bring the unit mass from infinity to point x, y, z. Now this was addressed actually in the part of the course, the same course, physics for genes in the part called energy. And within that part there was a topic potential energy and within it there were some lectures related to gravity but I do suggest to maybe to review these lectures if you don't remember what is this gravitational potential. But in any case the explanation of this is amount of work per unit of mass to bring it from infinity to a particular point. So m is equal to 1 and this unit of mass needs a certain amount of work. Now in this particular case I put minus in front of this amount of work because if not we have to do this work. Its gravitational field does it for us. The reverse operation from the point to infinity would be on us. That would be positive but the same value basically. So its g times m and it was inversely proportional to square root. To a distance basically. Square root of x squared plus y squared plus z squared is a distance to this point. I mean if we are talking about let's say another variable called r for example distance it would be minus gm divided by r. Now again to derive this again you can go to previous lecture which I mentioned about energy. I consider this to be a known fact. So let's talk about gravitational field. This is a function which is a potential of this field at any point. Now what is this particular field in our language which is related to the previous lectures? It's a scalar field. This is a scalar. Now this f is a vector because it has a magnitude and a direction. Now this is amount of work. So it's a scalar. So we have a scalar field. Okay great. So we have a scalar field. Now what exactly do we need? This problem is what is the gradient of this field? Very simple problem. Now we remember that gradient is nabla u at x, y, z. Where nabla is d by dx, d by dy and d by dz. So let's assume the vector multiplied by this constant. That means we have to really produce vector which is this. Where u is basically a function of three arguments. And we have this function. Okay all we need to do is basically to take partial derivative by x by y and by z. That's it. Now thankfully they are symmetrical so we will take only for x for example and then we will extend it to y and z by symmetry basically. Minus. Okay. So what is the derivative of this? Well we can always rewrite u at x, y, z as minus gm and x squared plus y squared plus z squared minus one half, right? One divided by square root is the minus one half exponent. Okay. That's easier to take the derivative, right? So the derivative would be let's say by x. By x. So minus gm retains, these are just numbers, scholars. Now if I have something in some exponent, so that would be exponent times this in an exponent minus one, right? Times derivative of inner function, inner function by x only so we ignore y and z so it would be 2x. Derivative of x squared is 2x. Same thing by the way. The exponent and then we reduce exponent by minus one. It's all related to x to some exponent a if you want to d by dx it would be a times x minus one. So you have to remember this from the calculus. Which is equal to 2 and 2 minus and minus so it would be g times m times x squared plus y squared plus z squared minus 3 times x. Okay, great. Now, so this is our x component. Now d u at x, y, z by dy would be gm x squared plus y squared plus z squared minus 3 seconds times y. And d u at x, y, z by dz would be gm. Nothing to do with general motors. That's the gravitational constant times mass times x squared plus y squared plus z squared minus 3 seconds times z. Great. So we have three components. This is our vector of gradient. Interestingly, what is the length of this vector? Well, the length of this vector is if we will take square of one, square of two and square of three, the third, we add them together and have a square root of this, right? Okay, so square of this is g squared m squared x squared and x squared plus y squared plus z squared minus 3, right? That's square of this. Same thing for y squared, same thing for z squared. This remains exactly the same. If I will add them together, I will have basically g squared m squared and this minus 3 can be factored out. And I will have x squared plus y squared plus d squared in the first degree, right? So I have minus 3 as a degree of this sum and plus 1 degree of this sum. So the result would be g squared m squared x squared plus y squared plus z squared minus 3 plus 1 would be minus 2, right? Now the square root of this and what do we have? We have gm times x squared plus y squared plus z squared minus 1, which means 1 over, basically, right? So let me write it down this way. It's more familiar. And what is this? If I will add m here, that would be gravitational constant times mass of the source, mass of the probe, divided by square of the distance. This is a gravitational force, remember, of x, y, z. That's what we started with. This is the Newton's gravitational law. So what's interesting is that the gradient is basically a force of gravitation for a unit mass. So if m is equal to 1, gravitational field as a scalar field has a gradient. And the gradient is basically, first of all, it's a vector, right? Because it has x component, y component and z component, which means it's directed regionally, right? Because this is the same. This multiplier is the same and only x, y and z is. So basically it's like x, y, z times something, times the length of it. So the gradient is directed exactly towards the center of mass of the source of the gravitation. And its magnitude of this vector, gradient is a vector. So its magnitude is equal to the force by unit mass. Very interesting. So potential is a scalar field. Gravitational force per unit of mass is actually a gradient of potential of the field. Okay, that's the first problem. Next, I'm just giving you not a practical field, but just a field for educational purposes. Okay, this is a vector field now, x, y, z. And it has three components. For every point x, y and z, I have a vector. Vector has three components, x, y and z. So component of the vector, projection of the vector on the x-axis is zero, on the y-axis is zero. So its only projection on the z-axis is equal to basically the distance from the origin of the coordinate. Okay, my first problem is just describe it. I started to describe this field verbally. And how can we just draw the picture, maybe? Well, these are coordinates x, y, z. So for every point x, y, z, what is this vector? Well, projection on x and y should be zero, right? So it should be directed only along the z-axis. So all my fields are, all my vectors are directed, well in this case vertically. If I consider z to be a vertical and x and y to be horizontal plane. Okay, now what's interesting is that the vectors which are close to x, y plane which have zero z coordinate. So vectors here are zero. A little bit higher than that, they are small. And the higher they are, the stronger they are. Because their magnitude is z. So the higher we start, the longer the vector will be. So they're all parallel and their length is proportional to the height of the point where they start from x, y plane. Okay, so that's a kind of verbal description of the field. Now, what is the front surface? Front surface is where all these vectors are the same. Okay, the answer to this question is, well any plane parallel to x, y plane would be a front surface because all the vectors originated on any point here will have the same z coordinate and that's why they will have the same magnitude. So they're all the same because direction is all the same. It's all vertical parallel to z axis and their lengths would be always the same because they have the same z coordinate of origination of the vector. Next, what is divergence? Okay, divergence. That's something calculable. The divergence of vector v of x, y, z is equal to nabla scalar product with vector which is d0 by dx plus d0 by dy plus dz by dz which is equal to 1 this is 0, this is 0, this is 1. This is my x component, vx if you wish, this is vx, this is vy, projection on the y and this is vz. So divergence is always 1. That's interesting. Now, why is it positive? You remember we were talking about divergence, let's say, of the wind. We were talking about wind coming from the higher pressure to the lower pressure. Here we have exactly the same except it's from the low to the high. So we have certain direction. Masses are moving in some direction when the air is concerned. If there is a wind with nonzero diversion, it means it's not constant everywhere. It's maybe stronger in one case and bigger from another. We really have a source of higher density going into, molecules are going into lower density. So there is certain source of something. Now here we also have something, from nothing we have something. So it's just reverse project from the low to high. But anyway, there is a movement, there is a real movement. It's not just like a wind going with a constant speed everywhere in the same direction. That's not the case. Then the diversion would be 0. In our case it's positive. From something we get something more basically. That's what it is. Is there any place where the diversion is equal to 0? No, because it's always equal to 1, it's constant. And the next is curl. Curl is a vector, which is a vector product. Of nabla and v. So what is the vector v? v is 0 times i plus 0 times j plus z times k. If i, j and k are unit vectors along the axis. What is nabla? I will also use d by dx i plus d by dy j plus d by dz. Now, this is not the real multiplication. But again we are using symbolics of vector algebra to basically have our lives easier, so to speak. Now, what is the vector product of these two things? Well, if you remember, we were actually calculating this previous lecture. And it's a vector with the components which I will just try to write from memory. But in any case, if you will go to the textual part of this particular lecture, it's all derived in more details. So basically it's like this. So you have x component, y component and z component, right? So for z component, I do remember it's d of dy by dx minus dx by dy. And this is my z component. It's like that's multiplied by k. Now, what is in this particular case? dy, y is zero. So this is zero. And x by y, it's also zero. So this is zero. Okay, now I will just substitute circularly. So it would be dz by dx minus dx by dz times j would be equal to dz by dx. It's zero. And dx by dz, now this doesn't depend on x, it depends only on z. That's why the partial derivative is zero. Now, in this case, it's just straight zero, so it's also zero. And the third one would be dz by dx by dy minus dz... Oh, I'm sorry, I think this would be y. x, y, yes, that's y. Is that the same thing? z by y is zero, of course. Yeah, it's still zero. And here we have dx by z minus dz by dx times i. And it's also zero because this is zero and z doesn't depend on... This is v. So it's all zero. So the curl of our field is equal to zero. Now, it's kind of obvious because think about this way. If I will have this pedal wheel positioned anywhere, you see all these are parallel. And whenever I put it anywhere, if I put it in such a way that pedals... If I put my pedal wheel with the axis parallel to z, now my pedals would be this way, right? So it will not push anything. It will not spin. If I will turn, let's say, put it parallel to z. If I will put axis parallel to x or y anywhere, my forces will be the same on all plates. Left and right of the axis. So again, since they are the same on this plane, then if I put axis this way, my pedals would be, let's say, horizontal. But on both sides of the axis, that will be the same force. So this is a field, a vector field, which will, if these vectors are forces, they will always be the same regardless of how I put my pedal wheel. And that's why pedal wheel will not be spinning and that's why the curl is equal to zero. That's it. Third problem. It's a simple, actually, kind of field, obviously, specifically for educational purposes, just to go through some calculations. And the third problem will be similar, just different field. I will use a two-dimensional field, minus y square root of x square plus y square x. Now, the question is why did I put it this way? What is the length of this vector? It's square of this plus square of this, which will be y square plus x square divided by x square by y square, so the length is always one. So I wanted to have a field, which all the vectors at all points will have the same magnitude, which is equal to one. Secondly, let me just have a vector xy multiplied by v. Now, xy is a radial vector. Now, if I will multiply it, it's a scalar product. It's x times minus xy divided by square root plus y times x divided by square root, whatever, x square plus x equals to zero, right? Minus xy plus yx. Scalar product of this vector of a unit length is zero with a radial, which means it's perpendicular. I'm having a field, which is always at any point equal to the same value by magnitude, but it's always perpendicular. That's my field. So it's always of the same length, but always perpendicular. So it's kind of circular field, right? Okay, so I probably will have a curl not equal to zero, but let's do it step by step. So first of all, it's verbal description. All the vectors are perpendicular to the radius towards the point where the vector is originated, and all of the vectors have the same length. So that's the verbal description of the field. Now you can, well, it's a two-dimensional, so you can imagine it's on this surface of the board, right? So all vectors are kind of radial, but again, the length is the same. Okay, now, is there something which can be called a front line? Front line, well, in a three-dimensional we're talking about surface. In two-dimensional we're talking about front line. That's the set of points where the vectors in each point, all the vectors, are exactly the same. Well, the answer is any line which is going from the center would be such a front line, because all the vectors will be perpendicular to this line, and all of them have two lengths of one. So this is the front line, so to speak. So the whole, like, animal vector field, if you wish, are moving like this. Okay, fine. Now, what's the divergence? Okay, divergence is a scalar product of nabla and our vector. Okay, so we have to calculate derivative of this by x plus derivative of this by y. Okay? All right, fine. So my vx is equal to minus y times x square plus y square minus one-half. And I have to partial derivative by x is equal. Minus y is just a multiplier because we are deriving by x, partial derivative, minus one-half. That's the degree exponential, x square plus y square minus three second, which is one-half minus one, times two x. Which is two and two goes plus and plus goes, which is xy times x square plus y square minus three second, right? Great. Now, what if I take the y component of my vector by dy? Again, x, that's basically x times x square plus y square in the minus one-half. But I am deriving by y, so x is just a multiplier. And then I have to multiply by this x square plus y square to the minus one-half by y. So that would be x square plus y square minus three second and one-half and two y. Which is equal to minus one-half, sorry, minus one-half. Which is equal to xy, yeah, two and one-half goes minus one-half. Minus remains, it's important. Why is it important? Because if I will add them up, that would be zero. So divergence is equal to zero. Well, again, some explanation. Remember the divergence of the wind would be not zero if the wind goes from a higher to a lower. So in the area where it's higher pressure, the higher density it would be positive. And in the area where it's lower, it would be negative. But in between, where the air is just moving without any kind of modification in the magnitude, if they are far away, these points of lower and higher pressure, then somewhere in between, divergence would be equal to zero. Because it's just moving the masses without modification of their density. Here we have exactly the same situation because all the vectors, they are of different direction, I understand that, but they all have the same magnitude equal to one, right? And that's probably why we have this particular result. Does the direction make some influence on the divergence? I don't know. Probably it does, because in my case, everything is symmetrical. Everything is really circular. Now, if my vectors would be of the same length, but not such a nice symmetrical direction, maybe in some cases we will have divergence greater or less than zero, but not in this case. In this case, we have everything very, very smoothly moving without any change of direction, without any change of magnitude, sorry. So maybe if I will do it somehow differently, and you might actually try to create some kind of a field where the magnitude of all the vectors is the same, but divergence would still be somewhere different from zero. That's an interesting question. Okay. Now, where is divergence equal to zero everywhere again? And I do attribute this to constant magnitude and relatively symmetrical kind of always circular direction. And the last thing is let's calculate the curl. Okay, the curl. Curl is a little bit more involved, but what we have to do is exactly the same as I did in the previous problem. So, again, it's ddy by dx minus dvx by dyk. That's the z component. That's what I remember. Everything else are circularly changed the variables. I'm sorry. There is no k here. Oh, I forgot. This is a two-dimensional, not three-dimensional. So, basically, that's it. That's all we have. This is the curl in two-dimensional case. If you remember, I started with this when I was trying to explain the curl, and then I moved to three-dimensional where I had this whole ijk, et cetera. In two-dimensionals, that's it. So, this is my dx. This is my dy. All right. Let's just calculate it. dvy by dx is equal to minus y stands like a multiplier because it doesn't depend on x. x plus y squared in the power of minus one-half. So, I have minus one-half. x squared plus y squared minus three-half and two-x. Actually, I have already done it for dy. That's this one. No, I'm wrong. I'm wrong. So, it's x divided. So, I'm partially driving by x. So, it's not that simple. So, it's u times v. Okay, uv is equal to uv plus uv. Remember this formula for derivatives? Okay. So, in this case, my u is x and my v is x plus y squared to the power of minus one-half. Okay, so derivative of x by x is one times this thing without change plus x is without change. And now derivative by the second function. So, it's minus one-half. x squared plus y squared minus three-half times two-x. Which is what? Okay, let's just leave it as is. Now, my dvx by dy would be similar. So, first I have the top one. So, minus stays. So, it's one times x squared plus y squared to the power of minus one-half. So, that's the one thing.  So, this is the difference between them. Now, I have to take and that would be a curl. So, what's the difference between them? Now, two and two would be actually out. So, the difference would be this is x squared. Now, if I would change sine to a minus would be plus here. Now, minus and minus and then I would change the sine so it would be minus here. So, two and two can go. Minus stays. So, if I would write this. So, this is minus and this is minus. This is plus and this is plus. So, I'll have two x squared plus y squared minus one in the power of minus one-half. And here I have x squared plus y squared with a minus sign. So, it would be x squared plus y squared in the first minus three seconds. So, again it's minus one-half, right? x squared and y squared would be x squared plus y squared in the first degree. And this is minus three seconds. The degree we will add and that would be this. So, it's two minus one, it would be only one. So, that would be my curl of v. That's interesting. Now, first of all, obviously it's the length of the distance basically from zero to the point of interest, right? So, the curl is diminishing. It's inversely proportional to a distance. The further we are, the less curly basically the field becomes. And that's kind of obvious because since our field is circular, the further we are, since vectors are of the same lengths. Remember we started from the same length so this is equal to one. So, they are more, the further they are from the center of the circle, the closer they are to being parallel to each other because on a small radius, on a small radius, two vectors are on this particular angle between themselves. So, that's kind of more curly than if I would take a bigger radius, they are much more parallel to each other. So, that's why the curliness of this particular vector is diminishing the further we are from the center. And the proportionality is exactly like a distance from the center. Well, that's it for today. It's just small exercises in differentiating basically. So, you have to remember what is the gradient, which is multiplication by NABLA, which is divergence, which is scalar product by NABLA, and what is the curl, which is a vector cross product with the NABLA. That's it. Everything else is technicality. Please read the notes for this lecture. It's on the Unisor.com. And, well, basically that's it. The next would be related to Maxwell's equation. So, I will use this apparatus to present the Maxwell's equation. That's it. Thank you very much and good luck.


It's a real joy to be here this morning and to be able to give our testimony We must first thank Scott and him and Timberley Han that has invited us here It's been amazing these days for us to be in this environment. So thank you Scott and Kimberley for having us here so first we want to say a little bit about our background and We're from Sweden both of us and I came to the knowledge of the Lord when I was around 20 years old came from a secular background and Matt Jesus as my savior which was an amazing experience for me and turned me totally upside down This was when I was starting to leave my hometown go to University city of Uppsala. I thought I was gonna be there for about one or two semesters, but I haven't left yet so so and And there I came into contact with an evangelical organization called the Navigators Which is very good in Bible in Bible memorization Bible studies and evangelization Which helped me a lot and stabilized my life tremendously after a couple years I started to study after taking a Bachelor of Philosophy I started study theology and Eventually ended up as one of the chaplains at the University Which was a wonderful time to be able to evangelize among students in the meantime. I'm at Piquita and We got married. I think she will tell that story a little bit Well, yes, I was born in India Because my parents were missionaries there Methodist Missionaries My father was a pastor So so I grew up there until I was ten years old and I really love India very very much still And we have visited many many times and minister there But when I was ten we came back to Sweden and and Soon in my teenage years. I I was involved in the youth group in the Lutheran Church Which was very much alive and and they're centered around the Eucharist it was a sort of a could I say a Revival it was a high church and the Lutheran Church in Sweden is so many different groups. It's high church. It's low church It's very liberal parts too We so I enjoyed the Eucharist so much as a teenager but then in my early 20s that I I Met the charismatic revival and and I was sort of Yeah, I live I lived in those circles for some years and until I met Ulf and It was so wonderful to meet him It was it was a such a great blessing and we got married in 1976 Yes, and so we as as I became a chaplain the university we were involved also in the charismatic movement and eventually that led us to We saw the hunger Especially among young people for the word of God So we wanted to start a Bible school and as we did that we wanted to reach out a little bit further to to Christians everywhere and in this environment, which was the charismatic movement We eventually started a non denomination of charismatic church that church started to grow it's called word of life and The main emphasis was actually the Bible school people started to come from everywhere It was really a form of a Bible revival So step by step over the years there's been thousands of young people coming to this Bible school and this Bible school also reached out and Through the students that went out evangelizing and eventually going into missions. So many other Bible schools were planted this was in the 80s and We prayed a lot and Sweden's always been praying a lot about the Soviet Union and getting the gospel into the Soviet Union and then of course 1989 when the wall fell the Lord gave us a Wonderful golden opportunity and really challenged us to go into the Soviet Union. We didn't have the means for it but we had the the passion for it and the Lord provided the means and and in the very short time we were able to Go all over Soviet Union that eventually became Russia and all these different autonomous nations and preach and established churches and established Bible schools So after a number of years, I do this to say this rather quickly now, of course They it grew up. We did not start all of these but it was a movement it was like a avalanche actually and a golden opportunity actually a Cairo's moment to preach everywhere because they were so hungry after 70 years of communism. It was it was like a Their hearts were just so open and so thousands and thousands came to the saving knowledge of Jesus Christ It was amazing. We had a train and we actually rented a train from the KGB It was amazing Well, this is amazing because we met a KGB officer and he heard me preached and he said, you know What you have you should come and and and say this in Russia said I'd be happy to do it and and He said I have a train and it's a communist propaganda train excuse me from for the Consumers comes them all which is the youth movement in the Communist Party in Russia and he said it's not going so well for us anymore So I said I'd be happy to rent the train from you So we took it from St. Petersburg to Abakan in Siberia from Abakan in Siberia to Khabarovsk at the Japanese Sea We did it in two summers and every place we stopped a church was planted every place We stopped there were thousands of people that came and listened and That received the law it was a it was a overwhelming It was an overwhelming experience and this went on in of course in Eastern Europe and Into Central Asia and eventually into the Middle East and eventually India China Taiwan, so we have been very engaged in admission in many different ways as At the same time the local church in Uppsala That was the hub in all of this grew and it became eventually the largest Sunday morning attendance For a local congregation in Sweden, so these were these were wonderful times and are wonderful times But in this something happened step by step we were in Albania and this was before the the government the Communist government fell But the culture minister was open to us and we said we want to come and preach the gospel in Albania And he said no no no you can't do that. I said absolutely not I said can we have a culture exchange program in Albania? And he said of course no problem So we bring our choir and we sing Swedish Christian songs because we're Christians and can I speak he said yeah, of course you can start the meeting as long as I can end it and And and we said we want two hours of television and He said no television. I don't know Well, we must have television is that we cannot do this. We want the biggest arena in Tirana the capital and we want television and he said okay There was one channel in Albania at that time. They had four hours of television per day. We got two of those This was 1991 we're able to preach the gospel there. I would say before the Communist President fell he actually called in right in the middle of the television program and demanded that they would stop it And they didn't we were able to preach and we heard so many testimonies About people receiving Jesus Christ as their savior one thing happened in Albania that that that shook me Man that was Secretary to the next president came up happy and he said this is wonderful. I am also a Catholic This experience have not left me to this day because I was like I'm not a Catholic I'm a Protestant And this in a split second this happened. I'm a I'm a Protestant and well justification on Lutheran Holiness I guess I'm Methodist That Baptist and well, I'm Baptist, but I'm not really Baptist because I do believe you know the president of the Holy Spirit This was just raising in my mind But I'm also Pentecostal believe in the and the Holy Spirit but I'm also charismatic because I do more than just believe one thing about the Holy Spirit and and And this just and as I was thinking this I saw this Tree big tree and I saw this branch and I was like hanging Way out here somewhere You know when you're in something so intensive you can think you're the center of the universe, but you're not of course so In an instant I felt I'm I'm I'm somewhere on this tree, but very far out So I didn't know what to say to this How can I explain to this person that I'm not a Catholic but I'm a Protestant, but I'm this and this and this I couldn't so I just said oh, that's wonderful But this this stuck with me This Catholic thing Just got in there and stayed it like a seat Yeah, that was 91 and then We started to be more engaged in unity We start at least he and I we started to think that this is this is crazy. How divided we are and By by the Millennium shift a thousand two thousand two I Started to Read about Saint Bigita, you know, it was her feast day two days ago The only Swedish canonized Saint and she lived in in the 1300s and because I have her name I and because of the Jubilee that was coming up I was interested in getting to know her better and this was a trap from the Lord so I Read a big fat novel about her life in the Middle Ages in Sweden It was very interesting and and hurt her if she moved to Rome and she did a lot of things She was a very very courageous woman and and she fascinated me, but I also was very disturbed by She had visions of the Lord and and he spoke to her very much But I was she also had visions of Mary and she spoke to him to her and this for me as a Protestant was very strange How can how can Mary speak to her? This is she must have gotten it wrong She must be a little bit confused that must have been the Holy Spirit, right? So so this this I couldn't understand But I kept reading more and more books about Saint Bigita and it was it it taught me a lot Anyway about her Catholic faith how strong it was and how how she was very very How should I say? careful with her theology She had these visions and and local low cushion. How do you say it? Locutions, you know what I mean She heard and and She rushed to her confessor to check it out. Do you think this is from God or am I just? Making this up dreaming So I like that about her She was so so careful and maybe because she was a lawyer's and the daughter of a Very famous lawyer and judge you would say in Sweden at the time. So so she had this mind very clear mind So this this I liked But I still couldn't understand this thing about Mary So This is about the time when we are planning to Go away from our lever church to go to Israel for to start start a study center We sent out from the yeah, we were sent out by the church To Jerusalem to start a Bible school and study center So so I'm reading this about Bigita and and now I think I Have to find out more about Mary now I'm very prejudiced I suppose I know how it is to be judged by other people in the society in Sweden We had been Precisely criticized heavily one could say as a free church and as a Bible believing church You know we're doing missionary work and our Swedish society is not so impressed by that So Anyway, I Where am I really? You know something I will do as the Pope Francis always says please pray for me Please pray for me So we You thought that we were we need to be objective here. We need to go to the documents. Yes, so so To to really learn about Mary and to understand her and what the church teaches about her this this intrigued me now and I read several book good Catholic books now about Mary Your book Came our way one of the first ones together with some other books and I loved your book and if he explained so much to me and Actually when I understood I wanted to understand two things the immaculate conception and the perpetual virginity it's never talked about in in in the Evangelical charismatic free free church world So I had no idea about this and it's very very very important And I it's actually been a problem to me because I was thinking we know that Jesus is this God second person in the in the Trinity and he was born of a woman but How if if there's not something special with Mary How can he actually take human form and be without sin if she is contaminated by sin original sin? Couldn't it didn't go together? And and you were you were thinking about this for years Yeah, I had I have been thinking of this for years because I'd never heard anybody including you my dear husband had never I Had never heard well I had other subjects to talk about Actually when I read the the words that explain her immaculate conception I have I have it written down somewhere here, and it was so good It helped me to find it because it's it's somewhere Just say it because just say it because I can't say it because it's so good Yeah, yeah, I can't find it but you know I Read it in the Pope John Paul's Little book about Was it called in Latin? Redemptoris matter, you know it. Yeah, there he explained it with with a very Pregnant words very strong words and when I saw it and I had thought about it. I Could understand it. I could see it and I could believe it and it was it was There are very big blessing to me, and I was so happy the puzzle that had had a missing piece came together Finally, and I was Very very thankful to Jesus She was happy for 14 days I'm still happy. Yeah, she's still happy, but I mean it was it was such a Every calm moment such a you know and she talked about it all the time but this Immaculate conception all the time and and it really really made sense What happened when in the end of the 90s? We started to come into contact of course in the mission fields. There was two things that happened first. We saw Some deficiencies in our own work How to handle different problems and we felt we lacked some of the tools the other we started to come in contact with Catholics living Catholics and there were charismatic Catholics, but also others that really impressed us And as we moved to Jerusalem to start this study, Sandy, we started to meet Catholics everywhere.  I mean there And you have to understand we come from it's not like Steubenville we come from Sweden You don't find Catholics everywhere in Sweden I don't think I've ever seen a monk for example before I went to Jerusalem. I told a nun. I said I've only seen you on postcards So this is the background and and and now we are in Jerusalem We're doing our work, but at the same time we have free time and we feel this drawing from the Lord Closer to the Catholic Church first we're a little bit frightened and frightened about it But there's some irresistible here that we cannot deny and the big ita is kind of charging on and So she starts with Mary And I'm like, can't you start with something else like you know? she was the for a Protestant couple like Ulfamy she was the Begin hindrance so to speak to to understand the Catholic Belief, yeah, so so we had to conquer that mountain first Yes, it's true and And and because I've heard many testimonies from Protestants that that has become Catholics that that Mary was the last thing That they were able to cope with for us. It was the first thing and It was a big big blessing for us. We came in through Mary in this sense It was an extra blessing for Ulfamy when we lived in Jerusalem We lived in ainkerem that if you have been to the holy land, you know That is the place of the birth of John the Baptist. It's a small suburb of Jerusalem a very pretty wonderful place So here we are in ainkerem the place That Mary rushed up to to help her her relative Elizabeth and We had our office just next to Mary's well in this in this village and we could all the time here the church bells and and From from the visitation visitation church is the place of visitation. Yeah, and it became so for us Because this is where we understood and and started to really love Mary So and now I found the place I was looking for Okay, this is what was written in the Pope John Paul's book the Virgin Mary in the first instance of her Conception by a singular grace and privilege granted by Almighty God in view of the merits of Jesus Christ The Savior of the human race was preserved free from all stain of origin the sin This was so logical to me and so good. So I wanted to read it to you. You know it all by heart I'm sure So we were reading a lot studying a lot and many things started to make really sense I must admit that I mean I understood this about Mary But I was a little bit as a protestant with the background that we have in Sweden has been staunchly protestant now secularized, but it's been so we we had a lot of anti-catholicism in us just by breathing the air and And and and the culture and and the sentiments that are there that we didn't really understand How deep it was so the thing about Mary Mary, of course Mother of Jesus no problem with that But there are other things that are more problematic and one night. I was just laying in my bed wrestling this I didn't tell the guitar that I was wrestling this but I was and So I don't get anywhere with this Mary thing So I well I read the Bible. I just took the Bible and and and it opened up so as good charismatic You know you just take the verse you see Shouldn't do that but in this cell in this case it really worked so so it opened up to Matthew 1 and Here I hear this is I read about the angel saying to Joseph do not fear to take Mary to yourself unto yourself and I'm like Okay Yes, praise God praise God it was was exciting days there in Jerusalem for three years and I when we started to to understand this we also asked ourselves Why have we never heard this before? In Sweden in our in our all our Christian years And I thought it is because we have a lot sort of an iron curtain between Rome and Scandinavia we we just Don't look that way in the churches you and in the media you never hear anything about the Catholic world so so we were just We we have been afraid Actually of the of the Catholic Church. We have been afraid of it was foreign It is foreign to so many Swedes and it was to us, but now we're getting healed from that So of course we started to Come across the Saints so and the first one that we came in in contact with was St. Faustina I had no idea who St. Faustina was at all and But I living in Jerusalem where I had to go over here to Seattle and preach for a weekend and then back again That was a long journey, but so with some friends that went to a bookstore and Just looking for something. It was a secular bookstore. Just looking for something to read on the way back and I'm passing this religious section and this this one book is jumping out Now it's not physically jumping out, but it's it starts like this So I pull it out It's a brown and it looked and it says the life of sound St. Faustina Who's that so I put it back and just went on and then and I could just sense So I said well nah and and these I was with two very evangelical Friends So I didn't want to buy that book. I went around One more time and passed it and and there was again saying buy me And I looked at it again And then I looked at them they were over there by the counter and I said no I don't do it so then I went to the counter to go out and then I said no You can go outside. I forgot something so go to the car then I went back Bought the book put it in a brown bag Seriously and Back in Jerusalem we both read the book and we're so impressed by so many things actually things that we understood things that we have Experience things that we from our background really made sense and and resonated in our inward being in our hearts And that was quite amazing. So St. Faustina John Paul to Made an amazing impression on us and a journalist in Sweden asked me, you know about our Church life and ministry is there something in an interview? Is there something you regret? He said This was a little bit later when we were back in Sweden but I interject this and so He said I said if there's anything I reject and he was anything that I regret and he was thinking about mistakes in the ministry Possibly a scandal something like that And I said no Well, there's one thing that I regret and he said what is that? Journalists are very curious. I said yeah one thing I regret that all these years up until now I never discovered the Pope John Paul to and he said what? But I regret that it was like we were living in parallel universes But in Jerusalem Through books and through other people's stories We started to to understand both the Catholic Church dogmas and also Saints and personalities and Not the least St. John Paul to which was an amazing discovery But then we moved back to Sweden again after three years. Not quite. I have a story here No And it's a very important one because when we moved to to Jerusalem one of the first days We lived there We took a walk in the old city in the Christian quarters and I saw a little statuette of Mary In a window and it was different from everything else It it to me it wasn't as do you say kitschy, you know, you you know the word too plastic It it was a sweet Statue of Mary with a jar of water in her left hand and little Jesus a boy on her right side And it was so nice so so Swedish wasn't it? I thought it looked Swedish So I I bought it And scribbled in the clay you could see the word Bethlehem So I figured and the man in the shop said the yeah, these are made by nuns Okay, I so we figured nuns in Bethlehem And we really wanted I really really wanted to go and see more of their things But I could never figure out where they were in she talked a lot about this She wanted to go every week. She talked about it She's more interested in ceramics than I am but but but it was there was something there was something It was a pool it was and in many ways you have been leading the way like this. There's some yes Yes, yes, absolutely Something that that gets stuck in you and then you just go for it until you find it. Yeah, and then I found it but it was Just a few months before we left Israel in 2005 I saw in Jerusalem post a big article about nuns in Bates shemesh another town and not so far from Jerusalem and they had a monastery there and They were making things in pottery in you know pottery and chocolate and marmalades and and And they had a picture that I realized these are these are the nuns. They don't live in Bethlehem. I they live in Bates shemesh and Their name is sisters of Bethlehem. So that's why it was scribbled Bethlehem. Okay So immediately we we Arranged it for a picnic with our staff we went there at one day and On Sabbath the Jewish people the Israelis love to go actually many of them love to go to catholic churches out in the countryside It's it's like a trip to another world for them They love and it's nice. I think it's it's a chance for reaching out to them That the church must not miss when all these Israelis come on Saturdays So so anyway, we we went there and it started to rain and we our picnic sort of we didn't know what to do And then we met the sisters and they said come come come in and then use our little room here And we sat down and had our picnic and they joined us and we we were absolutely Surrounded by angels and these three sisters and they were so so nice and said, please Let us show you our little church and we were we like them so much and we yeah, we wanted to see their church So we worked up on the roof and then back in the back of the church and stood on a small balcony looking into their church Limestone church very simple very beautiful and our secretary then her name was Abigail and she was from America she was We saw something happened with her. Yeah, she she just been leaned over the rail and looked down in the church because they're sat at one sister in adoration before the visit sacrament and And we didn't know if Abigail knew what this was So so it was but to it. This is this is adoration. I know she said and tears were streaming down her face and We thought looked at each other said wow, can she know this? Yeah, and and God is really touching her and you know that moment Abigail was called back to the catholic church something we didn't understand and no She to us. She was a word of life, you know, she had been to our Bible school in Sweden She was also was Baptist. We knew that she also was a Jewish because in her family. She also had Jewish heritage and this was the reason why she was in Israel. Yeah, that's why she lived now in Israel. She had immigrated and Then she says no, I grew up as a Catholic what We didn't know that she had been very She she has seen our development these years to become more and more positive to let me tell that this is fun because Because big it has started to buy little icons and little pictures of Mary and little things and she was giving them to Abigail all the time like this And she said oh, she just like my mother stop this And then this happens to her God is so good She had left the church in rebellion and in her teenage years she had left everything and Not until she was over 30. She had come back to the Lord, but then through the Baptists in New York I think it was So and then she had come to us and then then she had this drawing here Yeah, and so she started to go down every Sabbath She wanted to go there to just pray and be with the sisters and one day she went to the The priors and she said I want to become a nun And listen this and the and the and the priors said well, that's wonderful But first you must be a Catholic And she said yes, but but I am in my background. Okay. Okay, so you're coming back. Yes, so here's a Former Catholic Baptist charismatic messianic Jew that now wants to become a Catholic nun And so she said do you have anybody that recommends you? Yes, my Protestant pastor So this This priors which we now know and we have a wonderful Contacts and these Bethlehem sisters have meant so much to us over the years She looked at her and said so you mean that a Protestant pastor recommending a messianic Jew to become a Catholic nun Yes, yes, and and and then she said then the priors said then there must be a God in heaven The olive tree, okay So we go back to Sweden and and He goes back to his Job as a pastor and we were warmly welcome back by our church there But we have all these new experiences that we just Want to share of course with everybody and so so one thing we did was to take colleagues pastors and Other Christian leaders that used to come for seminars to and listen to to we started to invite invite them to come with us to Rome for for sort of a educational purposes, so to speak and And one but first we had a private trip to Rome And we went to with an American lady the Catholic one of the first Catholics that we got to Befriend she took us to Rome to introduce us to the Pontifical Council of Christian unity And we met some monsignors there and it was a nice little talk. We felt rather awkward. We didn't know really if they Well, it's language difference We were we were very you know still very Protestant and we felt Anyway, it was it was good to meet these wonderful men But then we she had gotten our tickets to the scurvy if you know the the excavation below St. Peter's Church and And it that's that's something everybody should go and see and we go down there and we're in the first century sort of Walking among the graves of the Roman time and slowly we get closer and closer to the center of this excavation and and we come to the place where We where we see the relics of St. Peter and What is believed to be him and I think it is and we stand there and look and we're totally totally amazed Shocked shocked in a positive way and they tell us the story how they found this. Yeah, and and Peter is very dear to us in Peter. We have read so much We have Ulfas preach so much about Peter and his boldness boldness and and courage So it was a great moment for us and as we go out of the church we come up We're just by the altar and this is also spoke very strongly to us Jesus said you are Peter and upon this rock I will be my church and here we come up in the middle of This huge church by the altar and we know that is built right on top of of the tomb of St. Peter It's amazing and for it really shook us so we go out And we stand between these huge pillars Looking out on the square St. Peter Square together with our American friend and something happened that is so unusual So so crazy really You see the sky a big sky over Rome and there's Thousands of birds always flying in big flocks Back and forth and in one instant all of these birds come together and make a Big exclamation mark. What do you say? We were so touched down by the grave and and just looking in there and And as I walked out this what beginner said this about Peter and I was thinking, you know Is this is this true? Is it it is Peter and if it's Peter? And and then what Jesus said is true, of course He's the rock and here the church is built on him and I was full of this but with the with the questions So we're walking out and all three of us Instantly together see this for a couple seconds huge, I mean the whole sky huge exclamation mark like this and it's like the Lord is saying didn't I tell you? Sometimes you need signs You need mine, but you need some signs as well So anyway back in Sweden, we wanted to educate our people really not try to drag the church into the Catholic church we at all but to be more open because the years of Being occupied of talking about unity and the need for unity We wonder our people to understand that the body of Christ is big It's rich and the Catholic Church Definitely not just belong to the body of Christ but in the center of the body of Christ So we did seminars we did tours to it to Rome and we've had a over-the-years a number of Pastor seminars with hundreds of pastors that we have brought together from our networks and we taught them about this and they were very very open It was actually a wonderful time and and there were four things that we felt the Lord told us in this time And it was number one that we should Discover this that we really should discover what God has in the Catholic Church The second was that we should appreciate it not be so skeptical and negative The third thing was that we should draw closer to it and the fourth was that we should unite with it now this fourth I didn't pay sorry to say so much attention to this fourth I put it back because this is too much but to Help our people to discover to help our people to appreciate that what that we felt that was necessary had a Experience in Israel that was quite remarkable. I'll tell it real quick We were walking down the valley Gemini Valley where we lived and there was an olive tree and as As an evangelical and as a charismatic and preaching faith and so on you can you know You have to watch it you can be arrogant and there were times when I was arrogant no question about it And the Lord dealt with that in this very instant. There is a It's almost like a replacement theology where where the newest movement says that everything we have replaced everybody else And this is something that goes on in Protestant Christianity quite a bit which is a form of C.S. Lewis calls it chronological snobbery So like the latest is the best and so on to be on the cutting edge all the time So we were walking down this little valley and there's a old old olive tree It's old that you can look right through it is holds right through it And I hear this little voice on the inside as I passed this tree is dead, isn't it? So I looked at it a glance at it and and kind of nodded. Yeah, it's dead And then I heard very distinctly look again So I looked again, and I saw this green leaves On this dry branches and these old trunk and Very strongly the Holy Spirit rebuked me right there. You never again Call anything dead Because that's what we have done sometimes in arrogance and pride, you know all churches. They're dead, you know They're God's not moving there. He's moving here and so on and and the Lord dealt with me and with us With this arrogance to open our hearts to be more humble and to appreciate What is not just has happened in the historic churches But what is going on in the body of Christ and in the Catholic Church? And this was something that I had to share back home and it opened the hearts of many Not to have this attitude and we were very happy. So I was very happy to be a happy Unity preacher and ecumenically inclined pastor But obviously that was not enough for the Lord No, and by this time I'm totally convinced That the Catholic Church is the church that Jesus founded and That it has been standing here for 2,000 years and now it's waiting for us I felt that if I have now found the truth to the truth it was we were searching all the time the truth and And here it is. We have seen it. We have understood it and we know it and we believe it Then then really you can't say no. Thank you Lord We can't come we have other obligations We felt we had a lot of obligations of course because the ministry over the years had grown and and we were Working not just in Scandinavia, but in many nations and also because in our environment there were this Anti-Catholic or the suspicion about Catholicism that was go that was going on So I was wondering and I came to the point that even if I wanted to I can't So I dragged my feet a little bit because of the responsibility. We were Helped graciously by the Bishop of Sweden a wonderful Carmelite Monk and Bishop that is the first Catholic Swedish Catholic Bishop since the Reformation So the things are picking up in Sweden. It's things are changing He was a wonderful wonderful man that understood us very well And that we're able to help us in in in many ways, but I was still dragging my feet Until one night two o'clock at night. I just woke up just absolutely woke up. I usually don't so When I do many times it is the Lord kind of nodding me So I woke up and this was now now we're in November to 2014 somewhere in that 13 13, I'm sorry 13 and I woke up and I heard this voice just saying It's time to jump into the water and Then there's two ways you can go into the water. You can go by the way of Jonah or you can go by the way of Peter One way or the other it's time to get into the water And I kind of figured what that meant. I said, okay, so the next morning I said I told begin I think I think it's about time now for us to do it So step by step leading up to the 9th of March 2014 where we cost quite a story in our nation when we publicly declared that we in our in our church Sunday morning service that we were going to be Catholics But that was also quite a relief and now we know that this is what we wanted to do This is what the Lord wanted us to do and 21st of May 2014. We were received by Bishop under