<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Roboto Mono";
        panose-1:0 0 0 9 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1390348286;
        mso-list-template-ids:-1968115092;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7 ;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style>
</head>
<body lang="en-CZ" link="#0563C1" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">From JDK perspective I see no problem to drop operator(opcode).<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">More of an expectation than a surprise is frequent use of constantInstruction, so refactored a lot of cases.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">One surprise is heavy use of xyzInstruction methods in our own tests (originated from the times before “conveniences” appear). However, these are worth of update anyway.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">From:
</span></b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">Brian Goetz <brian.goetz@oracle.com><br>
<b>Date: </b>Friday, 5 January 2024 at 16:52<br>
<b>To: </b>Adam Sotona <adam.sotona@oracle.com>, classfile-api-dev@openjdk.org <classfile-api-dev@openjdk.org><br>
<b>Subject: </b>Re: Revisit j.l.classfile.CodeBuilder API surface<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:13.5pt;font-family:"Courier New"">Let me fill in some history here. 
<br>
<br>
Much of the design process for this library could be described as an iterated game of "find the primitive."  The first version of the API had a zillion ad-hoc methods, with little structural relation.  At some point we hit upon a model-driven analysis, and
 broke down instructions into families (loads, stores, etc), and at that point, we thought methods like loadInstruction were the primitives.  But we hadn't actually hit bottom yet; after many rounds of refactoring, it became clear that there was one primitive
 for the builder hierarchy, now called `with`, and all of the builder methods now bottom out at that. 
<br>
<br>
At the same time, we added a number of "convenience" methods such as aload_0() and aload(int n) (which now just delegate to with() or loadInstruction()), and over time, we found that most generative use cases used these methods much more than the primitives
 (which is fine.)  <br>
<br>
At this point, I think many of the xxxInstruction (and its rigid naming convention) are vestiges of a previous attempt to organize the API.  Some still have uses, though should be renamed to reflect that they are mere conveniences (such as arrayLoadInstruction
 to arrayLoad).  <br>
<br>
(Does anyone use operator(opcode), or can we drop that one too?)<br>
<br>
So I support this simplification.  <br>
<br>
Having done the refactor, were there any surprises in the usages of various CodeBuilder methods?<br>
<br>
</span><o:p></o:p></p>
<div>
<p class="MsoNormal">On 1/5/2024 10:38 AM, Adam Sotona wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span lang="EN-US">Hi,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">j.l.classfile.CodeBuilder API consist of
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">more than
</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">230 methods.</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Existing ClassFile API use cases proved the concept
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">of
</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">one big CodeBuilder is comfortable. However there are some redundancies, glitches in the naming, some frequently used methods are hard to find and some methods
 have low practical use.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Majority</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> of the methods may be
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">divided</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> into three main
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">levels</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">:</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D"><br>
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">1.</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> methods building low level bytecode instructions
 according to JVMS chapter 6.5 (aaload, aastore, aconst_null...)</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D"><br>
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">2.</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> methods reconstructing individual subtypes
 of j.l.classfile.Instruction from given arguments (loadInstruction, storeInstruction, incrementInstruction, branchInstruction...)</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D"><br>
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">3.</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> methods modeling high level code blocks (block,
 ifThen, ifThenElse, trying...)</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Many methods from level 2 (with suffix `Instruction`) seem to be obsolete or misplaced. Some of them are duplicates of methods from
 level 1, some are obsolete and some are very useful, however a bit hidden. </span>
<span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D">The API should be cleaned a bit while in preview.</span><o:p></o:p></p>
<p style="margin-bottom:0cm"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">I would like to open a discussion on the following proposed
</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D">changes in </span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D">the
</span><span style="font-size:10.0pt;font-family:"Roboto Mono";color:#172B4D">CodeBuilder</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D"> methods</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D">:</span><o:p></o:p></p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">incrementInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as duplicate of </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">iinc</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">lookupSwitchInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as duplicate of </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">lookupswitch</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">tableSwitchInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as duplicate of </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">tableswitch</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">throwInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as duplicate of </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">athrow</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">invokeDynamicInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as duplicate of </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">invokedynamic</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">stackInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as obsolete with suggested replacements:  </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">with(StackInstruction.of(...))</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">monitorInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as obsolete with suggested replacements: </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">monitorenter</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif">, </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">monitorexit</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif">,
 or </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">with(MonitorInstruction.of(...))</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">nopInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as duplicate of </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">nop</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">typecheckInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> remove as obsolete with suggested replacements: </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">checkcast</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif">, </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">instanceOf</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif">,
 or </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">with(TypeCheckInstruction.of(...))</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">loadInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">loadLocal</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">storeInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">storeLocal</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">branchInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">branch</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">invokeInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">invoke</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">newObjectInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">newObject</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">newPrimitiveArrayInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">newPrimitiveArray</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">newReferenceArrayInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">newReferenceArray</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">newMultidimensionalArrayInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">newMultidimensionalArray</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">arrayLoadInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">arrayLoad</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">arrayStoreInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">arrayStore</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">convertInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">conversion</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">operatorInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">operator</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">constantInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">loadConstant</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">fieldInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">fieldAccess</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">instanceof_</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">instanceOf</span><o:p></o:p></li><li class="MsoNormal" style="color:#172B4D;mso-list:l0 level1 lfo1"><span style="font-size:10.0pt;font-family:"Roboto Mono"">returnInstruction</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif"> rename to </span><span style="font-size:10.0pt;font-family:"Roboto Mono"">return_</span><o:p></o:p></li></ul>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Here is the related RFE:
</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black;background:white"><a href="https://bugs.openjdk.org/browse/JDK-8323058">https://bugs.openjdk.org/browse/JDK-8323058</a></span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black;background:white">Draft of the CSR (no spec yet):
<a href="https://bugs.openjdk.org/browse/JDK-8323067">https://bugs.openjdk.org/browse/JDK-8323067</a></span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">And draft of the Pull Request:
<a href="https://github.com/openjdk/jdk/pull/17282">https://github.com/openjdk/jdk/pull/17282</a></span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black;background:white"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Any comments are welcome.</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Thank you,</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Adam</span><o:p></o:p></p>
</div>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</body>
</html>