<div><div>I have a throwing style data marshaling layer that uses throwing and return type inference to make the code clean and validation automatic with the optional ability to return default values if error or missing value, etc. This is for validating data coming from external sources into our app. Having generic return type and throwing subscripts would help make this code better for clients IMHO.<br class="gmail_msg"><br class="gmail_msg">class Data {<br class="gmail_msg">    let number: Int<br class="gmail_msg">    let name: String<br class="gmail_msg">}<br class="gmail_msg"><br class="gmail_msg">....<br class="gmail_msg">data.number = try helper.value(forKey: &quot;baz&quot;)</div><div><a href="http://data.name">data.name</a> = try helper.value(forKey: &quot;foo&quot;, otherwise: &quot;bar&quot;)<br class="gmail_msg">....</div><div><br></div><div>.... or ideally something like ....</div><div><br></div><div>....</div><div><div>data.number = try helper[&quot;baz&quot;]</div><div><a href="http://data.name">data.name</a> = try helper[&quot;foo&quot;, otherwise: &quot;bar&quot;]</div></div><div>....</div><div><br class="gmail_msg">-Shawn</div><div><br></div><div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">On Sat, Jan 14, 2017 at 9:45 AM Anton Zhilin via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_msg"><div class="m_-9077028494894866681m_5589546956062923664markdown-here-wrapper gmail_msg"><p style="margin:0px 0px 1.2em!important" class="gmail_msg">I’m not sure, but I think that in this case the specific type of these values is determined at runtime.<br class="gmail_msg">Then a safe approach would be separate <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">string: String?</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">bool: Bool?</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">int: Int?</code> computed properties, as it’s done in JSON parsers.</p><br><br><pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class="gmail_msg"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important" class="gmail_msg">if let bookCount = row.value(named: &quot;bookCount&quot;).int {<br><br>    ...<br><br>}<br><br>if let bookCount = row[&quot;bookCount&quot;].int {<br><br>    ...<br><br>}<br><br>let bookCount = <a href="http://row.int" class="gmail_msg" target="_blank">row.int</a>(&quot;bookCount&quot;)!   // crash if database is corrupt<br><br></code></pre><p style="margin:0px 0px 1.2em!important" class="gmail_msg">Additionally, this is an overall bad example of generics. Fields of database tables can only map to a limited set of static types in Swift, which are supported by database adapter.</p></div></div><div class="gmail_msg"><div class="m_-9077028494894866681m_5589546956062923664markdown-here-wrapper gmail_msg"><br><br><p style="margin:0px 0px 1.2em!important" class="gmail_msg">2017-01-14 16:50 GMT+03:00 Gwendal Roué via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt;:</p><br><br><p style="margin:0px 0px 1.2em!important" class="gmail_msg"></p><div class="m_-9077028494894866681m_5589546956062923664markdown-here-exclude gmail_msg"><p class="gmail_msg"></p><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">This is a consequence of your vision of subscript. If interesting, it is also limiting for no real purpose.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">As the developer of a Swift database library, I&#39;d like to offer a better API than the following:<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,132,0)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span style="color:rgb(186,45,162)" class="gmail_msg">   </span><span style="color:rgb(186,45,162)" class="gmail_msg"> </span>// Current state of affairs</span></div></div><div class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:#ba2da2" class="gmail_msg">    let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> name: </span><span style="font-variant-ligatures:no-common-ligatures;color:#703daa" class="gmail_msg">String</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = row.</span><span style="font-variant-ligatures:no-common-ligatures;color:#31595d" class="gmail_msg">value</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(named: </span><span style="font-variant-ligatures:no-common-ligatures;color:#d12f1b" class="gmail_msg">&quot;name&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)" class="gmail_msg">    let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> bookCount: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="gmail_msg">Int</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = row.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(49,89,93)" class="gmail_msg">value</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(named: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(209,47,27)" class="gmail_msg">&quot;bookCount&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div></div><div class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><div class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)" class="gmail_msg">    let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> hasBooks: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="gmail_msg">Bool</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = row.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(49,89,93)" class="gmail_msg">value</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(named: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(209,47,27)" class="gmail_msg">&quot;bookCount&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><br class="gmail_msg"></span></div></span></div></span></div><div class="gmail_msg">Instead, I wish I could offer GRDB.swift would let its users write:</div></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,132,0)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span style="color:rgb(186,45,162)" class="gmail_msg">   </span><span style="color:rgb(186,45,162)" class="gmail_msg"> </span>// With improved subscripts</span></div></div><div class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><div class="gmail_msg"><div style="margin:0px;line-height:normal" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)" class="gmail_msg">    let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> name: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="gmail_msg">String</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = row</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">[</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(209,47,27)" class="gmail_msg">&quot;name&quot;</span>]</div><div style="margin:0px;line-height:normal" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)" class="gmail_msg">    let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> bookCount: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="gmail_msg">Int</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = row</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(209,47,27)" class="gmail_msg"><span style="color:rgb(0,0,0)" class="gmail_msg">[</span>&quot;bookCount&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">]</span></div></div><div class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><div class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><div style="margin:0px;line-height:normal" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)" class="gmail_msg">    let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> hasBooks: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="gmail_msg">Bool</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = row</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(209,47,27)" class="gmail_msg"><span style="color:rgb(0,0,0)" class="gmail_msg">[</span>&quot;bookCount&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">]</span></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div style="font-family:Helvetica;font-size:12px" class="gmail_msg">And this requires genericity on return type.</div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg">Gwendal</div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg"><div class="gmail_msg"></div></div></div></span></div></span></div></div></div></div></div><br class="gmail_msg">_______________________________________________<br class="gmail_msg"><br><br>swift-evolution mailing list<br class="gmail_msg"><br><br><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><br><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"><br><br><br class="gmail_msg"></blockquote><p class="gmail_msg"></p></div><p style="margin:0px 0px 1.2em!important" class="gmail_msg"></p><br><br><div title="MDH:SSdtIG5vdCBzdXJlLCBidXQgSSB0aGluayB0aGF0IGluIHRoaXMgY2FzZSB0aGUgc3BlY2lmaWMg&lt;br&gt;&lt;br&gt;dHlwZSBvZiB0aGVzZSB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBhdCBydW50aW1lLjxkaXY+VGhlbiBh&lt;br&gt;&lt;br&gt;IHNhZmUgYXBwcm9hY2ggd291bGQgYmUgc2VwYXJhdGUgYHN0cmluZzogU3RyaW5nP2AsIGBib29s&lt;br&gt;&lt;br&gt;OiBCb29sP2AsIGBpbnQ6IEludD9gIGNvbXB1dGVkIHByb3BlcnRpZXMsIGFzIGl0J3MgZG9uZSBp&lt;br&gt;&lt;br&gt;biBKU09OIHBhcnNlcnMuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2Pmlm&lt;br&gt;&lt;br&gt;IGxldCBib29rQ291bnQgPSByb3cudmFsdWUobmFtZWQ6ICJib29rQ291bnQiKS5pbnQgezwvZGl2&lt;br&gt;&lt;br&gt;PjxkaXY+Jm5ic3A7ICZuYnNwOyAuLi48L2Rpdj48ZGl2Pn08L2Rpdj48ZGl2PmlmIGxldCBib29r&lt;br&gt;&lt;br&gt;Q291bnQgPSByb3dbImJvb2tDb3VudCJdLmludCB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IC4u&lt;br&gt;&lt;br&gt;LjwvZGl2PjxkaXY+fTwvZGl2PjxkaXY+bGV0IGJvb2tDb3VudCA9IHJvdy5pbnQoImJvb2tDb3Vu&lt;br&gt;&lt;br&gt;dCIpISAmbmJzcDsgLy8gY3Jhc2ggaWYgZGF0YWJhc2UgaXMgY29ycnVwdDwvZGl2PjxkaXY+YGBg&lt;br&gt;&lt;br&gt;PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BZGRpdGlvbmFsbHksIHRoaXMgaXMgYW4gb3ZlcmFs&lt;br&gt;&lt;br&gt;bCBiYWQgZXhhbXBsZSBvZiBnZW5lcmljcy4gRmllbGRzIG9mIGRhdGFiYXNlIHRhYmxlcyBjYW4g&lt;br&gt;&lt;br&gt;b25seSBtYXAgdG8gYSBsaW1pdGVkIHNldCBvZiBzdGF0aWMgdHlwZXMgaW4gU3dpZnQsIHdoaWNo&lt;br&gt;&lt;br&gt;IGFyZSBzdXBwb3J0ZWQgYnkgZGF0YWJhc2UgYWRhcHRlci48YnI+PGRpdiBjbGFzcz0iZ21haWxf&lt;br&gt;&lt;br&gt;ZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+MjAxNy0wMS0xNCAxNjo1MCBHTVQr&lt;br&gt;&lt;br&gt;MDM6MDAgR3dlbmRhbCBSb3XDqSB2aWEgc3dpZnQtZXZvbHV0aW9uIDxzcGFuIGRpcj0ibHRyIj4m&lt;br&gt;&lt;br&gt;bHQ7PGEgaHJlZj0ibWFpbHRvOnN3aWZ0LWV2b2x1dGlvbkBzd2lmdC5vcmciIHRhcmdldD0iX2Js&lt;br&gt;&lt;br&gt;YW5rIj5zd2lmdC1ldm9sdXRpb25Ac3dpZnQub3JnPC9hPiZndDs8L3NwYW4+OjxibG9ja3F1b3Rl&lt;br&gt;&lt;br&gt;IGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0&lt;br&gt;&lt;br&gt;OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgc3R5bGU9IndvcmQtd3JhcDpi&lt;br&gt;&lt;br&gt;cmVhay13b3JkIj5UaGlzIGlzIGEgY29uc2VxdWVuY2Ugb2YgeW91ciB2aXNpb24gb2Ygc3Vic2Ny&lt;br&gt;&lt;br&gt;aXB0LiBJZiBpbnRlcmVzdGluZywgaXQgaXMgYWxzbyBsaW1pdGluZyBmb3Igbm8gcmVhbCBwdXJw&lt;br&gt;&lt;br&gt;b3NlLjxkaXY+PGJyPjwvZGl2PjxkaXY+QXMgdGhlIGRldmVsb3BlciBvZiBhIFN3aWZ0IGRhdGFi&lt;br&gt;&lt;br&gt;YXNlIGxpYnJhcnksIEknZCBsaWtlIHRvIG9mZmVyIGEgYmV0dGVyIEFQSSB0aGFuIHRoZSBmb2xs&lt;br&gt;&lt;br&gt;b3dpbmc6PGRpdj48YnI+PC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJtYXJnaW46MHB4O2ZvbnQtc2l6&lt;br&gt;&lt;br&gt;ZToxMXB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LWZhbWlseTpNZW5sbztjb2xvcjpyZ2IoMCwx&lt;br&gt;&lt;br&gt;MzIsMCkiPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdh&lt;br&gt;&lt;br&gt;dHVyZXMiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTg2LDQ1LDE2MikiPiZuYnNwOyAmbmJzcDs8&lt;br&gt;&lt;br&gt;L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxODYsNDUsMTYyKSI+Jm5ic3A7PC9zcGFuPi8v&lt;br&gt;&lt;br&gt;IEN1cnJlbnQgc3RhdGUgb2YgYWZmYWlyczwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2PjxkaXYgc3R5&lt;br&gt;&lt;br&gt;bGU9Im1hcmdpbjowcHg7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6bm9ybWFsO2ZvbnQtZmFt&lt;br&gt;&lt;br&gt;aWx5Ok1lbmxvIj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24t&lt;br&gt;&lt;br&gt;bGlnYXR1cmVzO2NvbG9yOiNiYTJkYTIiPiZuYnNwOyAmbmJzcDsgbGV0PC9zcGFuPjxzcGFuIHN0&lt;br&gt;&lt;br&gt;eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXMiPiBuYW1lOiA8&lt;br&gt;&lt;br&gt;L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29tbW9uLWxpZ2F0&lt;br&gt;&lt;br&gt;dXJlcztjb2xvcjojNzAzZGFhIj5TdHJpbmc8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFu&lt;br&gt;&lt;br&gt;dC1saWdhdHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcyI+ID0gcm93Ljwvc3Bhbj48c3BhbiBzdHls&lt;br&gt;&lt;br&gt;ZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOiMzMTU5&lt;br&gt;&lt;br&gt;NWQiPnZhbHVlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNv&lt;br&gt;&lt;br&gt;bW1vbi1saWdhdHVyZXMiPihuYW1lZDogPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQt&lt;br&gt;&lt;br&gt;bGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXM7Y29sb3I6I2QxMmYxYiI+Im5hbWUiPC9zcGFu&lt;br&gt;&lt;br&gt;PjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXMi&lt;br&gt;&lt;br&gt;Pik8L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjBweDtmb250LXNpemU6MTFweDtsaW5l&lt;br&gt;&lt;br&gt;LWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6TWVubG8iPjxzcGFuIHN0eWxlPSJmb250LXZhcmlh&lt;br&gt;&lt;br&gt;bnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXM7Y29sb3I6cmdiKDE4Niw0NSwxNjIpIj4m&lt;br&gt;&lt;br&gt;bmJzcDsgJm5ic3A7IGxldDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJl&lt;br&gt;&lt;br&gt;czpuby1jb21tb24tbGlnYXR1cmVzIj4mbmJzcDtib29rQ291bnQ6Jm5ic3A7PC9zcGFuPjxzcGFu&lt;br&gt;&lt;br&gt;IHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXM7Y29sb3I6&lt;br&gt;&lt;br&gt;cmdiKDExMiw2MSwxNzApIj5JbnQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdh&lt;br&gt;&lt;br&gt;dHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcyI+Jm5ic3A7PSByb3cuPC9zcGFuPjxzcGFuIHN0eWxl&lt;br&gt;&lt;br&gt;PSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXM7Y29sb3I6cmdiKDQ5&lt;br&gt;&lt;br&gt;LDg5LDkzKSI+dmFsdWU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVyZXM6&lt;br&gt;&lt;br&gt;bm8tY29tbW9uLWxpZ2F0dXJlcyI+KG5hbWVkOiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9u&lt;br&gt;&lt;br&gt;dC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOnJnYigyMDksNDcs&lt;br&gt;&lt;br&gt;MjcpIj4iYm9va0NvdW50Ijwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJl&lt;br&gt;&lt;br&gt;czpuby1jb21tb24tbGlnYXR1cmVzIj4pPC9zcGFuPjwvZGl2PjwvZGl2PjxkaXY+PHNwYW4gc3R5&lt;br&gt;&lt;br&gt;bGU9ImZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcyI+PGRpdj48c3Bh&lt;br&gt;&lt;br&gt;biBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzIj48ZGl2&lt;br&gt;&lt;br&gt;IHN0eWxlPSJtYXJnaW46MHB4O2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250&lt;br&gt;&lt;br&gt;LWZhbWlseTpNZW5sbyI+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29t&lt;br&gt;&lt;br&gt;bW9uLWxpZ2F0dXJlcztjb2xvcjpyZ2IoMTg2LDQ1LDE2MikiPiZuYnNwOyAmbmJzcDsgbGV0PC9z&lt;br&gt;&lt;br&gt;cGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVy&lt;br&gt;&lt;br&gt;ZXMiPiZuYnNwO2hhc0Jvb2tzOiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50&lt;br&gt;&lt;br&gt;LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOnJnYigxMTIsNjEsMTcwKSI+Qm9v&lt;br&gt;&lt;br&gt;bDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGln&lt;br&gt;&lt;br&gt;YXR1cmVzIj4mbmJzcDs9IHJvdy48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdh&lt;br&gt;&lt;br&gt;dHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcztjb2xvcjpyZ2IoNDksODksOTMpIj52YWx1ZTwvc3Bh&lt;br&gt;&lt;br&gt;bj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVz&lt;br&gt;&lt;br&gt;Ij4obmFtZWQ6Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVz&lt;br&gt;&lt;br&gt;Om5vLWNvbW1vbi1saWdhdHVyZXM7Y29sb3I6cmdiKDIwOSw0NywyNykiPiJib29rQ291bnQiPC9z&lt;br&gt;&lt;br&gt;cGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVy&lt;br&gt;&lt;br&gt;ZXMiPik8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJl&lt;br&gt;&lt;br&gt;czpuby1jb21tb24tbGlnYXR1cmVzIj48YnI+PC9zcGFuPjwvZGl2Pjwvc3Bhbj48L2Rpdj48L3Nw&lt;br&gt;&lt;br&gt;YW4+PC9kaXY+PGRpdj5JbnN0ZWFkLCBJIHdpc2ggSSBjb3VsZCBvZmZlciBHUkRCLnN3aWZ0IHdv&lt;br&gt;&lt;br&gt;dWxkIGxldCBpdHMgdXNlcnMgd3JpdGU6PC9kaXY+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48&lt;br&gt;&lt;br&gt;ZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjowcHg7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6bm9y&lt;br&gt;&lt;br&gt;bWFsO2ZvbnQtZmFtaWx5Ok1lbmxvO2NvbG9yOnJnYigwLDEzMiwwKSI+PHNwYW4gc3R5bGU9ImZv&lt;br&gt;&lt;br&gt;bnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcyI+PHNwYW4gc3R5bGU9ImNv&lt;br&gt;&lt;br&gt;bG9yOnJnYigxODYsNDUsMTYyKSI+Jm5ic3A7ICZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29s&lt;br&gt;&lt;br&gt;b3I6cmdiKDE4Niw0NSwxNjIpIj4mbmJzcDs8L3NwYW4+Ly8gV2l0aCBpbXByb3ZlZCBzdWJzY3Jp&lt;br&gt;&lt;br&gt;cHRzPC9zcGFuPjwvZGl2PjwvZGl2PjxkaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjBweDtmb250LXNp&lt;br&gt;&lt;br&gt;emU6MTFweDtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6TWVubG8iPjxkaXY+PGRpdiBz&lt;br&gt;&lt;br&gt;dHlsZT0ibWFyZ2luOjBweDtsaW5lLWhlaWdodDpub3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXZh&lt;br&gt;&lt;br&gt;cmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXM7Y29sb3I6cmdiKDE4Niw0NSwxNjIp&lt;br&gt;&lt;br&gt;Ij4mbmJzcDsgJm5ic3A7IGxldDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0&lt;br&gt;&lt;br&gt;dXJlczpuby1jb21tb24tbGlnYXR1cmVzIj4mbmJzcDtuYW1lOiZuYnNwOzwvc3Bhbj48c3BhbiBz&lt;br&gt;&lt;br&gt;dHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOnJn&lt;br&gt;&lt;br&gt;YigxMTIsNjEsMTcwKSI+U3RyaW5nPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGln&lt;br&gt;&lt;br&gt;YXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXMiPiZuYnNwOz0gcm93PC9zcGFuPjxzcGFuIHN0eWxl&lt;br&gt;&lt;br&gt;PSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVyZXMiPls8L3NwYW4+PHNw&lt;br&gt;&lt;br&gt;YW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcztjb2xv&lt;br&gt;&lt;br&gt;cjpyZ2IoMjA5LDQ3LDI3KSI+Im5hbWUiPC9zcGFuPl08L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46&lt;br&gt;&lt;br&gt;MHB4O2xpbmUtaGVpZ2h0Om5vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVy&lt;br&gt;&lt;br&gt;ZXM6bm8tY29tbW9uLWxpZ2F0dXJlcztjb2xvcjpyZ2IoMTg2LDQ1LDE2MikiPiZuYnNwOyAmbmJz&lt;br&gt;&lt;br&gt;cDsgbGV0PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1v&lt;br&gt;&lt;br&gt;bi1saWdhdHVyZXMiPiZuYnNwO2Jvb2tDb3VudDombmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZv&lt;br&gt;&lt;br&gt;bnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29tbW9uLWxpZ2F0dXJlcztjb2xvcjpyZ2IoMTEyLDYx&lt;br&gt;&lt;br&gt;LDE3MCkiPkludDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1j&lt;br&gt;&lt;br&gt;b21tb24tbGlnYXR1cmVzIj4mbmJzcDs9IHJvdzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJp&lt;br&gt;&lt;br&gt;YW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOnJnYigyMDksNDcsMjcpIj48&lt;br&gt;&lt;br&gt;c3BhbiBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKSI+Wzwvc3Bhbj4iYm9va0NvdW50Ijwvc3Bhbj48&lt;br&gt;&lt;br&gt;c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzIj5d&lt;br&gt;&lt;br&gt;PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVy&lt;br&gt;&lt;br&gt;ZXM6bm8tY29tbW9uLWxpZ2F0dXJlcyI+PGRpdj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxp&lt;br&gt;&lt;br&gt;Z2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzIj48ZGl2IHN0eWxlPSJtYXJnaW46MHB4O2xpbmUt&lt;br&gt;&lt;br&gt;aGVpZ2h0Om5vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm8tY29t&lt;br&gt;&lt;br&gt;bW9uLWxpZ2F0dXJlcztjb2xvcjpyZ2IoMTg2LDQ1LDE2MikiPiZuYnNwOyAmbmJzcDsgbGV0PC9z&lt;br&gt;&lt;br&gt;cGFuPjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vLWNvbW1vbi1saWdhdHVy&lt;br&gt;&lt;br&gt;ZXMiPiZuYnNwO2hhc0Jvb2tzOiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50&lt;br&gt;&lt;br&gt;LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOnJnYigxMTIsNjEsMTcwKSI+Qm9v&lt;br&gt;&lt;br&gt;bDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGln&lt;br&gt;&lt;br&gt;YXR1cmVzIj4mbmJzcDs9IHJvdzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC12YXJpYW50LWxpZ2F0&lt;br&gt;&lt;br&gt;dXJlczpuby1jb21tb24tbGlnYXR1cmVzO2NvbG9yOnJnYigyMDksNDcsMjcpIj48c3BhbiBzdHls&lt;br&gt;&lt;br&gt;ZT0iY29sb3I6cmdiKDAsMCwwKSI+Wzwvc3Bhbj4iYm9va0NvdW50Ijwvc3Bhbj48c3BhbiBzdHls&lt;br&gt;&lt;br&gt;ZT0iZm9udC12YXJpYW50LWxpZ2F0dXJlczpuby1jb21tb24tbGlnYXR1cmVzIj5dPC9zcGFuPjwv&lt;br&gt;&lt;br&gt;ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNh&lt;br&gt;&lt;br&gt;O2ZvbnQtc2l6ZToxMnB4Ij5BbmQgdGhpcyByZXF1aXJlcyBnZW5lcmljaXR5IG9uIHJldHVybiB0&lt;br&gt;&lt;br&gt;eXBlLjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYTtmb250LXNpemU6MTJw&lt;br&gt;&lt;br&gt;eCI+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYTtmb250LXNpemU6&lt;br&gt;&lt;br&gt;MTJweCI+R3dlbmRhbDwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYTtmb250&lt;br&gt;&lt;br&gt;LXNpemU6MTJweCI+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYTtm&lt;br&gt;&lt;br&gt;b250LXNpemU6MTJweCI+PGRpdj48L2Rpdj48L2Rpdj48L2Rpdj48L3NwYW4+PC9kaXY+PC9zcGFu&lt;br&gt;&lt;br&gt;PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pjxicj5fX19fX19fX19fX19fX19fX19fX19f&lt;br&gt;&lt;br&gt;X19fX19fX188d2JyPl9fX19fX19fX19fX19fX19fPGJyPgpzd2lmdC1ldm9sdXRpb24gbWFpbGlu&lt;br&gt;&lt;br&gt;ZyBsaXN0PGJyPgo8YSBocmVmPSJtYWlsdG86c3dpZnQtZXZvbHV0aW9uQHN3aWZ0Lm9yZyI+c3dp&lt;br&gt;&lt;br&gt;ZnQtZXZvbHV0aW9uQHN3aWZ0Lm9yZzwvYT48YnI+CjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuc3dp&lt;br&gt;&lt;br&gt;ZnQub3JnL21haWxtYW4vbGlzdGluZm8vc3dpZnQtZXZvbHV0aW9uIiBkYXRhLXNhZmVyZWRpcmVj&lt;br&gt;&lt;br&gt;dHVybD0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS91cmw/aGw9cnUmYW1wO3E9aHR0cHM6Ly9saXN0&lt;br&gt;&lt;br&gt;cy5zd2lmdC5vcmcvbWFpbG1hbi9saXN0aW5mby9zd2lmdC1ldm9sdXRpb24mYW1wO3NvdXJjZT1n&lt;br&gt;&lt;br&gt;bWFpbCZhbXA7dXN0PTE0ODQ1MDA2MzE5NjcwMDAmYW1wO3VzZz1BRlFqQ05FRmpFOXY5RWQtSmY1&lt;br&gt;&lt;br&gt;X0lxbGx1UERQcXA4QlVnIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczov&lt;br&gt;&lt;br&gt;L2xpc3RzLnN3aWZ0Lm9yZy88d2JyPm1haWxtYW4vbGlzdGluZm8vc3dpZnQtPHdicj5ldm9sdXRp&lt;br&gt;&lt;br&gt;b248L2E+PGJyPgo8YnI+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0" class="gmail_msg">​</div></div></div><br><br>_______________________________________________<br class="gmail_msg"><br><br>swift-evolution mailing list<br class="gmail_msg"><br><br><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><br><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"><br><br></blockquote></div></div></div>