So good afternoon everybody. Thanks for joining again. So we will continue now with a panel on term rates initiatives And I'd like to welcome again Yav Keis from ING and Alberto Lopez from EMI and then I have here to my left Dominique Limasson from BMP Paribas, also Sistinia coordinator for European market infrastructures and sharing BMP is sharing one of the subgroups of the working group on term rates Then we have next to her Mikaela Mazzoni senior officer for market integrity from Esma And then here right to my left Chiara McGonigal, who's assistant general counsel at ISDA So I should say that again we will Would like to use the Mentimeter tool for you to ask questions By the way, we have already collected a lot of questions Some are also I think relevant now for this topic and I will get back to you Later today to see what we can do with all these questions Which we don't have necessarily time to answer today or who may be a little bit too technical So I give the floor first to Alberto on the Uriba reform. Thank you. Thank you, Cornelia so I guess at the morning I had Not bad news, but it's realistic news about Ionia So I hope to bring some comfort with regards to to your I work now So this part, you know, so your I where is a major interest your interest reference rate It is administered by by EMI and this currently calculated from the contributions of a panel of 20 Banks Across Europe. So your I board was Categorized as a critical bench work by the Commission given the European Commission given its importance for financial stability and because of the wide use across a number of Financial contracts. So what you can see there is just to I guess To show you how important it is. So this is a quantitative mapping exercise that the The working group made at the very beginning of of the of the efforts and What what it shows is so taking into account the the 2020 deadline that we were discussing in the morning How much of all those Contracts by asset class would be outstanding after 2020 if the Uriba or if the reform were not to be successful therefore Your I board would not be deemed complying with the with the regulation It's only just to show you how how crucial it is that that the Uriba reform Succeeds so according to the to that quantitative mapping exercise the depth of the Uriba reference market is of about I mean About 62.6 trillion euro of your I will link financial transactions Will remain outstanding on the first of January 2020 so taken taking this into account and not only but also the recommendations of Iosco and the FSB back in 2013 Amy started the Uriba reform. So the Uriba reform Was not only It is now focused on the methodology but Amy has done a lot of a lot of work in In enhancing the transparency as well as the whole governance and control framework of the UI were benchmark Resetting process so The ultimate goal of the reform was to evolve the current quotes quote based termination methodology to a fully transaction based methodology In order to provide the market with a more transparent robust and representative index And that was the work that they made it for over three years so since the first recommendations from from from Iosco and the FSB were were published we conducted two big data collection exercises With the panel banks back then and not only the panel banks also with the support with the technical support of the ECB to assess and Develop a fully transaction based methodology That was 2013 2014 In 2016 a few months prior to the implementation of the the methodology we rerun an analysis To see whether that fully transaction based methodology would still make sense under the current market conditions and the conclusions were published on the 4th of May 2017 and Where that given the current market conditions so the liquidity in the market transition from the current current quote based methodology to one fully based on transactions is Simply not possible. It's not not robust so on the basis of of Those results those findings Amy has been working since the summer last year 2017 on the development of a hybrid methodology for your Ivor so that's a Methodology that calculates the submissions of the banks based on three different levels So it's hierarchical levels That you can see on the slide. So first you have So I mean do not forget that the regulation asks us to define a methodology that is Encored in transactions to the extent possible. So I guess that we are relying on the to the extent possible so first we have a level that is Based on transactions that satisfy certain criteria that Demi has defined and that reflect What your Ivor's underlying interest is then we have a second level that is also based on transactions but are adjusted either are adjusted to feed the your Ivor curve or Reflect or they are brought forward from previous days So level one submissions from previous days would be considered as level to input for today and then there is a Third level that relies on transactions that have not been used in any of the previous two levels as well as other market pricing sources And what the panel banks are supposed to do with all this information is to to estimate their cost of funds According to guidelines provided by me. So this is the methodology that that we developed It was developed together with a task force of market experts the FSMA so our supervisor participated as an observer in the efforts of the of the task force and The this methodology was the Was the main point of first consultation that was published at the beginning of this year The feedback that we received in response to that consultation was positive It was supportive of our our efforts and then we continued by testing this methodology With real data so under life under life conditions. So that's So before I've referred to the pre-live verification program So what we conducted this summer was the hybrid driver testing phase so it ran from May until the end of July 2018 and Three months three months no three weeks ago on the 17th of October. Amy published a second consultation paper That presents a summary of the findings from this from this testing phase and it also discusses Emmys Proposals for the different methodological parameters That had yet to be defined So the consultation period is still open. So I would encourage you to go to Emmys website. It may not be as fancy as another webpage that has been referred to previously, but you can find the document there and we would encourage really to read the consultation paper and Send your responses. So it is very important to get the feedback from the market because it is very likely It is for sure that we are going to go forward with the methodology. So it is important to get your feedback Following the analysis of the data and the submissions that were collected as part of the of the hybrid driver testing phase We are confident that the hybrid methodology is a robust evolution of the current quote based non-compliant with the BMR methodology and in turn this methodology the hybrid methodology Has a lot of potential to be compliant with the regulatory requirements of the BMR So Emmys calculations indicate that So there were a lot of rumors about the spread and the volatility and this is information that was published in the consultation So our calculations based on the data that we received Indicate that the hybrid methodology yields a rate which presents a natural market driven volatility that across all maturities ranges between 0.5 basis points and one basis point and in terms of average spreads between your I were calculated with the current quote based methodology and You ever calculated under the hybrid methodology we estimate that We estimate that across all maturities This spread ranges between minus five basis points and minus one basis point So the Belgian FSMA commended Emmy on the work done to develop and test the hybrid methodology and they indicated that it represents a Significant step towards an EU BMR compliant driver. So In the last meeting of the euro RFR working group a few weeks ago They also mentioned that you they would make an effort to expedite the authorization process once Emmy files for authorization An important prerequisite for the FSMA would be the assurance that panel banks are operationally ready and willing to contribute under the new hybrid methodology when it comes to the implementation of the Of the methodology it will be faced. So the face the implementation of the methodology will occur during 2019 and we intend to apply for authorization to the Belgian FSMA By Q2 2019. So that's well ahead of the two-year-long transitional Provision period that is contemplated under the EU BMR. So all you know It's better news than for you on our side. Thank you very much. I better, please again If you have questions, you can put them already now in the in the Mentimeter tool So we would move on and give the floor to Micaela Mazzoni from Esma on the written plans Thank you for an idea. So Good afternoon everybody Today, I'm here to talk about a single BMR requirements Which I believe affects most of you in the audience and is BMR article 28 to the content of which is in the first Slide before looking at the content. I would like to clarify a couple of things in relation to this obligation First it applied to all benchmarks. There is scope of the BMR That's for it apply also to a rival We just heard from Alberto the plan for authorization that MES developed It's important to understand that this obligation apply Before authorization after authorization in case a rival is authorized in case not authorized it apply in all cases and The second point is that and hope you're already aware of this this obligation applies its 1st January 2018 so it's been applicable in the last 11 months and In case your organization is not up to speed with this with this obligation I will urge you to to Implement and fulfill this obligation as soon as possible Now as concerned the con the content of the obligation as you can see it affects supervised entities This is a term defined in BMR so in case your supervised entity and You use a benchmark also use of a benchmark is a term defined BMR So if you tick these two definitions, what you have to do is to produce written plans that are sort of contingency plans that include your The action you will take in case the benchmark you are referring is materially change your system to be provided the obligation this requirements continue and say that We're feasible and appropriate this written plan has to include Alternative benchmarks. I think this is an important paragraph also to consider in relation to the current arrival circumstances and Then last but not least This written plan should be reflected in the contractual relationship That you have with your clients Now this is the text of the BMR article 28 to that essay this has been already applicable basically for the last 11 months At Esma what we have done is to issue a couple of Q&A's that you can find on our website You have the link at the bottom of this slide that Try to help market participants in implementing this obligation So in the first one we provide some flavor some additional details of what what a written plan can include While in the second we explain that this term that we have seen in the previous slide contractual relationship with clients is something governed by national law because Contractual law changes from member state to the member states however And I'm reading so the our guideline our Q&A provides some general principle that you should follow and In particular the fact that the supervisor entity should be able to demonstrate to the competent authority That you have communicated the written plan to the clients and That such written plans are legally affected under the applicable national law so Now the question I think is how to best Reflect this contractual relationship This written plan in the contractual relationship with clients and I think we all agree that the best way Is to include full back closes in the contracts that you have with your clients or In the financial instruments that you issue that reference a benchmark And in this respect, I want to point out a couple of things I believe that the the European the euro risk-free rate working group is considering whether it is in a position to provide some public guidance on how to include Full back closes in new contracts So in case this happen I would suggest you to check the ECB webpage dedicated to this working group because you can have Additional input and guidance on how to fulfill this requirement while in the in the derivative space and I don't want to say the presentation and is double will make in a second but Is that publish a document in September that is called the benchmark supplement Which was developed on the basis of these BMR article 28 to So as concerned the derivative space covered by is the agreements. There is already a public document Which I think is very good in in order to fulfill article 22 of the benchmark regulation So to recap you have a BMR requirement that is already applicable You have the text of the of the level one the benchmark regulation We at Esma. We issue some guidelines some Q&A's You have already needs the documents that cover these requirements potentially we have additional input from the working group and If you have Additional question on how you can fulfill this I suggest you to contact the National competent authorities of your country. You can find the list in our Esma website And I think that's all from my side Thanks very much. So I hope that was useful information for you in order to prepare for this And I understand also the working group plans to say something on this eventually So I hand over to Dominique to update us on the working group. Thank you So To start this presentation, I must tell you how happy I am today to present you as a work done by the group 22 has a since the last six months we did Tremendous amount of work and you will see the results and Thank you for that for the whole participants of the work group too so To start with our mandate, this was an important step for us. So our mandate is to explore the Fallback the possible fallback arrangements for you ribos This is this is very important because we've been talking extensively about the Uribo reform and Alberto just presented the last reform. So one of our Assumption in this working group is that the Uribo reform will be BMR compliant We have we need to have to work on this assumption. So we're working on a fallback So the job is to determine and recommend a term structure methodology for a risk-free rate Fallback for Uribo link contract. It's it's it's key. I mean each word accounts for Has counted for the work that we have done With ING we put in place what we call a high-level implementation plan and in that there were actually three missions I should say the first was the first one was to define the selection criterias for term structure methodology. So It was this has been a long process and a lot of discussions very interesting Then to assess the term structure methodologies against selection criteria. So to assess the The methodologies this has been a long technical work Because we had to imagine effectively not solution like in the subgroup 4 but Methodologies based on technical assessments. So it's been very interesting also, but very long very long work And finally which will be the last part almost the last part of our job Will be to organize a public consultation and I can tell you that this one Is not the best part for for us because we are not used to To organize a public consultation and to ask the right questions around this So we will in this consultation we will propose our select selected approach But we will also be totally transparent on the way we've been working and the other of course methodology that we've been working on and Thinking about a lot and then that we have we have a few questions and we will take into account your remarks so Second and this all this work has been done in a certain background or context As I said the first one was a Uribo reform It was very important very important for us to know exactly what will be the future of the Uribo and and to have an assumption on that So now we are We'll have more information that I should say even if there is still a Risk for Uribo not being compliant, but this is not our our job to judge this The second one is The Ionia ester transition. Why is it so important for work group 2? It is that to To have to make as a methodology working. We need to have a liquid derivative market If we don't have a liquid derivative market We cannot we can imagine all the other possible methodologies, but it will never work So this is this is key and that's why for us It is important that the transition is as quick as simple as efficient as possible and Carlos explained that very well this morning And then we have some other groups working on benchmark. We have of course the FSB Recommendation that we must take into account We have the ISDA consultation that would be exposed after After I finish so also it's important for us to coordinate closely with ISDA And also we have the work done by other jurisdictions other work groups Citing mainly the ARC and the Sonya group Actually, we are developing some relationship and some coordination with them Why is it important because we I don't know but we all do a cross-currency swaps and when you do a cross-currency swaps You have to index so we need to be current somewhere in the in them in the methodology we will choose even if For these two groups they have a different mandate and they have a different Things to sort out that I said don't really work on fallbacks, but this is another another session So Having say that I Wanted to we wanted to show you effectively What has been done as far as now so the first to work was on selective materials as I said so globally Globally you will find a lot of very precise and detailed documentation about what group to work on ECB site So this is what's not the purpose today to go deeply into details so On this slide you can see that all the criterias that have been selected Globally it corresponds to three big Iosco principle the data sufficiency the benchmark design and transparency and of benchmark Sorry determination, so this was a three main point and we've been working actively on this So once this criteria Criterias were fixed and we all agree on on these criterias We had to assess these criterias versus the different methodologies That we have working on these are the methodologies So you you will you will find the methodology that have been Also proposed by other work groups actually so the first one is the future based second one is the OIS code based Then we've been working on the OIS transaction based We we are also working but we start a bit late to work on this So it's not I don't want to present it today on the Composite methodology, which is a mixed of the OIS code based and the OIS transaction based We presented this methodology at the last Preneurization on the 18th of October. So also you can find all the details on the site of ECB But for the moment we're still working on it. It's it's it's not so it's quite complex The last the last thing is a so this this three or four with a composite the methodology are forward-looking methodology and the last part is concerning is the backward-looking methodology So backward-looking methodologies is very specific. We know that In the ISDA consultation you focus a lot on this methodology because you focus on derivative actually don't forget that we on Working on the new methodology for URI boiling contract means that you work a lot on cash products But it's really widespread. So we favor The forward-looking methodology for the moment We're still working on the backward-looking because we need to to also show some Some clues on these methodologies But globally as we think that we we need to show one methodology to choose one methodology as a fallback as a fallback This is important We we will rather favor forward-looking methodology So this is the word on this slide you can see the pro and cons I'm not going through it because don't have really Time for for that, but we are available for more details if you need we can call one of us So what is now the next steps so you can consider that job is done We work on methodology we can recommend one now We're most already, but it's not finished yet because as a matter of transparency as we said before on On the rest of the work work done by the work group. It is very important for us to share Our work to share all the assumptions we've been working on to share the methodology house or has been built with you With the market we consider already that in the work group you have a large Amount of expertise and the large part of the market which is represented But don't forget again that on on the uribo rip fallback the use the end users are Very widespread and go into the retail retail space. So it's important to communicate on this so as I as it is said As a scope is to to validate a Recommendation so we will recommend one methodology then we will ask you to validate First by the working group first my work group to then by the work group the whole work group and Then we will go public with a few questions not too much and This will help us because we will have with your feedback and this will help us to make to Maybe go on additional analysis. We just want to be sure that we didn't forget anything so To conclude We have to again to coordinate our efforts with all the Initiatives that are taken on benchmark on other jurisdictions, but also by groups like is that it is very important We have to go on having extensive discussion into the world group on term structure even if we consider that we are well advanced and We think that we have We have been studying all the actual possibilities and Then finally we will consider our job is really finished and then we can recommend a methodology When we will have the feedback from our public consultation and maybe we will have to go into further analysis Voila, thank you Thanks, Dominique So it's really a very complex task to think about the development of term rates especially with all the uncertainties that we still have and Also in conjunction with the other jurisdictions where they're looking at similar problems We can also learn from them of course, but we also see how we can coordinate so Is that is very active globally on Issues related to iBORs developing fallbacks and Transitions so I give the floor to Karen. Great. Thank you very much and thank you very much for the opportunity to present today on iBORs work across a number of different benchmark initiatives including work to improve the contractual robustness of contracts that are linked to Key iBORs such as such as your iBOR Before I begin I think anybody who's been to an ISDA conference or seminar on benchmarks has probably seen some version of this slide But I think it's useful in attempting to differentiate between the different benchmark initiatives That is they're involved in Before speaking specifically about our work on iBOR fallbacks So broadly speaking we distinguish or distinguish between I suppose three different types of initiatives So the first one is iBOR transition and then we have the iBOR fallbacks work And then we have our work on fallbacks related to article 282 of the European benchmark regulation So I think within those categories. It's probably Useful to distinguish between two broader categories. So one the voluntary transition process Which we expect to happen during the lifetime of an iBOR which is clearly the work being done by or led by The working group on euro risk-free rates in the eurozone and other public private sector groups in other jurisdictions And then the work on fallback so emergency provisions which are intended to be triggered upon the permanent discontinuation of a rate such as a key iBOR like Excuse me like your iBOR Within the category of fallbacks again to sort of categories here So on the benchmark supplement first just I suppose Following up on Micaela's presentation. We have developed a series of fallbacks Driven largely by the requirements under article 282 of the European benchmark regulation But the benchmark supplement is intended to be global in scope It doesn't just apply to those rates which might be subject to the benchmark regulation And what the benchmark supplement does is that it introduces fallbacks into derivatives as the product definitions booklets to the extent necessary so Identifying products where the existing fallbacks are either not robust or where fallbacks don't exist at all The benchmark supplement introduces a waterfall of fallbacks So so the way that works is that if there is a disruption to one of the rates that's referenced within a contract The parties will first attempt to agree upon themselves what the rate replacement rate should be if they can't do that They will look at any replacement rate that might have been nominated prior to entering into the transaction If that doesn't work, they may look to any replacement rate that might have been nominated by a regulatory authority or other body If that doesn't happen, they can move to calculation agent adjustment and failing all of those steps The parties can elect for a new fault termination Which is clearly not a great outcome But probably better than the alternative which would be the operation of an unrabust fallback Which might require parties to go out Into the market and obtain quotes or even worse scenarios where there are new fallbacks at all and you may end up with contractual frustration So separately and this will be the focus of my talk today Is this been engaged at the request of the FSB's official sector steering group? To work on fallbacks for specific key I borse so work towards improving their contractual robustness of Contracts which which reference those by incorporating Fallbacks into our 2006 is the definitions To introduce appropriate fallbacks for trades referencing those those key I borse Before I move on to that, I suppose it's it's useful to Explain a little bit around how the benchmark supplement and the I borse fallbacks Interact so the benchmark supplement has been published so to the extent that people enter into trades today Referencing the 2006 is the definitions the benchmark supplement will be incorporated into those trades the fallbacks will apply for legacy trades We're anticipating publishing a protocol at some point the next couple of months That will operate by introducing those amendments to legacy trades which reference the relevant product definitions in Respect of the I borse the benchmark supplement applies to those today So the I borse are obviously of the definitions related to the 2006 is the definitions to which the benchmark supplement applies Ultimately once the I borse fallbacks are published the idea is that will supersede the operation of the benchmark supplements You'll have a first order of fallbacks relating to the I borse fallbacks Supplement or however, that's ultimately published before then falling back to the the fallbacks contained in the benchmark supplement I appreciate that's a little bit complex. So apologies Focusing on the I borse fallbacks work specifically so in 2014 the OSSG as I think was mentioned earlier today Published their market participants group final report and that find that in most cases Fallback provisions within contracts are not sufficiently robust to cater for a permanent cessation Of a key I borse such as your I bor which acts as a reference for over a hundred and fifty trillion euros of financial products in July 2016 The OSSG invited is that to participate in its work to enhance the robustness of derivatives contracts referencing Those key I borse and as I mentioned just now is there undertaking work to amend the 2006 definitions to implement fallbacks To a range of key I borse which are on the side here, and I suppose most relevant for this group your I bor and Euro libor So how will they work? So the I borse fallbacks as I mentioned before designed to be used upon the permanent discon discontinuation of the relevant I borse So As we've been developing the fallbacks one of the things that became very clear is it was it was really important to get a consensus and agreed position as to what is meant by a permanent discontinuation And it was clear that that needed to be or operate As a predetermined and objective contractual trigger in order to avoid confusion in the market around when it when a Fallback or when a disruption or when a permanent discontinuation had actually happened As you think if certain parts of the market consider that a discontinuation has happened and others don't you may lead to market Fragmentation and for the exacerbate some of the the market disruption around the potential discontinuation of that I bor So the triggers what are they so the objective triggers that that we've come up with we've worked with our as the Relevant as the working groups to come up with these To trigger so one a public statement or publication of information By or on behalf of the administrator of the relevant I bor Announcing that it has ceased or will cease to provide the relevant I bor permanently or indefinitely And then the other trigger would be a public statement or publication of information by a public authority such as a regulatory supervisor An insolvency official or a central bank Which states that the administrator has ceased or will cease to provide the relevant I bor again permanently or indefinitely? Important to note that in both scenarios that presumes that there will be no successor administrator that will continue to provide the relevant I bor so we're talking about a scenario where The I bor has permanently discontinued and there's no replacement administrator That's willing to take over the administrative function with respect to that rate Also important to note that the fallbacks themselves won't actually kick in until the actual discontinuation of the rates So if you consider a scenario where there's an announcement that an I bor may be discontinued at some point in the future The I bor fallbacks wouldn't be designed to kick in until that rate is actually discontinued again in order to avoid market confusion So the fallbacks Themselves will be the fallbacks to the relevant risk-free rates that have been selected in each jurisdiction So in the euro area that would obviously be Esther But clearly there's some work to do there the RFRs are overnight rates Whereas the I bor's have term structures and incorporate bank credit spreads and risk premium So for that reason in order for the fallbacks to work effectively in order to mitigate mitigate against the risk of value transfer and further market disruption It'll be necessary for us to incorporate a term and spread adjustment to those RFRs When triggering the fallbacks so that they can work as smoothly as possible So in terms of how the contracts themselves will be amended as I've said previously as there will amend the 2006 is the definitions, which is where the definitions relating to those I bor's are currently contained the amendment will The amendment to the definitions will Incorporate those objective predetermined triggers that I mentioned earlier And it will also incorporate the fallbacks that will apply with respect to each rate each I bor upon the occurrence of that trigger so the fallback again being to the relevant RFR as adjusted to account for any term and spread adjustment As with the benchmark supplements As I mentioned at the beginning important to note that once the amendment to the 2006 is the definitions Has been published they will only apply in respect of new transactions going forward So it will be necessary for is that to publish a protocol which will have the effect of amending existing transactions referencing those rates To incorporate and to ensure that those I bor fallbacks are in place So how will we determine I suppose those term and spread adjustments as Dominique mentioned is to have Published a consultation on 12th of July of this year We launched a market consultation of both is the and non is the members in order to determine the methodology that should be used in Calculating the appropriate spread and term adjustment for each of the I bor's That consultation closed last month on the 22nd of October and is that is currently analyzing the results The responses to determine what approach that we should take in each instance So we intend to publish a full explanation of how we made our determination We expect to do so by the end of the year. Although that's not set in stone We will before doing anything we will publish the final approach for review. We will publish Information around how we made the determination as to which which of the various methodologies Should apply we will do that as I said before we actually go about making any adjustments or amendments to the relevant documentation So for this audience, I think it's it's important to note that the consultation although it asked some preliminary questions around your I bor It didn't specifically cover that rate because as you see July 12th When the mark when the consultation was published the identity of the euro risk-free rate wasn't yet known So now we know that it's Esther and we anticipate that next year once Esther is published that we'll launch a supplemental consultation covering your I bor And we will conduct out in the same way as we have done so so that's something to to look for next year And I think that's everything for me Thanks very much Karen So may I remind you one final time that now we will have questions and answers or if you want to put a question You can still put it on Mentimeter Yeah, and to allow for some time for that maybe a short wrap up of the of the session So this time positive news from from Albedo and as a working group We are extremely happy with that because it would be of a massive task of we also have to replace your I bor So thanks for the hard work and hopefully it will indeed be a full success So we expect somewhere half first half and the first half maybe third quarter your positive news And that's good because Mikael already made clear that despite your I bor probably surviving We still need to have a plan if it's easy to exist So we need to have plans in place as of all the contracts we have closed as of the first of 2018 Sometimes there are some confusions about that But that is the case and also for legacy contracts contract before 2018. We have to do this on a best effort basis We have to be ready for a potential transition massive task Not so easy to perform also since we don't have these fallback yet in place So it's it would really help and when when we have done our work So we fully realize that but already making the inventories is very important Luckily Dominique with the working group is doing a lot of work on creating that fallback. So that is our reaction to Getting also these full backs in place Looking at the outside world very important looking at the regulations looking at the FNF Sb but also with the the the worldwide RFR working groups like the RR dark the arc like the Sonya working group But also the Swiss the Japanese we have now contacts with all these working groups Work is progressing. So we have already identified the selection criteria very important and also we identified the various alternatives Not so easy also since we don't have a working derivative market yet So we have to do the work all under the assumption that the derivative market will be there once we start publishing Esther And the consultation will also go out on this one. So watch out for that one And then of course very important to Karen talking about the is that in the fallback language A very good example. So a lot of work have been done on is that also Yeah, it's it's for derivatives But of course for us, it's also very important that we have fallback language that is consistent across our products Because that would mean that in the end we don't end up with a basis risk. So the work on is that site? Yeah, for me, it's very important to also Set it should be a sort of template for fallback language that we have on other products So that we at least can fall back to the same benchmark. So a lot of work there Very important that it will be based on the new RFRs like Esther. So that is also very positive But still yeah, we need spats. We need spats for term and credit spread risk or also complicated task there I think the main conclusion also of the day is there is a lot of work also for you guys because I think there will be three to four consultation papers heading your way so it will be a busy Christmas time and first quarter of the year So we hope to get a lot of feedback from you because we fully realize that we can think about nice solutions But if the market and that is you does not accept our solutions. Yeah, we don't make stand any chance So thanks for your reaction already now Thanks, yeah, so Philip could you tell give us a few questions that you have collected The participants have been very active. So a first question is I sense a lot of interest in the preparation of Emmy for the phasing in of their methodology Maybe you could elaborate a bit more on that point Also, what how you would cater for the spread in that trend in order to ensure a smooth transition So as I said, so Amy's planning to conduct this phased transition from from the current methodology to the To the new methodology starting in in 2019 So we are in close contact with so again, I mean this is all being done in close collaboration or discussion with the FMA At this point, I mean the information that is public Is basically what I just said. So we're still trying to refine the details of that of that facing that facing is in previous also So first we need to guarantee that the banks are operationally ready So the phasing will allow for that and also In order to minimize any impact. We are trying to avoid a big bang implementation As if I mean it was planned to to be done in the case of the pre-life Well, the you ever plus the fully transaction based so Again, so we are planning to to conduct the phasing over 2019 apply for authorization by Q 2 2019 and have the hybrid methodology fully implemented by the end of Q 3 2019 Second question relates is probably more for Dominique. It's the question how long You estimate that it would take to develop a Term structure based on as there and what would be the role of the Transition or the relevance of the the union as that transition and in their process. What how could you get all these? as the implementation phase will probably take Just say the few months this is part of the work we still have to do to see I don't know to look for an administrator to work with a with a platform suppliers, etc. So It's very difficult for the moment. We have a timeline in term of The world group but then for the moment. It's very difficult to assess How long it will take which is certain is that The quicker as I said now the quicker is a transition the quicker is Esther can have We can have a liquid derivative market on based on Esther the better it is if at the end of the year we have a Liquid derivative market on on Esther. It means that the fallback could be could be computed We have the methodology so we just need the underlying So that's that's the answer I can I can make it's very difficult to say take one two three months one year to your It's really it all depends on the On the Esther at the derivative market And probably also on the transition part that we will choose because then yeah If it will see if you only able sees to exist or not or be fully linked to Esther We will force the liquidity probably in the in the OS market towards as the derivative. So that would make a The conclusion of a derivative market quicker if it would run in parallel. Yeah, you could still have a dispersed market So we're looking at those alternatives and we have a lot of questions on on the numerous consultations that are announced so I think there are two two questions what these will be used for whether they will have be used also By regulators in enforcing one a change in one direction or the other and There's a call for a bit more coordination in in these Consultation process so is I think that's one of the question is can the number be reduced Yeah, I think it's a good question The problem is that our timelines are still very tight And this problem is massive So yeah, we have to take the market by the hand in showing in full transparency the work that we do Which means that we need to also Consultate make the consultations on the various topics Yeah, that forces a little bit that we have a multiple Consultations coming out in the beginning of the year So apologies for that and we fully realize it But I still think it's very important that we that we reach out to the market because you have to know where we are What our thinking lines are? It also helps you in your preparations So it will be very difficult to do not do these consultations or only do these One after the other because then we will run out of time With the first of gen 2020 is there quite quickly And probably just another point I would mention I think although a lot of these consultations I think look superficially similar some of them are driving at slightly different things. So Some of them are looking at transitions. Some are looking at fallback. So I think it's Important as opposed to understand what the consultation is actually trying to achieve and the objectives behind it as well Then there's also a question on whether the development actually of fallbacks Might not lead to an outcome where those markets become more active and are detrimental than to to the new Euribus, right? So whether market partisans Have done a preference to move directly to those those fallbacks rather than Stay with Europe Can be And just over now, we are very very happy that the Euribus is still Will likely or hopefully be BMR compliant if we see more activity in our fallback solution and that can very well happen because also Internationally, we see the developments that they are more pushing towards Terms of success based on this free rates Yeah, that can also be a development that we see on euros at the end in a euro landscape And I think we would be perfectly happy with that So I think it would not be necessarily be bad. I mean, I think that the spirit of the FSB the recommendations were not only It was not so much about It was about having alternatives So I think that right now there may be an even over reliance on your Ivor and that's why we are here So that's why there is a systemic risk So I mean having an alternative and starting using other other benchmarks at least I mean, I don't think that it is necessarily a problem There's also a question on who will be the administrator of the new term rates and How that was that as a process for determining this how that will be led that procedure The work group has not yet decided exactly what will be the procedure for that we have administrators in our work group Very well represented, but for the moment We have not really envisaged that question That's it We have time for like two more questions or are you basically I Think I cover most as some as some Questions that do not relate to our our home turf so the euro era. So why would like those need to be addressed to other Entities and there was a more practical question whether the material would be made available that we show here And I think we can say yes. Yes All the slides presentations will be available on our website Thanks, Philip Okay, then I'd like to thank the panelists very much


So, yeah, so welcome to the session, so we are basically going to talk about some, you know, techniques, some functional programming techniques that we can, you know, use JavaScript for. So, I don't have a lot of, you know, a lot of text, so, so those are my, you know, so that's the agenda, but really, right, which is going to cover these things, you guys just sitting down. So, very briefly, you know, that's the agenda, right, so that's what we're going to look at. So, it's kind of funny that, you know, today we use JavaScript as a language for, you know, for so many different things, right, for so many different scenarios. Obviously, you know, building web applications, you know, adding intelligence on the client side, on the browser side, I think this is probably the primary use case.  So, you know, here in this session, we're just going to, you know, kind of talk about some language features in JavaScript, you know, kind of explore some of the functional aspects of JavaScript, right, what are some of the functional techniques that you can take a part of your job in JavaScript, so we'll just, you know, kind of walk through a bunch of demos, yeah. So, this is pretty much the only slide in my session today, other than some pointers to some resources and stuff. So, with that, let's quickly, you know, get started. So, it's kind of, you know, interesting how JavaScript, you know, and it's a lot of, you know, some of the principles of fundamental aspects of languages, the language itself is rooted in functional aspects, you know, functional principles. So, the first thing that I want to kind of talk about is the fact that functions in JavaScript are, you know, first-class citizens of the language. So, what do I mean by that? So, pretty much throughout this session, I'll be using a little console that I put together here. So, it's just a little audio, how visible this is. So, this is just a little console that we'll be using to explore various aspects of JavaScript.  You know, using alerts for print keyword statements is kind of annoying. So, you can say, you know, print something, and, you know, it brings the text of the right-hand side over there. So, if you have some errors here, then the errors show the bottom right-hand corner over there. So, those are some things that I can do with the console. So, we'll use this to kind of explore various aspects of the language. Functions are a first-class citizen of the language, right? So, what do we mean by that? You know, it's useful to think of functions in JavaScript as, you know, as being equivalent to pretty much like a variable, right? So, if you create a variable, assign a value to it, what all can you do with a variable, right? So, you can obviously declare it. You can assign values to it. You can pass variables as parameters to functions. You can return variables from functions, right? You can construct, you know, JavaScript objects where variables are members.  Turns out in JavaScript, this is probably a little comprehensive to folks who are coming from other languages, right, from C++, C sharp, Java. It turns out that functions can be used in pretty much all of these ways, that we just spoke about, right? So, for example, so what can you do with a variable? So, you can define one, right? Obviously, this is something that you've probably done, right? Pretty straightforward stuff. So, all I'm doing here is declaring a function, and I'm calling it, right? So, that's nothing major. All right, so, you know, functions are... I mean, this is nothing, right? You've done this, favorite functions to validate your forms and whatnot. So, it turns out you can do, you know, a lot of things with functions that you can do with variables. So, for instance, I can take this function, assign it to another variable, right? So, I can say var f equals 2, and I can call it through that, you know, and that works this way, right? Again, nothing major, no big deal. What else can you do? So, for instance, I can have a function like this, right? And do that. So, let me get rid of that. So, here what I'm doing is... And you can see that, oh, you're still here. So, what's happening here? So, I've defined a function called cb, which takes one parameter. Here is basically another function. It's browser-based, right? And what's plus-plus? It's browser-based. I just wanted to know if it's browser-based. Oh, yeah, yeah. The problem is this thing goes away, if I make it... Okay. Right, so, here what's happening is, you know, we are basically passing a function to another function, right? So, cb is taking one parameter and passing a function to that. Turns out you can call that function just like, you know, any other function, right? So, within cb, what I've done here, in cb, I'm passing this as a parameter, and again, this is just one step extra, right? We created a variable, assigned a function to that variable and called it through that. We're just passing it as a parameter to another function. Now, there are, you know, more interesting things. You know, as you keep exploring this, it gets weirder and weirder. For instance, what you'll do is variables. You can return variables from functions, right? So, you can do that with functions. I mean, you can do that with functions, too. So, for instance, you know, let's create some sort of increment or something like that, right? Let's say, make INC and say return function of something. Here I say return equals INC. Now, let's say INC 5 is make INC of 5. Now, what will INC 5 have here, right? Any guesses? Right. So, INC 5 is simply points to a function which takes one parameter and whatever parameter you pass to it, it'll add 5 to it and return that, right? So, for example, if I say print INC 5 of 10, what's it going to print? Difference 15, right? So, what's going on here? So, in this case, when I call make INC, make INC is actually returning another function from within that function. Just like how you can do it, you can return values from functions. Functions can be returned from functions this way, right? And the interesting thing here is one thing that if you are really thinking about it. So, INC is a variable that is basically a parameter to making and then from within that function and returning that, right? Now, at this point, when this particular line is going to execute, making is already done. About making function, it's executed and that's it, right? Now, what about this variable, INC? It should have, it's gone, right? Once that function leaves scope, all the variables that are declared within that, the parameters, everything's gone. But, when I call it here, when I say INC 5 of 10, what am I doing inside that function? I'm saying, what do parameters request INC, right? What does that work? Closures, right? So, probably I can just touch through this. Yeah, so that's the concept of closure, where whenever you declare a function, all the symbols, all the variables that are in scope at the point of definition of that function become part of that function's closure, right? Which means that those symbols, those variables are accessible to that function inside that function. So, for example, you can imagine that when INC 5 is instantiated, there is this hidden object associated with INC 5, which has all the variables that were in scope when that function was defined. So, whatever this function defined, this function is defined from within main INC, right? So, at that point, whatever is accessible to that function, let's say, you know, in order this function, is accessible to that function even after that, right? Because you can imagine, like, you know, how you might declare member variables in a static programming language like C sharp or C plus plus. So, whatever member feels that you declare inside a class, is basically the state for that class, right? And you create an object of it, and when you pass that object around, that state goes around with that object. I mean, pretty much the object is defined by state. It kind of is similar to that. So, whenever this function is created, and whenever I'm calling it and so on, you can imagine that there is this hidden member, which is called as a closure, where all these, you know, symbols that were visible when that function was defined are part of it.  For example, I can create another increment or make INC of 10, right? This would, if I say, I know, 20, then this would 10, 30, right? So, here the point to remember is this is a completely separate object from INC 5, right? Those are two individual objects, and this gets its own closure, INC 5 gets its own closure, right? In INC 5's closure, the value of the variable INC is 5. In this case, it's 10, right? And that's retained across calls. So, this is very, you know, really the concept of a closure. So, what are some of the use cases for closure, right? Obviously, this is one. Like, one other place where I found it very useful to use closure is, in INC 5, there is this feature called as getters and setters. How many of you are familiar with getters and setters in ES5? About five, six people. So, very, okay. How many of you are familiar with the concept of getters and setters? That's everybody, right? So, it turns out that with ECMAScript 5, you can define getters and setters, you know, basically properties, you know, how you do in Java, right? You define getters and setters methods. In C sharp, you create properties. And, you know, each language has its own way of implementing it. Turns out in ES5, you can do the same thing, which is, I think, a pretty awesome feature. So, for example, if you create an object like this, right? I don't know. Let's say, let's call this person or something. And here, now what I can do is, I can define some properties. For example, I can say name. I can do is, I can create two functions here, right? I can say get and I can say set. So, let's say in get what I do, I just print some diagnostic messages. So, I say print name.get, right? And here, I'd say print name.set plus v. Now, what I can do is, I can say person.name equals something and probably in get, I'll have to return something. Because that's what get do. It gets something. So, I'll say, right? It doesn't matter. I'll just import some values for now. And here, I'll say print person.name. Right? I'll just clear the console. It would slightly differently. Anybody see what's wrong with this? That's embarrassing. Not get. Sorry? Print person.name equals print person. No, no, no. Person.name. This is the name is the property and get and set are the two set of functions. Let's try something else. Let's say value is that, this thing is basically the property descriptor. So, object.define is an ES5 method where basically you pass the prototype as the first parameter. So, that means that person's prototype is whatever is the first parameter of object.define. The second parameter is basically a set of property descriptors. So, which basically is just a last object where each property name, I mean, in that object, the name, you know, basically this particular field name is basically the name of the property, right? So, when you say name here, your person object is going to have a property called name and the value here is the value of that property. And there are a few other descriptors like configurable, one more is there. Any configurable value and what is the code that we descriptor? So, that's a different property, right? That's a different property. It should be object.create. So, that's the issue. Early morning brain freeze. So, there we go. Now we are back in action. It's just a different API. So, this is object.create, what I was trying to show you. There is another method called define property and define properties, which you can use to change the properties on an existing object. Here what I'm doing is I'm trying to create an object, right? So, basically I'm saying that person is an object whose prototype is that empty object. It need not be empty, it could be another object. And then I'm basically defining a property called name and I define the method, I mean, the getter and the center. So, when I assign a value to this, you can see that name.set gets input and the value is obviously true.  So, obviously this is not the correct implementation here, right? So, I don't want to put a hard coded value, right? That's not the point. So, the value should actually get stored somewhere. So, I find that, you know, one way that you can do it is you can implement this with a closure. So, one thing that I do is I would define the immediate function like this, from which I would return my descriptor. Yeah, but for people. So, immediate function is basically an anonymous function that gets invoked immediately. There's also, you know, sometimes people use the term self-executing function, which I think is technically incorrect. It's not a self-executing function, you know. A self-executing function is a term that you probably use to refer to a recursive function, sorry, a function that calls itself. So, this is not, that's not what's happening here, right? We are not defining a function which is calling itself. We are defining a function which is getting caught at the point of definition. This is like taking a difference. So, this is an immediate function where I'm defining the function and invoking it immediately, right? So, the function, this particular expression that you see here is the function definition and then the open, back, and close bracket to call that function, right? So, it gets defined and gets called immediately. And what does that function do? It returns a regular object, right? So, whatever I returned earlier, they're the same thing. It returns that. Basically, it returns the property descriptor. So, now what I can do is I can go ahead and define my packing store for this property right here. So, I can say, I don't know, name val or something where, you know, I'll put a default value here. So, from here I can return name val and here I can assign to name val. So, now what happens is, so, let's say I put this here. There should be a Singaporean here. So, that's what the object of create, right? So, it is. Yeah. All right. So, you have, so you can see that name.get gets called. get gets called and the value is basically default. So the first name that you're seeing is from the getter and the value is default that's coming from the table name there and then I'm getting set to foo and then the next. So basically now it works like a real property but the backing store is basically, you know you might be wondering why I'm doing it in such a roundabout way but I mean I could have created another, you know as you would do in C++, you would create another member and then you would use that as the backing store for a property. Now you can't, it's probably not a good idea to do that here because there is no concept of, I mean if you're doing C++ or C sharp, you would probably use a private member, right? To hide the fact that this field is protected, I want to do some validation maybe on assigning a value. You can't do that with JavaScript, right? If you make a member, the member is accessible. So you know this is one place where you could use a closure to provide a backing store for a getter set up on your object. You could use closures as private state which is just a, I'm probably gonna demo that but it's basically the same idea, right? So here, whatever is part of the closure for a particular function is accessible only within that function, right? So you can see how you can use this concept to implement the equivalent of a private member in an object, right? So you can, you know, so you know you're probably used to creating classes like this, right?  You define your types like this, right? So what if you wanted to create a private feed?  So for example, have something like and this dot print here, so that's a private, I mean that's a public method inside person. So when I say log p equals new person, you know I assume that I pass the constructor parameters and so on, now through p, right? There's no way I can access pvd, right? p dot pvd is not going to work now. Why? Because it's not a member of that particular object. It's simply part of the closure of the constructor function, right? So it's basically completely different. So this is another, you know, potential application for closures where you can simulate private members in objects. So with that, let me quickly go to the... One question, please. Yes. I'm not saying object dot create. So create is something that is governed by your... No, no. This or this. I mean, the console really gets print clear and just manages all of it. So object dot create and it must be five p. All right. So the question is, I think that is, why don't I just specify what attributes I require and all that closure and everything is taken care of while I'm working? No. It's not by framework. Object dot create is part of like ES5, ES5 is the standard name for JavaScript. Object dot create is part of JavaScript. It's a language. Basically, the idea is, you know, JavaScript is a prototyping language, right? The fact that you can do that, whatever the function person, what equals you person, was done to make Java people happy, right? JavaScript itself is not designed that way.  That's different from type inheritance that you do in static languages like C++ and Cshar, where you're inheriting from types. Here, you don't inherit from types. You inherit from other objects. This is what object dot create does. So that's something that, you know, the standards what you wanted to introduce with ES5 kind of move away from, you know, trying to do what static languages do and do what JavaScript is really good at doing. So even when you say what equals new person, it's actually doing prototype inheritance under the covers. Maybe in the advanced JS session, I'll talk about that. So yeah, so that's one other application for closures. I mean, obviously that's just a couple of things that I've covered. Closure is a very powerful thing that you can apply in many other scenarios. In fact, you know, the next thing that we'll talk about partial functions, partial function application. So that's again, a functional programming technique or a feature for which I will need internet. All right, so let me just talk about that first. So imagine that you have a function like this, right? They add A, B, C, right? A very trivial function where all it does is it says A plus B plus, nothing major. Right now I can say a print add one, two, three and it prints that. Now, you can create a function, right? Which is basically derived from another function. So what if I wanted to create a variant of add where the first parameter of add is permanently bound to a particular answer value? So for example, I want to create a version of add where I can do something like this, add, let's say add five, right? I want to be able to say add five. In this case, essentially what's gonna happen is five plus two plus three is gonna happen, right? The first parameter of add is permanently bound to the constant five. So this idea, this concept is called as partial function application. It is- Can we put a variable out there? Unless you add, can we put a variable? No, so I've not spoken about the implementation of that yet, I'm just trying to describe the concept. So we'll see how you can implement partial function application. The idea is, you know, if you have an existing function which takes n number of parameters, it is possible to define a variant or derive another function from that where one or more parameters of that function are, you know, bound to one particular answer value. It's again sometimes referred to as currying which is incorrect. This is not currying, this is partial function application. Currying is a concept in functional programming which refers to a different concept. Where the idea is, if you have a function that takes n number of parameters, you transform that into a sequence of function. So you can say, you know, it was something, currying is a different concept. So, like for example, you can do something like, let's say a curried add version is there, then I can do this. So here the idea is, C A after one would return another function where it will, you know, basically take any function which takes n number of parameters and transform it into an expression where all the functions take one parameter. And I'm not gonna talk about currying, it's slightly confusing and frankly, I'm not sure how useful that is. I found partial function application to be something that, you know, is something that you might really make use of in your programs. Currying is higher order function. Yes, exactly. So how can you implement partial function application, right? Actually, I had made a blog post about it and if I had it, I will just take on the code as I'm gonna have to sit and write the code here. Till eight, is it? Hope this works. I'll be having some luck. All right, so what I'm gonna do is I'm gonna just take this definition here and paste it into my console here. Before I tell you what that function does, let me show you how you can use it. So I can say bar add five equals partial find of add, right? And essentially the idea is you can call it like that, right? Now I can say print add five and two comma three, oops. That's a nice thing about JavaScript, no? If there's no, you can define anywhere, everything will work. All right, so what is happening here? Essentially, to partial find the first parameter is the function add, which takes three parameters. And I have said find the first parameter to the number five. And now I say add five and pass two in three. So basically it returns five plus three plus two, eight plus two, 10. Now what is happening here, right? So what does partial find in this case do? It's nothing, not rocket science. So there's a lot of validation and things, forget about all that. The key aspect is right here, right? So as we saw a little earlier, this is basically a function that is returning another function, right sir? Functions are first plus citizens of the language. You can do pretty much anything, you can do very good functions. And what does this function do? It basically takes all the parameters that were passed to that function. So basically here we can see there are two things, right? The first thing is this function called partial find, which takes a variable number of arguments. The first two arguments have to be the reference to the function and ignore context for now. It's not very important. The first parameter is the function which are doing the partial find two. And then what I basically do is I take the rest of the arguments. So basically I take the arguments that were passed to partial find. I assume that arguments from position three and up are the parameters that have been permanently bound to a constant find. So I basically transform my arguments array into a JavaScript array, arguments pseudo array into a JavaScript array, and I get the values from position two or whatever parameters are passed. And in the actual function which gets called, what I do is I just take the values that were passed to that function and build another arguments array and call the original function. I know I'm probably not making a lot of sense. See, here you get that. Like here basically I'm building a parent's array by taking my arguments. So this little line of code that you see here that is there because of the weirdness in JavaScript, the arguments is like a magic variable that's there in all functions, right? So if you have a function taking n number of parameters, the arguments is the keyword that you can use to access all of them in a non-deterministic fashion. If you want to create a function which has, oh okay, which has a variable number of parameters you can use arguments to access them. So basically I'm converting that into an array because arguments is not a JavaScript array. It is basically an object that looks like an array. You can access its members, do an indexer, it has a length property, but otherwise it's not an array. Here what I do is I basically take from that array, whichever the values are, which are constant, right? Which needs to be permanently bound to a particular constant value. And this arguments is the arguments for this function, right, when it's actually called. So this is the arguments which are really good. So I basically integrate through these arguments and build my actual parameters, right? So what does it have, this arguments array? It has the first parameters that were permanently bound and then I push the other arguments that are being passed to this function and then I finally call the original function, which is the f that was passed there and pass these arguments here. So it's just the, you know, I know that sounds very complicated, but it just does the work, it just implements the functionality. So this allows you to, you know, sorry, that there are two returns because the first one, we are returning the function, right? So this is what happens. Okay, yeah, yeah. So here we have add five and the second returns inside add. And you can keep going actually. So for example, I can say add five, 10, right? Equals, partial, find. So this is like we can compose on top of add five and I can say 10. I guess things have to be passed. Why is null required on 10? The null is basically the context for that particular function call. What do I mean by context? So in a function, you can access your this member, right? So you can say this dot something. So in case you want to call a function and bind the context, which is that this member to a particular object, then you can pass the second parameter for that. But isn't that a problem because once you bind, let's say you're going to do it multiple times, the first bound context will always be the bound context. You can't override it. That's true, yeah. Probably that's a design problem. So it's not a very useful thing to do here. Yeah, I think they can just get it on context. I mean, his point was once you bind the function to a particular object as the context and that kind of binds it permanently to that, right? So probably not very useful. That point of binding context is not enough. So does the company provide you a bound context? They can provide you the context as the context. Yes, I mean, but the idea is, you know, if, as he says, we don't bind the context there, you can use just ES5 bind to bind to whatever you want. But if it does give you a bound function, then you cannot add later bind it to the tree, or give it a great binding. But I mean, by using context, I mean, if the advantage bind to tree, bind it here. Huh, but see, for example, here, right, I'm not binding this to anything, right? I've given null, but what can I do? So let's say I have some object here, right? I can do something like, you know, var at equals add 510.bind of obj, right? Now, the context in F is, Gobi. Oh, okay. Thank you. I have, Till 10, what about? Yeah, so it's like 10 more minutes, okay? Okay. If there are any, okay? So let's just show this one more thing. So here you can, you know, I can bind further, right? So I can say 20 or whatever. Now it prints 35. So here, basically, the first two parameters of my original add have been bound to 5 and 10. So to 5 plus 10 is 15. So basically, here I've composed the top of two, right? So we can keep going like that. Obviously, you have zero parameters, you can't go beyond that. So this is actually another use case for using collosures, right? Here, a lot of stuff is being passed around through collosures. There are a couple of other techniques that I want to talk about. Memoization and throttling and devouncing and all. But I don't think I'll have time for that. Do you have questions? Practical links for the partial bind. Partial bind. Exactly. It's exactly this, right? So whenever you want to create, you want to kind of build an abstraction on top of an existing function, right? Any kind of scenario? Building higher-order functions, as you were saying. Code reuse can be a really good example. Code reuse can be a good example. Yeah. Like maybe the constant, you know, it's not very useful to put 5 there, right? Maybe you have some runtime logic that determines that value. But you want a variant of a function where that particular parameter is permanently bound to that value. Maybe you dynamically compute that value. You could use it there. Maybe you can continue the memorization we have about it. Yes. Or probably what I know is a talk about throttling and devouncing is more exciting. But we have only 5 minutes. So, you know, this is basically another technique that is, again, enabled by the functional nature of the language. So let's say you have some event source, right? Most of the time, what are we doing with client-side programming in JavaScript? We are like handling events, responding to events, right? Dev development is about event-based development. You're responding to events all the time. What if, let's say you have a scenario where the event source is kind of generating the events at a greater frequency than is desired. There are events like that, right? For example, mouse move, Windows crawl, right? And you want to do things in response to that. In fact, I have to read about this in a blog post where Twitter ran into an issue. So you know how it works in Twitter web applications, right? They implement something called infinite scroll. So you can keep scrolling the page. As you hit the, as you near the end of the page, it loads the next page of tweets from all the pages that you've ordered, right? And then it's going. So you can keep on scrolling infinity. How do they implement that? They implement it by handling the scroll event of your, of your window object. In the initial implementations, it turned out that this kind of, you know, really dragged the performance of the site, of reader.com, right? And when they investigated what they found was the font scroll was just getting fired like crazy, right? And in each of that event, they were doing some logic, probably it was never the logic as well, where they were trying to fetch the next layer of things in response to that, then can scale very well. So if you have a situation like that, maybe I'll just show you the demo here instead of showing you the code, which I don't think I'll have time for. So here's an example of that, right? So I have basically implemented a scroll on this, on this page. Now, let me just show you what happens if I don't throttle it. So I'll just take out this called throttle here. So now when I scroll, you can see that it's like, generated the events like crazy, right? Every time I, you can see by the way that the process is going up. Now what I'll do is I'll slightly change this code to call a function that I've defined here called throttle. Just refresh that. So now when I, you know, I'm just like scrolling the page. Now it's a little bit more disciplined, it's like more controlled, right? Essentially what's happening here is, the event source has been throttled to kind of mask through that event only once every two 50 milliseconds. So no matter how frequently the event is getting raised, your handler will get called only once every two 50 milliseconds. And the code for that here is, you know, I can, it's really straight forward. Like from the original handler, I just wrapped it inside throttle and passed the, you know, the duration for that. So it's throttled. Yes. So in this here, I have a throttle. It's again, not rocket science. You can probably figure it out. This again is there when logged. Take a look at it. The other thing, a similar sort of technique is called debouncing. The idea here is, this is debunked, okay. So, same way, what I'll do is I'll just take, if I can't do that here. So let's say, you know, this is another example scenario where let's say you have an online collaboration application, right? You know, how many of you have used Google Wave? So you know how it works, right? Like, the really fancy new feature was that if you're typing something, other people who are collaborating with you at that point in time can see what you're typing. But as you type, other people can see it. So if you wanted to implement that, how would you do it? So here again is an example of an event source if you're a really fast type, typist, where that event can generate it, can get generated faster rate than you would like. Right? In that case, you probably want to do something similar to throttling, but throttling will not work there. So there is something, you know, debouncing is a technique where you might use that. So for example here, right? I'm going, okay, let's see. So basically what I've done here is whatever I type in this text box, it's going to print that here. It's going to say sending whatever I type, right? And the idea here is to provide as real-time an experience as possible for these people who are collaborating. Just imagine that when you see sending, that message is getting sent, all the other participants who are on that application. So the idea here is, one thing that I've done is every time I press a key, I could handle the key press event and send it to the other attendees, right? That will not scale very well because if I type fast, too many events get generated. My server is going to just start crying on the, so what can you do? So here I could do something like this, right? I am going to type very, very fast. And now you can see that as soon as I stopped typing, the something happened there, right? That's the point when it got sent, right? So the idea here is to look at this code here, it's very similar to the throttling code, except what I've done is I've got a different function called dvance and this is my handler. And I'm doing this append here, right? Whenever my handler gets called, I take the data up into my evl list, but imagine that I send it across the network to other things. What dvance will do is here you can see that there's a duration, a 250 millisecond, right? So as I'm typing, so if I type really, really slowly, I am typing slowly. So here when I type slowly, you can see that the characters are actually being sent character by character. But if I type like really, really fast, right then you can see that really, really fast. So do you see the difference in the behavior here? Basically, if the time difference between two consecutive events is less than 250 milliseconds, then all the events get, you know, kind of apicoist, right? And only one invocation happens for your actual function. If it is greater than 250 milliseconds, then obviously your fall happens, which is why if I type really slowly, then, so if I type really slowly, then it happens because the interval between those two events is greater than 250 milliseconds. The interval is, you know, less than that, then. I don't think I have time to show you the code. Again, it's not too complicated. One moment. Yes. So I'll use that one more minute to tell you where you can get that code. So those are a lot of URLs, which if you write really really fast, you can go down. Or what you can do is just click on that. Click on at least slash maybe RNG. That's my blog address. Can you share the slides to answer them? Yes, let's share the slides. So you'll have these links as you get to the post.


The question is that amendment 9107.1, in the name of Neil Bibby, which seeks to amend motion 9107, in the name of Angus Robertson, on Scottish Connections framework, be agreed, and members should cast their votes now. The vote is closed. Point of order, Shirley-Anne Somerville. Can we have Ms Somerville's microphone, please? I'm not sure whether it went through or not, Presiding Officer, but I would have voted no. Thank you, Ms Somerville. It can confirm that your vote was recorded. Point of order, Audrey Nicholl. I seem to lose my connection and I would have voted no. I was having difficulty connecting with the app and I would have voted no. The result of the vote on amendment 9107.1, in the name of Neil Bibby, is yes 49, no 64. There were no abstentions, the amendment is therefore not agreed. The final question is that motion 9107, in the name of Angus Robertson, as amended, on Scottish Connections framework, be agreed. Are we all agreed? The motion is therefore agreed, and that concludes decision time, and we will now move on to Members' Business, in the name of Jackson Carlaw. Be grateful if Members leaving could do so quietly, thank you.