<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div>It is true that the setter could cause some confusion in the first place but I think of these particular setters as optional chaining:</div><div><br></div><div>person.residence?.address = "1 Infinite Loop"</div><div><br></div><div>Where the `address` is not set when `residence` is nil. So it's like the array is nil/not defined if you access it out of bounds.</div><div><br></div><div><br></div><div>In addition subscripts imply O(1) access/set so the expanding array setter should be implemented as method.</div><div><br></div><div>- Maximilian</div><div><br>Am 17.01.2016 um 02:29 schrieb <a href="mailto:davesweeris@mac.com">davesweeris@mac.com</a>:<br><br></div><blockquote type="cite"><div><meta http-equiv="Content-Type" content="text/html charset=utf-8">I’m definitely +1 on the getter. I have reservations on the setter. As described, this code:<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">subscript</span>(safe index: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Index</span>) -&gt; <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Element</span>? {</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">return</span> <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>.indices ~= index ? <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>[index] : <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">nil</span></div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">}</div></div></div></blockquote><div class=""><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">subscript</span>(clamp index:&nbsp;<span style="color: rgb(112, 61, 170);" class="">Index</span>) -&gt;&nbsp;<span style="color: rgb(112, 61, 170);" class="">Element</span>? {</div></div></div><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><font face="Menlo" class=""><span style="font-size: 11px;" class="">&nbsp; &nbsp;&nbsp;</span></font><span style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);" class="">get</span><font face="Menlo" class=""><span style="font-size: 11px;" class="">&nbsp;{&nbsp;</span></font><span style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);" class="">return</span><font face="Menlo" class=""><span style="font-size: 11px;" class="">&nbsp;</span></font><span style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);" class="">self</span><font face="Menlo" class=""><span style="font-size: 11px;" class="">.indices ~= index ?&nbsp;</span></font><span style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);" class="">self</span><font face="Menlo" class=""><span style="font-size: 11px;" class="">[index] :&nbsp;</span></font><span style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);" class="">nil</span><font face="Menlo" class=""><span style="font-size: 11px;" class="">&nbsp;}&nbsp;</span></font><font color="#008400" face="Menlo" style="font-family: Menlo; font-size: 12px;" class=""><span style="font-size: 11px;" class="">// again, because subscripts can</span></font><font color="#008400" face="Menlo" class=""><span style="font-size: 11px;" class="">’t be setter-only</span></font></div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">set</span>&nbsp;{</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">if</span>&nbsp;<span style="color: rgb(187, 44, 162);" class="">self</span>.indices ~= index {</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">self</span>[index] = newValue!</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}&nbsp;<span style="color: rgb(187, 44, 162);" class="">else</span>&nbsp;{</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">self</span>.append(newValue!)</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp;&nbsp;}</div></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class="">}</div><div class=""><br class=""></div></div></div></blockquote></div><div class="">Would lead to some counter-intuitive results.</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">var</span> foo = [<span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>, <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">1</span>, <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">2</span>]</div></div><div class=""><div style="margin: 0px; line-height: normal;" class=""><span style="font-family: Menlo; font-size: 11px; color: rgb(61, 29, 129);" class="">print(<span style="color: rgb(79, 129, 135);" class="">foo</span><span style="color: rgb(49, 89, 93);" class="">[</span>safe: </span><font color="#272ad8" style="font-family: Menlo; font-size: 11px;" class="">2</font><span style="font-family: Menlo; font-size: 11px; color: rgb(49, 89, 93);" class="">]</span><font color="#3d1d81" style="font-family: Menlo; font-size: 11px;" class="">)&nbsp;</font><font color="#008400" face="Menlo" class=""><span style="font-size: 11px;" class="">// Optional(2)…&nbsp;Yep</span></font></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">foo</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">[</span>clamp: <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">6</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">]</span> = <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">6</span></div></div><div class=""><div style="margin: 0px; line-height: normal;" class=""><font color="#3d1d81" face="Menlo" class=""><span style="font-size: 11px;" class="">print(</span></font><span style="color: rgb(79, 129, 135); font-family: Menlo; font-size: 11px;" class="">foo</span><span style="color: rgb(49, 89, 93); font-family: Menlo; font-size: 11px;" class="">[</span><font color="#3d1d81" face="Menlo" class=""><span style="font-size: 11px;" class="">safe: </span></font><span style="color: rgb(39, 42, 216); font-family: Menlo; font-size: 11px;" class="">6</span><span style="color: rgb(49, 89, 93); font-family: Menlo; font-size: 11px;" class="">]</span><font color="#3d1d81" face="Menlo" class=""><span style="font-size: 11px;" class="">)</span></font><font color="#3d1d81" style="color: rgb(61, 29, 129); font-family: Menlo; font-size: 11px;" class="">&nbsp;</font><font color="#008400" face="Menlo" class=""><span style="font-size: 11px;" class="">// nil…&nbsp;</span></font><span style="color: rgb(0, 132, 0); font-family: Menlo; font-size: 11px;" class="">Wait, what? I just set that to 6! Why is it nil now?</span></div></div></blockquote><div class=""><div class=""><br class=""></div><div class=""><br class=""></div></div><div class=""><div class="">Instead of just appending the new value, we could extend the array to the required capacity:</div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">subscript</span>(safe index: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Index</span>) -&gt; <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Element</span>? {</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">get</span> { <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">return</span> <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>.indices ~= index ? <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>[index] : <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">nil</span> }</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">set</span> {</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">if</span> <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>.indices ~= index {</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>[index] = newValue!</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; } <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">else</span> {</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">while</span> !(<span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>.indices ~= index) {</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">self</span>.append(newValue!)</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; }</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; }</div></div></div><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">}</div></div></div></blockquote><div class=""><div class=""><br class=""></div><div class="">The results could still be unexpected:</div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">var</span> foo = [<span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>, <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">1</span>, <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">2</span>]</div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(61, 29, 129);" class="">print<span style="color: rgb(0, 0, 0);" class="">(</span><span style="color: rgb(79, 129, 135);" class="">foo</span><span style="color: rgb(0, 0, 0);" class="">)&nbsp;<span class="Apple-tab-span" style="white-space:pre">                </span></span><span style="color: rgb(0, 132, 0);" class="">// [0, 1, 2]…&nbsp;Yep</span></div></div><div class=""><div class=""></div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="color: rgb(61, 29, 129);" class=""><span style="color: rgb(79, 129, 135);" class="">foo</span><span style="color: rgb(49, 89, 93);" class="">[</span>safe: </span><font color="#272ad8" class="">9</font><span style="color: rgb(49, 89, 93);" class="">]</span><font color="#3d1d81" class=""> = </font><font color="#272ad8" class="">9</font></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><span style="font-family: Menlo; font-size: 11px; color: rgb(61, 29, 129);" class="">print</span><span style="font-family: Menlo; font-size: 11px;" class="">(</span><span style="font-family: Menlo; font-size: 11px; color: rgb(79, 129, 135);" class="">foo</span><span style="font-family: Menlo; font-size: 11px; color: rgb(49, 89, 93);" class="">[</span><span style="font-family: Menlo; font-size: 11px;" class="">safe: <font color="#272ad8" class="">9</font></span><span style="font-family: Menlo; font-size: 11px; color: rgb(49, 89, 93);" class="">]</span><span style="font-family: Menlo; font-size: 11px;" class="">)</span><font color="#3d1d81" style="font-family: Menlo; font-size: 11px;" class="">&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span></font><font color="#008400" face="Menlo" style="font-family: Menlo; font-size: 11px;" class="">// Optional(9)…&nbsp;Yep</font></div></div></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><font color="#3d1d81" face="Menlo" class=""><span style="font-size: 11px;" class="">print</span></font><span style="font-family: Menlo; font-size: 11px;" class="">(</span><span style="color: rgb(79, 129, 135); font-family: Menlo; font-size: 11px;" class="">foo</span><span style="font-family: Menlo; font-size: 11px;" class="">)</span><font color="#3d1d81" face="Menlo" class=""><span style="font-size: 11px;" class="">&nbsp;<span class="Apple-tab-span" style="white-space: pre;">                </span></span></font><span style="color: rgb(0, 132, 0); font-family: Menlo; font-size: 11px;" class="">// [0, 1, 2, 9, 9, 9, 9, 9, 9]…&nbsp;Wow, that</span><font color="#008400" face="Menlo" class=""><span style="font-size: 11px;" class="">’s bigger than I thought</span></font></div></div></div></div></blockquote><div class=""><div class=""><div class=""></div></div></div><div class=""><div class=""><br class=""></div><div class="">but at least you’d be able to read from the index to which you just wrote.</div><br class=""><div class="">
- Dave Sweeris

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Jan 16, 2016, at 14:08, Maximilian Hünenberger via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="content-type" content="text/html; charset=utf-8" class=""><div dir="auto" class=""><div class=""></div><div class="">I've also thought of this. But the concept of safe indexing can also be extended to CollectionType (or to the more abstract Indexable protocol) where it's index is Comparable.</div><div class=""><br class=""></div><div class="">For mutable Collections/MutableIndexable there could be two versions of a safe subscript set:</div><div class=""><br class=""></div><div class="">array[safe: 5] = 7 // does nothing if index out of bounds</div><div class=""><br class=""></div><div class="">array[clamp: 5] = 7</div><div class="">// if array is empty: does nothing</div><div class="">// if 5 &gt;= array.endIndex : sets last element</div><div class="">// if index &lt; 0 : sets first index</div><div class=""><br class=""></div><div class="">So definitely worth considering.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">- Maximilian</div><div class=""><br class="">Am 16.01.2016 um 21:44 schrieb Rudolf Adamkovič via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt;:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class="">Hi there!<div class=""><br class=""></div><div class="">From time to time, I find myself using safe subscripting, e.g.:</div><div class=""><br class=""></div><div class=""><pre style="box-sizing: border-box; overflow: auto; margin-top: 0px; margin-bottom: 0px; line-height: 1.45; padding: 16px; background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: normal; word-break: normal; color: rgb(51, 51, 51);" class=""><font face="Menlo" class=""><span style="font-size: 11px;" class=""><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> array <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> [<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">1</span>, <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">2</span>, <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">3</span>]

array[safe: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">0</span>] <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// 1</span>
array[safe: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">1</span>] <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// 2</span>
array[safe: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">2</span>] <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// 3</span>
array[safe: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">3</span>] <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// nil</span></span></font></pre><div class=""><br class=""></div><div class="">… with the following implementation:</div></div><div class=""><br class=""></div><div class=""><pre style="box-sizing: border-box; overflow: auto; margin-top: 0px; margin-bottom: 0px; line-height: 1.45; padding: 16px; background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: normal; word-break: normal; color: rgb(51, 51, 51);" class=""><font face="Menlo" class=""><span style="font-size: 11px;" class=""><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">subscript</span> (safe index: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Int</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">-&gt;</span> Element? {
    <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">return</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">self</span><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">.</span><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">indices</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">~=</span> index <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">?</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">self</span>[index] <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">nil</span>
}</span></font></pre><div class=""><br class=""></div></div><div class="">I was wondering … wouldn’t it be handy to have this in the standard library?</div><div class=""><br class=""></div><div class="">Best regards,</div><div class="">Rudolf Adamkovic</div><div class=""><br class=""></div></div></blockquote><blockquote type="cite" class=""><div class=""><span class="">_______________________________________________</span><br class=""><span class="">swift-evolution mailing list</span><br class=""><span class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a></span><br class=""><span class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br class=""></div></blockquote></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div></div></blockquote></body></html>