Topic: Default swap/hash_value
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Tue, 12 Jan 2016 23:49:09 +0100
Raw View
This is a multi-part message in MIME format.
--------------000506050109010309010905
Content-Type: multipart/alternative;
boundary="------------080901000508040006070102"
--------------080901000508040006070102
Content-Type: text/plain; charset=UTF-8; format=flowed
Hi,
I've been working on a proposal (see attached document)
Default|swap|/|hash_value|
Defining|swap|and|hash_value|P0029R0
<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0029r0.html>as
well as comparison operators, as proposed inN4475
<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf>, for
simple classes is tedious, repetitive, slightly error-prone, and easily
automated.
I propose to (implicitly) supply default versions of these two
operations, if needed. The meaning|swap|is to swap each member, and the
meaning of|hash_value|is to combine the members using|hash_combine|.
If the simple defaults are unsuitable for a class, a programmer can, as
ever, define more suitable ones or suppress the defaults. The proposal
is to add the operations as an integral part of C++ (like =), rather
than as a library feature.
The proposal follows the same approach as Default comparison as inN4475
<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf>,
that is, having default generated code for these basic operations only
when needed and possible would makes the language simpler.
Any comments are welcome,
Vicente
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.
--------------080901000508040006070102
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta http-equiv=3D"content-type" content=3D"text/html; charset=3Dutf-8=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
<font size=3D"+1">Hi, <br>
<br>
I've been working on a proposal (see attached document)<br>
</font><br>
<h1 id=3D"toc_0" style=3D"-webkit-print-color-adjust: exact; margin:
20px 0px 10px; padding: 0px; font-weight: bold;
-webkit-font-smoothing: antialiased; cursor: text; position:
relative; font-size: 28px; color: rgb(0, 0, 0); font-family:
Helvetica, arial, sans-serif; font-style: normal; font-variant:
normal; letter-spacing: normal; orphans: auto; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(255, 255, 255);">Default<span
class=3D"Apple-converted-space">=C2=A0</span><code
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;
font-size: inherit;">swap</code>/<code
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;
font-size: inherit;">hash_value</code></h1>
<p style=3D"-webkit-print-color-adjust: exact; margin: 15px 0px;
color: rgb(0, 0, 0); font-family: Helvetica, arial, sans-serif;
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
255);">Defining<span class=3D"Apple-converted-space">=C2=A0</span><co=
de
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius:
3px;">swap</code><span class=3D"Apple-converted-space">=C2=A0</span=
>and<span
class=3D"Apple-converted-space">=C2=A0</span><code
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius:
3px;">hash_value</code><span class=3D"Apple-converted-space">=C2=A0=
</span><a
href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0029r0.htm=
l"
title=3D"A Unified Proposal for Composable Hashing"
style=3D"-webkit-print-color-adjust: exact; color: rgb(65, 131,
196);">P0029R0</a><span class=3D"Apple-converted-space">=C2=A0</spa=
n>as
well as comparison operators, as proposed in<span
class=3D"Apple-converted-space">=C2=A0</span><a
href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n44=
77.pdf"
title=3D"Default comparisons (R2)"
style=3D"-webkit-print-color-adjust: exact; color: rgb(65, 131,
196);">N4475</a>, for simple classes is tedious, repetitive,
slightly error-prone, and easily automated.<span
class=3D"Apple-converted-space"> <br>
</span></p>
<p style=3D"-webkit-print-color-adjust: exact; margin: 15px 0px;
color: rgb(0, 0, 0); font-family: Helvetica, arial, sans-serif;
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
255);">I propose to (implicitly) supply default versions of these
two operations, if needed. The meaning<span
class=3D"Apple-converted-space">=C2=A0</span><code
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius:
3px;">swap</code><span class=3D"Apple-converted-space">=C2=A0</span=
>is
to swap each member, and the meaning of<span
class=3D"Apple-converted-space">=C2=A0</span><code
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius:
3px;">hash_value</code><span class=3D"Apple-converted-space">=C2=A0=
</span>is
to combine the members using<span class=3D"Apple-converted-space">=C2=
=A0</span><code
style=3D"-webkit-print-color-adjust: exact; margin: 0px 2px;
padding: 0px 5px; white-space: nowrap; border: 1px solid
rgb(234, 234, 234); background-color: rgb(248, 248, 248);
border-top-left-radius: 3px; border-top-right-radius: 3px;
border-bottom-right-radius: 3px; border-bottom-left-radius:
3px;">hash_combine</code>.<span class=3D"Apple-converted-space">=C2=
=A0</span></p>
<p style=3D"-webkit-print-color-adjust: exact; margin: 15px 0px;
color: rgb(0, 0, 0); font-family: Helvetica, arial, sans-serif;
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
255);">If the simple defaults are unsuitable for a class, a
programmer can, as ever, define more suitable ones or suppress the
defaults. The proposal is to add the operations as an integral
part of C++ (like =3D), rather than as a library feature.<span
class=3D"Apple-converted-space">=C2=A0</span></p>
<p style=3D"-webkit-print-color-adjust: exact; margin: 15px 0px;
color: rgb(0, 0, 0); font-family: Helvetica, arial, sans-serif;
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
255);">The proposal follows the same approach as Default
comparison as in<span class=3D"Apple-converted-space">=C2=A0</span><a
href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n44=
77.pdf"
title=3D"Default comparisons (R2)"
style=3D"-webkit-print-color-adjust: exact; color: rgb(65, 131,
196);">N4475</a>, that is, having default generated code for
these basic operations only when needed and possible would makes
the language simpler.<span class=3D"Apple-converted-space"> <br>
</span></p>
<p style=3D"-webkit-print-color-adjust: exact; margin: 15px 0px;
color: rgb(0, 0, 0); font-family: Helvetica, arial, sans-serif;
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
255);"><span class=3D"Apple-converted-space"><br>
Any comments are welcome,<br>
Vicente<br>
</span></p>
</body>
</html>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------080901000508040006070102--
--------------000506050109010309010905
Content-Type: application/pdf;
name="swap_hash.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="swap_hash.pdf"
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
iD9V6Xvm15/jbHWxb53mVRx0qfKHbv8Vk988lcRCJP34gQ1Khe/4iGUxRfdZ50f/BzmbySkK
ZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjczMTkKZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUg
L1BhZ2UgL1BhcmVudCAzIDAgUiAvUmVzb3VyY2VzIDYgMCBSIC9Db250ZW50cyA0IDAgUiAv
TWVkaWFCb3ggWzAgMCA1OTUgODQyXQovQW5ub3RzIDEwIDAgUiA+PgplbmRvYmoKNiAwIG9i
ago8PCAvUHJvY1NldCBbIC9QREYgL1RleHQgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDcgMCBS
ID4+IC9Gb250IDw8IC9UVDQgMTYgMCBSCi9UVDMgMTUgMCBSIC9UVDIgOSAwIFIgL1RUMSA4
IDAgUiA+PiA+PgplbmRvYmoKMTAgMCBvYmoKWyAxMSAwIFIgMTIgMCBSIDEzIDAgUiAxNCAw
IFIgXQplbmRvYmoKMTcgMCBvYmoKPDwgL0xlbmd0aCAxOCAwIFIgL04gMyAvQWx0ZXJuYXRl
IC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBnZZ3VFPZFofP
vTe90BIiICX0GnoJINI7SBUEUYlJgFAChoQmdkQFRhQRKVZkVMABR4ciY0UUC4OCYtcJ8hBQ
xsFRREXl3YxrCe+tNfPemv3HWd/Z57fX2Wfvfde6AFD8ggTCdFgBgDShWBTu68FcEhPLxPcC
GBABDlgBwOFmZgRH+EQC1Py9PZmZqEjGs/buLoBku9ssv1Amc9b/f5EiN0MkBgAKRdU2PH4m
F+UClFOzxRky/wTK9JUpMoYxMhahCaKsIuPEr2z2p+Yru8mYlybkoRpZzhm8NJ6Mu1DemiXh
o4wEoVyYJeBno3wHZb1USZoA5fco09P4nEwAMBSZX8znJqFsiTJFFBnuifICAAiUxDm8cg6L
+TlongB4pmfkigSJSWKmEdeYaeXoyGb68bNT+WIxK5TDTeGIeEzP9LQMjjAXgK9vlkUBJVlt
mWiR7a0c7e1Z1uZo+b/Z3x5+U/09yHr7VfEm7M+eQYyeWd9s7KwvvRYA9iRamx2zvpVVALRt
BkDl4axP7yAA8gUAtN6c8x6GbF6SxOIMJwuL7OxscwGfay4r6Df7n4Jvyr+GOfeZy+77Vjum
Fz+BI0kVM2VF5aanpktEzMwMDpfPZP33EP/jwDlpzcnDLJyfwBfxhehVUeiUCYSJaLuFPIFY
kC5kCoR/1eF/GDYnBxl+nWsUaHVfAH2FOVC4SQfIbz0AQyMDJG4/egJ961sQMQrIvrxorZGv
c48yev7n+h8LXIpu4UxBIlPm9gyPZHIloiwZo9+EbMECEpAHdKAKNIEuMAIsYA0cgDNwA94g
AISASBADlgMuSAJpQASyQT7YAApBMdgBdoNqcADUgXrQBE6CNnAGXARXwA1wCwyAR0AKhsFL
MAHegWkIgvAQFaJBqpAWpA+ZQtYQG1oIeUNBUDgUA8VDiZAQkkD50CaoGCqDqqFDUD30I3Qa
ughdg/qgB9AgNAb9AX2EEZgC02EN2AC2gNmwOxwIR8LL4ER4FZwHF8Db4Uq4Fj4Ot8IX4Rvw
ACyFX8KTCEDICAPRRlgIG/FEQpBYJAERIWuRIqQCqUWakA6kG7mNSJFx5AMGh6FhmBgWxhnj
h1mM4WJWYdZiSjDVmGOYVkwX5jZmEDOB+YKlYtWxplgnrD92CTYRm40txFZgj2BbsJexA9hh
7DscDsfAGeIccH64GFwybjWuBLcP14y7gOvDDeEm8Xi8Kt4U74IPwXPwYnwhvgp/HH8e348f
xr8nkAlaBGuCDyGWICRsJFQQGgjnCP2EEcI0UYGoT3QihhB5xFxiKbGO2EG8SRwmTpMUSYYk
F1IkKZm0gVRJaiJdJj0mvSGTyTpkR3IYWUBeT64knyBfJQ+SP1CUKCYUT0ocRULZTjlKuUB5
QHlDpVINqG7UWKqYup1aT71EfUp9L0eTM5fzl+PJrZOrkWuV65d7JU+U15d3l18unydfIX9K
/qb8uAJRwUDBU4GjsFahRuG0wj2FSUWaopViiGKaYolig+I1xVElvJKBkrcST6lA6bDSJaUh
GkLTpXnSuLRNtDraZdowHUc3pPvTk+nF9B/ovfQJZSVlW+Uo5RzlGuWzylIGwjBg+DNSGaWM
k4y7jI/zNOa5z+PP2zavaV7/vCmV+SpuKnyVIpVmlQGVj6pMVW/VFNWdqm2qT9QwaiZqYWrZ
avvVLquNz6fPd57PnV80/+T8h+qwuol6uPpq9cPqPeqTGpoavhoZGlUalzTGNRmabprJmuWa
5zTHtGhaC7UEWuVa57VeMJWZ7sxUZiWzizmhra7tpy3RPqTdqz2tY6izWGejTrPOE12SLls3
Qbdct1N3Qk9LL1gvX69R76E+UZ+tn6S/R79bf8rA0CDaYItBm8GooYqhv2GeYaPhYyOqkavR
KqNaozvGOGO2cYrxPuNbJrCJnUmSSY3JTVPY1N5UYLrPtM8Ma+ZoJjSrNbvHorDcWVmsRtag
OcM8yHyjeZv5Kws9i1iLnRbdFl8s7SxTLessH1kpWQVYbbTqsPrD2sSaa11jfceGauNjs86m
3ea1rakt33a/7X07ml2w3Ra7TrvP9g72Ivsm+zEHPYd4h70O99h0dii7hH3VEevo4bjO8Yzj
Byd7J7HTSaffnVnOKc4NzqMLDBfwF9QtGHLRceG4HHKRLmQujF94cKHUVduV41rr+sxN143n
dsRtxN3YPdn9uPsrD0sPkUeLx5Snk+cazwteiJevV5FXr7eS92Lvau+nPjo+iT6NPhO+dr6r
fS/4Yf0C/Xb63fPX8Of61/tPBDgErAnoCqQERgRWBz4LMgkSBXUEw8EBwbuCHy/SXyRc1BYC
QvxDdoU8CTUMXRX6cxguLDSsJux5uFV4fnh3BC1iRURDxLtIj8jSyEeLjRZLFndGyUfFRdVH
TUV7RZdFS5dYLFmz5EaMWowgpj0WHxsVeyR2cqn30t1Lh+Ps4grj7i4zXJaz7NpyteWpy8+u
kF/BWXEqHhsfHd8Q/4kTwqnlTK70X7l35QTXk7uH+5LnxivnjfFd+GX8kQSXhLKE0USXxF2J
Y0muSRVJ4wJPQbXgdbJf8oHkqZSQlKMpM6nRqc1phLT4tNNCJWGKsCtdMz0nvS/DNKMwQ7rK
adXuVROiQNGRTChzWWa7mI7+TPVIjCSbJYNZC7Nqst5nR2WfylHMEeb05JrkbssdyfPJ+341
ZjV3dWe+dv6G/ME17msOrYXWrlzbuU53XcG64fW+649tIG1I2fDLRsuNZRvfbore1FGgUbC+
YGiz7+bGQrlCUeG9Lc5bDmzFbBVs7d1ms61q25ciXtH1YsviiuJPJdyS699ZfVf53cz2hO29
pfal+3fgdgh33N3puvNYmWJZXtnQruBdreXM8qLyt7tX7L5WYVtxYA9pj2SPtDKosr1Kr2pH
1afqpOqBGo+a5r3qe7ftndrH29e/321/0wGNA8UHPh4UHLx/yPdQa61BbcVh3OGsw8/rouq6
v2d/X39E7Ujxkc9HhUelx8KPddU71Nc3qDeUNsKNksax43HHb/3g9UN7E6vpUDOjufgEOCE5
8eLH+B/vngw82XmKfarpJ/2f9rbQWopaodbc1om2pDZpe0x73+mA050dzh0tP5v/fPSM9pma
s8pnS8+RzhWcmzmfd37yQsaF8YuJF4c6V3Q+urTk0p2usK7ey4GXr17xuXKp2737/FWXq2eu
OV07fZ19ve2G/Y3WHruell/sfmnpte9tvelws/2W462OvgV95/pd+y/e9rp95Y7/nRsDiwb6
7i6+e/9e3D3pfd790QepD14/zHo4/Wj9Y+zjoicKTyqeqj+t/dX412apvfTsoNdgz7OIZ4+G
uEMv/5X5r0/DBc+pzytGtEbqR61Hz4z5jN16sfTF8MuMl9Pjhb8p/rb3ldGrn353+71nYsnE
8GvR65k/St6ovjn61vZt52To5NN3ae+mp4req74/9oH9oftj9MeR6exP+E+Vn40/d3wJ/PJ4
Jm1m5t/3hPP7CmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoKMjYxMgplbmRvYmoKNyAwIG9i
agpbIC9JQ0NCYXNlZCAxNyAwIFIgXQplbmRvYmoKMjAgMCBvYmoKPDwgL0xlbmd0aCAyMSAw
IFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBzV1bj1zHcX4/v+I8OUvDGp37
xYEfYiEJkgcjhgn4wTIMakWatHdJi0vJEYL81eSv5Kvurq/qnG4Od2ZnqFAQZramT3XXpaur
qqv7fFf/tv6ubuqxOQxj13X1uI71PLSHcZiX+v3L+vf12/rLrx7a+vahbsN/D7doP6/dYWma
pb6PT6Q/q7vw57AeprEd2voOTd0fr+tXdXNY+D9QjdNwGKe1r6d+OnRDtwrGBKuGBb0sSw88
CquHBYOb2hGQ/jCs/QwIBr+MKyDdoZ2m1SC3dQ8Mfd+2wJVa3dU9MDQTuiKsx299E55M2B0k
jQG4UqtqXtbDuM4TxqUwcKQ5rN0wGHbwiN0Lw2qhNo1Q/hSiIgmV/EkKickg2t9t/dpwbDhG
ygfwYl1FENrXsPSHqRkHQNrDMKwL6E40jVMDZo69QUAlMPTD3BEGXH1/GMemdU8qX9EqYXeQ
OAbQS9i8zId1nQRVEkg9LwuE24yGnGzlEAgR1qWhKiyQmAhSmBFN7GRDGgJGBTX8OXRwnZp5
GXr5NqxNi9HJt7adp7EOmtkf5mkZt5qZYOwwCjG0E7mBsy0G0R8a6D/E2h7aNciWck8Qzxtt
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
REnu/fUL7Tf9Vt1Y/kCpsn17jv72rzku2rA/Bi5UvvY5JJvIDKSjzrCkYZKG80bxG07Abw0F
zo8EQ4HPjaEQuBiHKTwRzQPwSBuBIvDbGgoETxEPjIk3FAIX46BP4MT8HPC8rp9sKOBI7csL
qAlUWkqUEBUR7b3Wl2C5KJzI/iknNaqQUt08bRbnrmmGEnRPkFUx6G/pp+qGiKiXNvl3el06
DPwLpl9jpQq7PF0/uZAtqy5kcCJ3+rm2Ua/wudFPgYsm6hPyHcfZ0kKGt6/u9BPJsaCf+Nzo
p8BFP/WJ8F3mwgUWMlzHlfTzMQtZpp9WKMTENWvR2Jh2SgVN14tNVL03BytgXNyKeL7wFtR2
3lfCwkUOMm2My4LgWpgun154AQ6B8YnwPQoYYUOou/deCCARDz698AJcetYnwigEjxiX84/u
ixeyIJigcUlH908xLkXhhUXS+dKZ8NQhp2niokMvnmsITQPb2NyMWyRPmJsSbAWhYpNfvyEX
vRUv0mNBvPjciFfgIlJcDIMnwtqxAI+0ESju5NysHYAkPEEF6GQGuIhUn8DaEfE8fe1Y+vlJ
awetKO0q5UJxqDU1Q6tz1NyFe05Xa/WsOnGhF0OKc2pIgcrxiC/CkdK6HfFOyvjWAHA9bbH8
ByZ6vJ4B4w7+BQhRPyN8IkDZ3d8AJU3jwYxCsQP/lzNX2GYNFwp2iDEaHIgWZcGVaHjXFDb/
FXbnYR3K5MYZKWz3bIQhu4skVoqGgPxR4WLaXkLdU6Qdx10we+U6yzh7jfavlDIl/V4B/IIp
FZgAEYZPlRe5RiGRTR/4GxQgPHQb0aIWVyHaoaK160UQKf32/wDS+KWqCmVuZHN0cmVhbQpl
bmRvYmoKMjEgMCBvYmoKOTM1MAplbmRvYmoKMTkgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1Bh
cmVudCAzIDAgUiAvUmVzb3VyY2VzIDIyIDAgUiAvQ29udGVudHMgMjAgMCBSIC9NZWRpYUJv
eApbMCAwIDU5NSA4NDJdIC9Bbm5vdHMgMjQgMCBSID4+CmVuZG9iagoyMiAwIG9iago8PCAv
UHJvY1NldCBbIC9QREYgL1RleHQgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDcgMCBSID4+IC9F
eHRHU3RhdGUgPDwgL0dzMQoyNyAwIFIgL0dzMiAyOCAwIFIgPj4gL0ZvbnQgPDwgL1RUMyAx
NSAwIFIgL1RUMiA5IDAgUiAvVFQxIDggMCBSIC9UVDUgMjMgMCBSCj4+ID4+CmVuZG9iagoy
NCAwIG9iagpbIDI1IDAgUiAyNiAwIFIgXQplbmRvYmoKMjcgMCBvYmoKPDwgL1R5cGUgL0V4
dEdTdGF0ZSAvY2EgMC40OTggPj4KZW5kb2JqCjI4IDAgb2JqCjw8IC9UeXBlIC9FeHRHU3Rh
dGUgL2NhIDEgPj4KZW5kb2JqCjMwIDAgb2JqCjw8IC9MZW5ndGggMzEgMCBSIC9GaWx0ZXIg
L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AeWd245dx3GG79dTrKtgZIRb63xQogSwkYMDOIAh
Gr6wDYMaHaiYI9ocWrJg5DFz62fJV939V/XstUnODKnchIIwe/7dXV1VXV1dXX2YP7W/bP/U
du3cnaZ5GIZ23ud2nfrTPK1b++rL9tftt+3HP7vt2+vbtk//3V5Tft2H09Z1W3uTa5Rfmxfp
12k/LXM/9e0Lila/PG+/arvT5v9Dal6m07zsYzus/Wlb59koFqzp1/00bnAFWZXr1+3UzfME
Mp6mfVzbfl1O+7pvIMOpX5Y9kOt2hM9x7HtolVIv2hHxumWoyo2IP3apZqFeIYUHaJVSzQgz
47Jt8CWsHZf5tOzzEtTHZTmtaz84D5QpiMmdeYVWwUzGIpFjLrVTr5DCw3X7PKjd0aK0sXWn
fRv3pMUK63bUPi/9aZpQnut6Xjp6ZB5D+0g+oZ9pHaIUko+nee76qqZ03fa0mKgLaQxJPESP
oI3htC4QhVbpJbDRTGcN6q5r8RDaNy1mXqnnPeISOSZdB3Uh0Co8mBa/+gmWuS/duk2jfZr2
rt+X9KnHfOY22esI09t8114zFpzlvkzlrOeGeTRNjxhuP8HFjL12ZsGlNxwJ7UCrlEr2uk+b
mZYwLHgY+2lPSKJeIW4XwqInE61c08bRtK9oukdSo96v62ndOppRbzhS2atjWcYkkWMmY5La
qVeIj6Oi6a2RL6j9wJNtOE1bv42VI2ifDD3K68e59gSAiDp1WbXmChqg+TT18x66DSiUa/RK
uaSR7A0C1KA2eqUJQRUr0JPbmPAaNoig5hDirsvC6C/epnEf6/p1JPQbnrjyB15Oo7/BqWbq
QlqxULuD9q4yi7UhFGO+Z+RaExk0SYfTsC9mlcUjABWl+zALCOHlEwJE/OIUjF6p7NIClSZq
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
bmRvYmoKMjkgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAzIDAgUiAvUmVzb3VyY2Vz
IDMyIDAgUiAvQ29udGVudHMgMzAgMCBSIC9NZWRpYUJveApbMCAwIDU5NSA4NDJdID4+CmVu
ZG9iagozMiAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgL1RleHQgXSAvQ29sb3JTcGFjZSA8
PCAvQ3MxIDcgMCBSID4+IC9FeHRHU3RhdGUgPDwgL0dzMQoyNyAwIFIgL0dzMiAyOCAwIFIg
Pj4gL0ZvbnQgPDwgL1RUNiAzMyAwIFIgL1RUMyAxNSAwIFIgL1RUMiA5IDAgUiAvVFQ0IDE2
IDAgUgovVFQxIDggMCBSIC9UVDUgMjMgMCBSID4+ID4+CmVuZG9iagozNSAwIG9iago8PCAv
TGVuZ3RoIDM2IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHFXW2PHMdx
/j6/Yj4FS8EazfS8OzACWAkS50MQWwfoQ2wE1Ik0GdyR0i0l2zDyV/1b8lR31VO900Nyd+8u
FkHd3rPd1VXVNVXV1T3NH+vf1j/WbT22zTCGEOpxHet56JpxmJf64VX9bf2u/urrY1ffHusu
/jneov28hmZp26W+Tz301+ou/jqszTR2Q1ffoWn2y5v6dd02C/+C1DgNzTitfT2Na9Pif0JR
sWoMSzP2Qw86htVjmJvQziOQvhnWfgYyNV3frUBC000TPhhyW/fgs++7DrS01V3dQ7x2Clm7
HuL3beyp1DNEeQAtbVXNy9qM6zyBL8OgkbZZwzA4deiIw4vCapFWOZRfRagkQiW/UkJScsTG
u63fOI0TjZnk4Kfrx1UmwsYaw9oETAeQrhmGdYF+VKZxaqH9sXcEUg7QxTCDIW0FWn3fjGPb
ZT1Nr2il1B1RHiAvsXmZm3WdhJROSD0vS7Ms7ejEqVayQERUp6waFkVUgQxzoUmdalAWwBXM
8AvY4Dq18wLjwqdhbTtwJ5+6bp7GOlpm38zTMp5apmIcME1ibCfzNiyhAxN900LhmNau6dY4
t5x3RXLdWKtomeuwjBPMRdvBVkPfDStoKXVDoEC1QtDSVpwzsUzH5maSaQcSqcdnYe3D7JMh
T0dEMhsllmQUiUBf24mMIjVoKXVDnAfVtHgYfnlitBtlxhk1zMQ1ZbpKfEZNSTvKFEtTcb0n
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
BpsTONEMz4z93mZuMdu4LY8YLiTC7RpydWuGYf9vwK16HQ4pww0vNd7oa2Y44wpbEdisxIt3
hiCPwR4WilQ4zkpM1mQofaHOQAjrTqQ64CH+2wV4NcABZUAWtakNdm2wuY/kSda0Cg0SqOLZ
yUQYDn+KQtnoFRGEa+OSmEinshCjvAgMibghspObOLAQ8bnSgfXc07FTy3ScjVnypTomp65j
l9J1zGalskx7Lo616XTepTy3mZqdyStmONOxTbGkRKZjw4CY7em85wgn/k1EcRk4TE5tFJvC
0jdinI2kv4RhoY33z9EI+TlqBzUUOmDXEOE2TT4BpAzJRrBHx0ZRe/Iv5zgENcR/kChujApp
B1R9Qskamf6SjaaOYtuhxZkrWH+kLYC8f+sMGAJSxqdB8QlUYYhRB4JE2hmS9AdSm0LpBY7a
05jMZSPU4Vy3XYVvCcz7H149vPzw/uHiTU1NYLRQKsdfsrE6XIbdYmc8jniacxzqt8f65Q8/
3L199b2nNdVv/w+L9X4OCmVuZHN0cmVhbQplbmRvYmoKMzYgMCBvYmoKNjQ1MAplbmRvYmoK
MzQgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAzIDAgUiAvUmVzb3VyY2VzIDM3IDAg
UiAvQ29udGVudHMgMzUgMCBSIC9NZWRpYUJveApbMCAwIDU5NSA4NDJdIC9Bbm5vdHMgMzgg
MCBSID4+CmVuZG9iagozNyAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgL1RleHQgXSAvQ29s
b3JTcGFjZSA8PCAvQ3MxIDcgMCBSID4+IC9FeHRHU3RhdGUgPDwgL0dzMQoyNyAwIFIgL0dz
MiAyOCAwIFIgPj4gL0ZvbnQgPDwgL1RUNCAxNiAwIFIgL1RUMyAxNSAwIFIgL1RUMiA5IDAg
UiAvVFQxIDggMCBSCi9UVDUgMjMgMCBSID4+ID4+CmVuZG9iagozOCAwIG9iagpbIDM5IDAg
UiA0MCAwIFIgXQplbmRvYmoKNDIgMCBvYmoKPDwgL0xlbmd0aCA0MyAwIFIgL0ZpbHRlciAv
RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBrV3bjiRHbn3Pr8jHmoWUm/cL4LVhaQ1j/bCGoAb2
wWsIs72SRquZkdQ9uv3s+ld8GMFzGJVZPd3VGoyErmZFMMgTTAaDwcj+of6s/qFu66ltxqnv
+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
FJxjJTO1u7FqlQDEdWGUdYoGJPwFCVtmXhAygsaKjQhhNtTc0QwcnsnKDOwNqmBu6HQ9LjpI
BFLAS6KSZk8iFRJNOIh7QckYgtdvPYG1BCaOPuyS9Mf4aW9YsLrAHOfh1Xb2lwlPz0iT+jFv
wbqzxFYCKQbAyYH/6UMuUljrsBClZSz91CL4C0NExC/lN7iXyW/ekQlO+1ITreD4u1T5zxPq
g77igO8QxpV8ofXVizyVhvNPeOKMHf+hJN7xDHX/nQIhpEijvpOiEpGSSVSIaI2r00/srU7U
HDJnRRHvJL7kjxgmj5N5EOCUWklffCBtsbzzFnpo+ycf/A2l4xxSOumhFk4J+d4JBoSVSWJq
Qib8/d31V+J8U4aiiGLixh6hSn4QQpX/9sGpgSTnbHGX8pk3JPBqqCny6eRUpL/6uZuKK98o
upPf7nJJfn+j6OeUR0jrgwCWBX4oICcIJkH8gdcToMf3W1pHhjLtgxIefJw50YISsXtqgJA5
/ZQqakFW787M+7P/BxdOV0MKZW5kc3RyZWFtCmVuZG9iago0MyAwIG9iago3ODI1CmVuZG9i
ago0MSAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJjZXMgNDQg
MCBSIC9Db250ZW50cyA0MiAwIFIgL01lZGlhQm94ClswIDAgNTk1IDg0Ml0gL0Fubm90cyA0
NSAwIFIgPj4KZW5kb2JqCjQ0IDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9D
b2xvclNwYWNlIDw8IC9DczEgNyAwIFIgPj4gL0ZvbnQgPDwgL1RUNCAxNiAwIFIKL1RUMyAx
NSAwIFIgL1RUMiA5IDAgUiAvVFQxIDggMCBSID4+ID4+CmVuZG9iago0NSAwIG9iagpbIDQ2
IDAgUiA0NyAwIFIgNDggMCBSIDQ5IDAgUiA1MCAwIFIgNTEgMCBSIF0KZW5kb2JqCjUzIDAg
b2JqCjw8IC9MZW5ndGggNTQgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4
Ae2ay5LcNBSG93oKFSt3hTiWb7LYJUOqKBaBME1RVJIFNBlCaiaX7hAIDwuvwq/L+S23Ox33
5LJKzULqY0k+ko4+/5Lmpb6vX+pK186Vlasa3blOt64uXeWs3j7WP+ln+tbZzujNTpvwt9ug
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
IJVJSIKZvcbn4kQwH7xP7wyOiPYjja8VIEuayPBZIjPAONWfQiJz+MlcZvZJoItlYFYnBlHS
VvUQ/0MHKbZYbd/7f8rwV5NN/A8dbINJIq7KC+a2Euq0IK7DQtvI8uaTXR7o9/8Hx4lU9Apl
bmRzdHJlYW0KZW5kb2JqCjU0IDAgb2JqCjIwNTEKZW5kb2JqCjUyIDAgb2JqCjw8IC9UeXBl
IC9QYWdlIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyA1NSAwIFIgL0NvbnRlbnRzIDUzIDAg
UiAvTWVkaWFCb3gKWzAgMCA1OTUgODQyXSAvQW5ub3RzIDU2IDAgUiA+PgplbmRvYmoKNTUg
MCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9UZXh0IF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA3
IDAgUiA+PiAvRm9udCA8PCAvVFQzIDE1IDAgUgovVFQxIDggMCBSID4+ID4+CmVuZG9iago1
NiAwIG9iagpbIDU3IDAgUiA1OCAwIFIgNTkgMCBSIDYwIDAgUiA2MSAwIFIgNjIgMCBSIDYz
IDAgUiBdCmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvTWVkaWFCb3ggWzAgMCA1
OTUgODQyXSAvQ291bnQgNiAvS2lkcyBbIDIgMCBSIDE5IDAgUiAyOSAwIFIKMzQgMCBSIDQx
IDAgUiA1MiAwIFIgXSA+PgplbmRvYmoKNjQgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1Bh
Z2VzIDMgMCBSIC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjYzIDAgb2JqCjw8IC9BIDY1IDAg
UiAvQm9yZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3Qg
WzU0LjQ1NDkxIDM3My45Nzg1IDEwMS43MDI2IDM4Ni43OTE0XQo+PgplbmRvYmoKNjUgMCBv
YmoKPDwgL1R5cGUgL0FjdGlvbiAvUyAvVVJJIC9VUkkgNjYgMCBSID4+CmVuZG9iago2NiAw
IG9iagooaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBl
cnMvMjAxNS9wMDAyOXIwLmh0bWwpCmVuZG9iago2MiAwIG9iago8PCAvQSA2NyAwIFIgL0Jv
cmRlciBbIDAgMCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9SZWN0IFs1NC40
NTQ5MSA0MzMuMjM4MiAxMDEuNzAyNiA0NDYuMDUxMV0KPj4KZW5kb2JqCjY3IDAgb2JqCjw8
IC9UeXBlIC9BY3Rpb24gL1MgL1VSSSAvVVJJIDY4IDAgUiA+PgplbmRvYmoKNjggMCBvYmoK
KGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIw
MTUvcDAwMTdyMC5odG1sKQplbmRvYmoKNjEgMCBvYmoKPDwgL0EgNjkgMCBSIC9Cb3JkZXIg
WyAwIDAgMCBdIC9UeXBlIC9Bbm5vdCAvU3VidHlwZSAvTGluayAvUmVjdCBbNTQuNDU0OTEg
NDkyLjQ5OCA4Ny4yODgwMiA1MDUuMzEwOV0KPj4KZW5kb2JqCjY5IDAgb2JqCjw8IC9UeXBl
IC9BY3Rpb24gL1MgL1VSSSAvVVJJIDcwIDAgUiA+PgplbmRvYmoKNzAgMCBvYmoKKGh0dHA6
Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMTUvbjQ1
MTEuaHRtbCkKZW5kb2JqCjYwIDAgb2JqCjw8IC9BIDcxIDAgUiAvQm9yZGVyIFsgMCAwIDAg
XSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzU0LjQ1NDkxIDU1MS43NTc3
IDg4LjA4ODgzIDU2NC41NzA3XQo+PgplbmRvYmoKNzEgMCBvYmoKPDwgL1R5cGUgL0FjdGlv
biAvUyAvVVJJIC9VUkkgNzIgMCBSID4+CmVuZG9iago3MiAwIG9iagooaHR0cDovL3d3dy5v
cGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAxNS9uNDQ3Ny5wZGYp
CmVuZG9iago1OSAwIG9iago8PCAvQSA3MyAwIFIgL0JvcmRlciBbIDAgMCAwIF0gL1R5cGUg
L0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9SZWN0IFs1NC40NTQ5MSA2MTEuMDE3NSA4OC4wODg4
MyA2MjMuODMwNF0KPj4KZW5kb2JqCjczIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24gL1MgL1VS
SSAvVVJJIDc0IDAgUiA+PgplbmRvYmoKNzQgMCBvYmoKKGh0dHA6Ly93d3cub3Blbi1zdGQu
b3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMTUvbjQ0NTEucGRmKQplbmRvYmoK
NTggMCBvYmoKPDwgL0EgNzUgMCBSIC9Cb3JkZXIgWyAwIDAgMCBdIC9UeXBlIC9Bbm5vdCAv
U3VidHlwZSAvTGluayAvUmVjdCBbNTQuNDU0OTEgNjcwLjI3NzMgODguMDg4ODMgNjgzLjA5
MDJdCj4+CmVuZG9iago3NSAwIG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA3
NiAwIFIgPj4KZW5kb2JqCjc2IDAgb2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMx
L3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDE1L240NDI4LnBkZikKZW5kb2JqCjU3IDAgb2Jq
Cjw8IC9BIDc3IDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUg
L0xpbmsgL1JlY3QgWzU0LjQ1NDkxIDcyOS41MzcgODguMDg4ODMgNzQyLjM0OTldCj4+CmVu
ZG9iago3NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA3OCAwIFIgPj4K
ZW5kb2JqCjc4IDAgb2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cy
MS9kb2NzL3BhcGVycy8yMDEzL24zNzQ2LnBkZikKZW5kb2JqCjUxIDAgb2JqCjw8IC9BIDc5
IDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1Jl
Y3QgWzk3LjY5ODUyIDc3LjY3OTY4IDEzMi4xMzMyIDkwLjQ5MjZdCj4+CmVuZG9iago3OSAw
IG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA4MCAwIFIgPj4KZW5kb2JqCjgw
IDAgb2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3Bh
cGVycy8yMDE1L240NDc3LnBkZikKZW5kb2JqCjUwIDAgb2JqCjw8IC9BIDgxIDAgUiAvQm9y
ZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzI3MS40
NzM4IDQzMi40Mzc0IDMwNS4xMDc3IDQ0NS4yNTAzXQo+PgplbmRvYmoKODEgMCBvYmoKPDwg
L1R5cGUgL0FjdGlvbiAvUyAvVVJJIC9VUkkgODIgMCBSID4+CmVuZG9iago4MiAwIG9iagoo
aHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAx
NS9uNDQ1MS5wZGYpCmVuZG9iago0OSAwIG9iago8PCAvQSA4MyAwIFIgL0JvcmRlciBbIDAg
MCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9SZWN0IFsyMjEuODIzNyA0MzIu
NDM3NCAyNTUuNDU3NiA0NDUuMjUwM10KPj4KZW5kb2JqCjgzIDAgb2JqCjw8IC9UeXBlIC9B
Y3Rpb24gL1MgL1VSSSAvVVJJIDg0IDAgUiA+PgplbmRvYmoKODQgMCBvYmoKKGh0dHA6Ly93
d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMTUvbjQ0Mjgu
cGRmKQplbmRvYmoKNDggMCBvYmoKPDwgL0EgODUgMCBSIC9Cb3JkZXIgWyAwIDAgMCBdIC9U
eXBlIC9Bbm5vdCAvU3VidHlwZSAvTGluayAvUmVjdCBbMjc0LjY3NyA1NDguNTU0NSAzMDku
MTExNyA1NjEuMzY3NF0KPj4KZW5kb2JqCjg1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24gL1Mg
L1VSSSAvVVJJIDg2IDAgUiA+PgplbmRvYmoKODYgMCBvYmoKKGh0dHA6Ly93d3cub3Blbi1z
dGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMTUvbjQ0NTEucGRmKQplbmRv
YmoKNDcgMCBvYmoKPDwgL0EgODcgMCBSIC9Cb3JkZXIgWyAwIDAgMCBdIC9UeXBlIC9Bbm5v
dCAvU3VidHlwZSAvTGluayAvUmVjdCBbMjI1LjgyNzcgNTQ4LjU1NDUgMjU5LjQ2MTYgNTYx
LjM2NzRdCj4+CmVuZG9iago4NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VS
SSA4OCAwIFIgPj4KZW5kb2JqCjg4IDAgb2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9q
dGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDE1L240NDI4LnBkZikKZW5kb2JqCjQ2IDAg
b2JqCjw8IC9BIDg5IDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5
cGUgL0xpbmsgL1JlY3QgWzIwMS4wMDI3IDYyOS40MzYxIDIzMy44MzU4IDY0Mi4yNDldCj4+
CmVuZG9iago4OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA5MCAwIFIg
Pj4KZW5kb2JqCjkwIDAgb2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIv
d2cyMS9kb2NzL3BhcGVycy8yMDE1L240NTExLmh0bWwpCmVuZG9iago0MCAwIG9iago8PCAv
QSA5MSAwIFIgL0JvcmRlciBbIDAgMCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5r
IC9SZWN0IFs0NTUuNjU5NSA0MDQuNDA5MiA0ODkuMjkzNCA0MTcuMjIyMV0KPj4KZW5kb2Jq
CjkxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24gL1MgL1VSSSAvVVJJIDkyIDAgUiA+PgplbmRv
YmoKOTIgMCBvYmoKKGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2Rv
Y3MvcGFwZXJzLzIwMTUvbjQ0NzcucGRmKQplbmRvYmoKMzkgMCBvYmoKPDwgL0EgOTMgMCBS
IC9Cb3JkZXIgWyAwIDAgMCBdIC9UeXBlIC9Bbm5vdCAvU3VidHlwZSAvTGluayAvUmVjdCBb
MzkuMjM5NTcgNDIyLjAyNjkgODcuMjg4MDIgNDM0LjgzOThdCj4+CmVuZG9iago5MyAwIG9i
ago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA5NCAwIFIgPj4KZW5kb2JqCjk0IDAg
b2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVy
cy8yMDE1L3AwMDI5cjAuaHRtbCkKZW5kb2JqCjI2IDAgb2JqCjw8IC9BIDk1IDAgUiAvQm9y
ZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzE3MC41
NzIgMjI1LjAyODMgMjA1LjAwNjcgMjM3Ljg0MTJdCj4+CmVuZG9iago5NSAwIG9iago8PCAv
VHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA5NiAwIFIgPj4KZW5kb2JqCjk2IDAgb2JqCiho
dHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDE1
L240NDc3LnBkZikKZW5kb2JqCjI1IDAgb2JqCjw8IC9BIDk3IDAgUiAvQm9yZGVyIFsgMCAw
IDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzQ1Mi40NTYzIDQwMC40
MDUxIDQ4Ni4wOTAyIDQxMy4yMThdCj4+CmVuZG9iago5NyAwIG9iago8PCAvVHlwZSAvQWN0
aW9uIC9TIC9VUkkgL1VSSSA5OCAwIFIgPj4KZW5kb2JqCjk4IDAgb2JqCihodHRwOi8vd3d3
Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDE1L240NDc3LnBk
ZikKZW5kb2JqCjE0IDAgb2JqCjw8IC9BIDk5IDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAvVHlw
ZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzM3Ni4zNzk1IDMxMy4xMTcxIDQxMC4w
MTM1IDMyNS45M10KPj4KZW5kb2JqCjk5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24gL1MgL1VS
SSAvVVJJIDEwMCAwIFIgPj4KZW5kb2JqCjEwMCAwIG9iagooaHR0cDovL3d3dy5vcGVuLXN0
ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAxNS9uNDQ3Ny5wZGYpCmVuZG9i
agoxMyAwIG9iago8PCAvQSAxMDEgMCBSIC9Cb3JkZXIgWyAwIDAgMCBdIC9UeXBlIC9Bbm5v
dCAvU3VidHlwZSAvTGluayAvUmVjdCBbNDc4LjA4MjEgNDkwLjA5NTYgNTEyLjUxNjggNTAy
LjkwODVdCj4+CmVuZG9iagoxMDEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbiAvUyAvVVJJIC9V
UkkgMTAyIDAgUiA+PgplbmRvYmoKMTAyIDAgb2JqCihodHRwOi8vd3d3Lm9wZW4tc3RkLm9y
Zy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDE1L240NDc3LnBkZikKZW5kb2JqCjEy
IDAgb2JqCjw8IC9BIDEwMyAwIFIgL0JvcmRlciBbIDAgMCAwIF0gL1R5cGUgL0Fubm90IC9T
dWJ0eXBlIC9MaW5rIC9SZWN0IFsyMjEuODIzNyA0OTAuMDk1NiAyNjkuODcyMSA1MDIuOTA4
NV0KPj4KZW5kb2JqCjEwMyAwIG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSAx
MDQgMCBSID4+CmVuZG9iagoxMDQgMCBvYmoKKGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0
YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMTUvcDAwMjlyMC5odG1sKQplbmRvYmoKMTEg
MCBvYmoKPDwgL0EgMTA1IDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1
YnR5cGUgL0xpbmsgL1JlY3QgWzMxNS41MTgyIDYyOC42MzUzIDQ0Ni44NTA2IDY0MS40NDgy
XQo+PgplbmRvYmoKMTA1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24gL1MgL1VSSSAvVVJJIDEw
NiAwIFIgPj4KZW5kb2JqCjEwNiAwIG9iagoobWFpbHRvOnZpY2VudGUuYm90ZXRAd2FuYWRv
by5mcikKZW5kb2JqCjMzIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlw
ZSAvQmFzZUZvbnQgL1RJRlpDUStIZWx2ZXRpY2EtT2JsaXF1ZSAvRm9udERlc2NyaXB0b3IK
MTA3IDAgUiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciA3NyAvTGFz
dENoYXIgMTE5IC9XaWR0aHMgWwo4MzMgMCAwIDAgMCAwIDY2NyAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDU1NiA1NTYgMCAwIDU1NiAwIDAgMCAwIDAgMCAyMjIKMCAwIDU1NiA1NTYg
MCAwIDAgMCAwIDUwMCA3MjIgXSA+PgplbmRvYmoKMTA3IDAgb2JqCjw8IC9UeXBlIC9Gb250
RGVzY3JpcHRvciAvRm9udE5hbWUgL1RJRlpDUStIZWx2ZXRpY2EtT2JsaXF1ZSAvRmxhZ3Mg
OTYgL0ZvbnRCQm94ClstOTMzIC00ODEgMTU3MSAxMTM4XSAvSXRhbGljQW5nbGUgLTYgL0Fz
Y2VudCA3NzAgL0Rlc2NlbnQgLTIzMCAvQ2FwSGVpZ2h0CjcxNyAvU3RlbVYgOTggL1hIZWln
aHQgNTIzIC9TdGVtSCA4NSAvQXZnV2lkdGggLTQ0MSAvTWF4V2lkdGggMTUwMCAvRm9udEZp
bGUyCjEwOCAwIFIgPj4KZW5kb2JqCjEwOCAwIG9iago8PCAvTGVuZ3RoIDEwOSAwIFIgL0xl
bmd0aDEgODI5NiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9WXtYVEeWP3Uf
3U3TKm8QGrrbK28QRQUVR1vsRvCJooY2EhsQBCMJY5CoiQ7r6ETxMYkmmtHZPCdO1BivQEwD
oxJXE2dnk2ieEycP857ZyWN2V3ezUbvnV7cbbMjj8w+/3Pudrjqnqk6d+p1zqu693bRyVQ0N
ohYSqXRRZWMtaZdlM4qL1Q2VjX4+8hmUd1Q3N1n9vPwGkbittnFZg58PcRMZE5etWBMYHzUG
/D/qaiqX+tvpKsq8Ogj8PEM7Da9raFrt5yNbUGatuLM60B5lBh/XULk6MD+9C956R2VDDUpc
lsX4yWq8864mjSXLcJTjGlfWBPqzciLpXmKQhtJuCtF6CRSGu4JI/1djoibh7bj2xiyds2TI
xMsUbtD4JbN+rZXn57/84DetV1NNO0MSSICWQH9e6tK96UQmhvaxpp0GYu3akN6fUA+VZbIu
klknLchkJ1EtpFxKpUSYQHRr5knWTZMGSP5AEwZIjlOeJokJjKKT7BjNosmUT2kUF1D0PLlp
Tj+J5zuTdVI6DaN46lPUxU6QRIsyPew5q3NdfZzDQyWZHpoMGgvKzJwSRy1sP90PegwkUj3b
SmtAW0C/AUl9tQPgOtnWNslg72JrKJ5Nt4dKlvlRQy1xxlDLax6m63jE8k7cx91sKELtQza0
bRCFTDGyx9ijtJQs7ClKZmupmNLY3vb0FRY3mg5QI6gFJGq/jB1oS8q1nGBZlCwxjEmhJIkd
s3w+Ktvy6SiPwNosp1I9EooXksDZh1h6Eh+xnExcZjkBOuRvOpiOHscsBxJXWHYledjeNsvO
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
mQCcCcCZAJwJwJkAnKkXOBOAMwE4uAT6wtjzl7rIirQ1IVkQNhqYPKT5IZvHRuuxhXMsBR7k
2DdERbyYEGHt6m6YYIuPHNa1/o1rTx1JcpbU3XPsVP70tzfvXTMtI7OpQ0hqWXy0e+nee2/Z
/7rw/o6StInevwHmJ3YvGZtUcu09Ho+McHpKL+M7pY4cwSgH4vr6ZhuI6+sCiaMscZS7oAYP
lX7bI3nQi+xkDfvkzLUtPU9LOVcfFuuunMcU2nx4ftVtBGP63me06+q/M993tn89N0AftP0b
ucDYa5E+8Iwm8cMctnXhU5K/BoRhZcBQ2NqVwDb+u5Vt77j2WXeGd133PNjcIc682ilOu3Je
/NnVf/Pbjqdq3yVQDT7yf9+FUwMfhfPIQU7k4Rz8HVCGh6lF2qojABG/dMhWml9StGjq3Mzi
mhXNNU311ZXZc6pW1P8c/8Bzf/Re/L9xO6gU5AY1glpA94MeA6mgHtA5X+BCnfrqDO8E/fmy
AXzlAL5qAK+tMUgf/wAerP/OATy3L7i9eQDPn5ronxuaihMKZW5kc3RyZWFtCmVuZG9iagox
MDkgMCBvYmoKNDY5MQplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAv
VHJ1ZVR5cGUgL0Jhc2VGb250IC9LR0ZFT1ArSGVsdmV0aWNhIC9Gb250RGVzY3JpcHRvcgox
MTAgMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0
Q2hhciAyMjMgL1dpZHRocyBbCjI3OCAwIDM1NSAwIDAgMCAwIDE5MSAzMzMgMzMzIDAgNTg0
IDI3OCAzMzMgMjc4IDI3OCA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1Ngo1NTYgNTU2IDU1NiA1
NTYgMjc4IDAgNTg0IDU4NCA1ODQgNTU2IDEwMTUgNjY3IDY2NyA3MjIgNzIyIDY2NyA2MTEg
Nzc4IDcyMgoyNzggNTAwIDAgNTU2IDgzMyA3MjIgNzc4IDY2NyA3NzggNzIyIDY2NyA2MTEg
NzIyIDY2NyA5NDQgNjY3IDY2NyAwIDI3OCAwCjI3OCAwIDAgMCA1NTYgNTU2IDUwMCA1NTYg
NTU2IDI3OCA1NTYgNTU2IDIyMiAyMjIgNTAwIDIyMiA4MzMgNTU2IDU1NiA1NTYKNTU2IDMz
MyA1MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1MDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIy
MgowIDAgMCAwIDAgMCAwIDAgNTAwIDUwMCBdID4+CmVuZG9iagoxMTAgMCBvYmoKPDwgL1R5
cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvS0dGRU9QK0hlbHZldGljYSAvRmxhZ3Mg
MzIgL0ZvbnRCQm94IFstOTUxIC00ODEgMTQ0NSAxMTIyXQovSXRhbGljQW5nbGUgMCAvQXNj
ZW50IDc3MCAvRGVzY2VudCAtMjMwIC9DYXBIZWlnaHQgNzE3IC9TdGVtViA5OCAvWEhlaWdo
dAo1MjMgL1N0ZW1IIDg1IC9BdmdXaWR0aCA0NDEgL01heFdpZHRoIDE1MDAgL0ZvbnRGaWxl
MiAxMTEgMCBSID4+CmVuZG9iagoxMTEgMCBvYmoKPDwgL0xlbmd0aCAxMTIgMCBSIC9MZW5n
dGgxIDIzODg0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AdV8eXgUVbr+ObV0
Va/pfUuv6XR3QkhCErJBIA1kYRdBIEFA9k0YFtkFJiq7DCrIMoALOgKCSoAoQcRhFATUGcFd
REdHdJwZozNz0RmBrvzeUx0QMnPvM3/c5z7Pr5Ov6pyq6qpzvvOdb3nPVz13zryJxEgaCE8G
jRg7axJRP8M+I0QzffyMsbNSddtVQujW8fPnhlJ1MYsQfvqkWZNnpOryw4To/JOnL2r7vrOC
kMrmKRPHTkidJ/g+KZmCA6k67Yx95pQZcxem6tYm3L/39Jnj2847cD+ya8bYhW3PJxdQD/1s
7IyJqeuHvYR95qyZd81N1Ydewv70rDkT266ndWjfW4Ti6GCygWjJnUQiHDHjbxQh0tc6PxFw
lp3Hp0/3C4E70iq+JxZZrd8x4AF1f+623z74z4lX4/qH5B9xQHvterbXZCvZhBgozrfoH7p+
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
Ld2b7pfTro423HSeoX03Pj+vXR1G7qbzndrV8WLaTecL29WL2tWho2+6vrhdHS/63HS+tF29
rF0dv0xz0/Vd2tXB75vOd2tX796uXtmunmhX79Gu3rNdvVe7elW7enW7ek27em27eu92dQAr
N/WHRas3jh9k66b6gHb1ge3qt7SrY27f9H2WFXzj/ZlGu7E+pF39tnb1oe3qw9rVh7er17Wr
17er396uPqpdnWmqG9s3rl19fLv6hHZ1VY/fMB8ntTs/uV19Srv61Hb1ae3qd7arT29Xn9Gu
ztDTG/szs119Vrv67Hb1Oe3qd7Wrz21Xn9euPr9dfUG7+sJ29UXt6otvroc8N9evqFblJ35f
4dj5/wdLnHf6CmVuZHN0cmVhbQplbmRvYmoKMTEyIDAgb2JqCjE2MjIyCmVuZG9iagoyMyAw
IG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9OUE1W
RlIrTW9uYWNvIC9Gb250RGVzY3JpcHRvcgoxMTMgMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5F
bmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjUgL1dpZHRocyBbCjYwMCAwIDAg
MCAwIDAgNjAwIDAgNjAwIDYwMCAwIDAgNjAwIDAgNjAwIDYwMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDYwMCA2MDAKMCA2MDAgMCAwIDAgMCAwIDAgMCAwIDYwMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCA2MDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDYwMCAwIDYwMCA2MDAgNjAwIDYw
MCA2MDAgNjAwIDYwMCA2MDAgNjAwIDAgMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDAgNjAwCjYw
MCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAwIDYwMCAwIDYwMCBdID4+CmVuZG9iagoxMTMg
MCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvTlBNVkZSK01vbmFj
byAvRmxhZ3MgMzIgL0ZvbnRCQm94IFstNjEwIC00MjEgODA0IDEyMjNdCi9JdGFsaWNBbmds
ZSAwIC9Bc2NlbnQgMTAwMCAvRGVzY2VudCAtMjUwIC9DYXBIZWlnaHQgNzgwIC9TdGVtViA5
OCAvTGVhZGluZwo4MyAvWEhlaWdodCA1NjEgL1N0ZW1IIDc2IC9NYXhXaWR0aCA2MDYgL0Zv
bnRGaWxlMiAxMTQgMCBSID4+CmVuZG9iagoxMTQgMCBvYmoKPDwgL0xlbmd0aCAxMTUgMCBS
IC9MZW5ndGgxIDEzNTA0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZV7CXxU
1dX4vW9/s77ZMluSN5OXTMgymYQsEAjJAEnAQMIOiSWSAGFfwpaKBQQFkYg1VVFqABdQQbAd
wuIQcClFLFQ/pVqtS/9qiRaXIFqkCpmZ/7lvEoTUfr/f9ybn3fXde+65Z7vnvaxcvqoJ6dF6
RKPxtzY2z0HqlXcKIapn1uLG5nhZCkL6zqyWlZ54mduOEH1lTvPcxfGypg0h1jF30ere502z
EZLfmtfUCKl69cC9aB5UxIu4ANLUeYtX3h4vG/dCun3R0lm97SYrlGsWN97eOz/6CMqeJY2L
m+L98/aQcvPSFSt7y2S85ublTb39cS3gU4ow1PpQM9KhGsQiCknwK0GIvwBtNLSSdgqhoy+f
4mYYS77HJkEd7rZ/vLqeZN7YZSu4Jvc8xS0V/wRFUe1PGuA5AUUR2s98cE2OrOSWXm8hreTy
hdHArKA3UHNnze9zfj+XCSwMbMtd+ObCN7ddWsgFhuUOe3PYW8MuDWPDeEGHv0h+EX+PryAv
kvFl3NWRIo8f7sYrYNBL6r0Br0TNAOsBPgFgkAfubQCXAGDj4B4CoPC3QbswUJ4g2GS9Nl/m
uXxZFPJkmsqTw/iPR1Od8isAYRzoUJOTJBmuxy/j42gDzP0iPi5gSE/0lo93DNkgn8Cd+Bia
CNXHOuRCeDjc4dsAyQsdQwZD41FoIM8c6ZBHQvEQPqz2PdyRmgOdDnakkkdCh9M3yELwOH4G
SCPGlxzGmR1+vzxci1PQTJwGQ3h702SkMPio/JmsyOeHhBkcdMufKFXyS9D7mFImh5Ui+WnI
7/Hvl3dPhPYO+amZavJkPHlcCWOo3KVA5VG5XamQN8ezm5Sh8pJ4n1nxZFL8+dHx9lHKKHmk
Ehbg4RGkpkPOmBnGaR3ygHhvX7wyjSRBrZyijJS9AElqeag8xSE6xLZf8m0NfNs4vi3It5Xy
bXl8Wy7flsW3ZfJtybxVMAuSYBB0gkYQBE5gBEpAgjUc+ySYRdjKykkk4RhyZ9S8BAyKCZfC
HXZYoFAV6rB6rBUN5Y5jCOPYpvsTWsocZeZSU3Fl+c/cGtTKhvKsny7HT1k8ZvzqE0D8RYiH
u/4oL3/By1U86TBmErS0qS1tpKXtC74t3uJICj0yZlJt6LmkutBAkokl1Y0J7ZrkmV57DO/F
z1SUH8PPkqSu9hi9B++tmEjq6T3ldde7wWR7oRvyk4R0exzJpBuS6cdJNyCxOhxKxc+Sfvkk
gX7OIEpV+6U6gzf0OzhTrig/KMMN+tiDaKbaZ6Y93kdQxzo40Q99/HCDPgPXo4lqn4kD16to
NZLpDioKdBkCN+iCzyFF7aLgc+pUdHwYtU96vI/h3r4+hnv/o0/xz/b5ifb/Ndc04tCwtQu3
VTQpFQ1KRRNAQ+i+lnmO0PqZHs/BhWtJgydE+xpmzppH0sam0FqlqTy0UCn3HBymPteveRtp
HqaUH0TbKibXHtwWbCrvGBYcVqE0ltcdyhlfM/emubZcn6tm/M/MNZ4MVkPmylGf6zfXXNKc
Q+aaS+aaS+bKCeaoc1XMnzTivy17xcpVK1ZC44oVKxDiapAMwhAAyGHqkYxQ7BzApySN1sQ+
5cDyRLeCRCxGdvQSSAeB+NWOOuE3Cq2BXzs6C0B+negQXoBPxsKkhilFv0E/4EOQp1BLLIZG
o8PQZz+o4By0DluREZ3EMtTsoGSwGV60DrXjW/DBaDnSosFoGqWPLUOl6Aw6Q/8PtNajteh+
tA3tRAewCQdxJW7Dp2NjYc4TeBk+x5yN7YN5ZBQArH6r4nIS+ozDy8CMyDBjFYzwKA7TK5mt
sVmxu2KtsbeQFVrGQf0CWAXMDr/D6G30PqWhztK76bPRI9HzsUmxFbF1MdAe5AdrWKni8TDM
sRsdValwBv0D1rkdf0s30fuZSmZizB+bCzPEQJt4kB/WMApNQVPRcrQK3QHPdaIP0Xn0A7qK
ZZyOc/BIPAXfAat5j5Kp4VQ1nU5X0h30WUZmAkwT8ytuceST6IqYIRYC+5oPGExGTWgpYLEO
3QkUJhTthPkRUMWOM2GsWrwb78NfUIiyU9lULnULVUM1UYupH2krPZmeQjcyW/mOaEZ0Z/SH
GB8bFftt7ElV+zFAKQE5UTJKRxkoFxWhMphtnIr7DDQLzUGLYPUtaBN6GG2HdZyA3x/g92f4
vYHeglVdQt/Bun6ElQmATXx1RbC+aXgWXoXX4w58HL+Gz+G/4vP4C/wDNYbaTu2nTlCXaIFe
RK+kt9L76bP0+/Sn8PuB7gEKyEw6M5Wd0MNGt0f/FP0m9gfYtQGA21y0GG1ED6F9sGOd6FV0
Gp1Df4F9+BJwuIS+xzQ2YglwcAAW+bgAD4ZfGa7CU3EdnocXAzZr8Ab8MG4HnDrwWcDpW4ql
HFQVtZV6mHqO+oD6FHBKp8tgLyoBr930NcClFH5lsCeLmY1MK7OHOcuuZL/mJH4j/ynIxln0
IjrZJyBquh/t5k8CnjthlzqAQvvRY8ABx9UdWwSezWnUDfjJeDlOxJVUEfoQe9ASyoXvw6dw
DZVCqfuIb6cFkBBynUVh/AZVz+5AV6nFeBxFAX+fo5JhpE3Awbuv/bOnnU7t+TC6kb6rZ3yk
nRWA/1aj+9Df6QcZGR1AdwHlMhEKDszLDeT4s7MyMwak+9JSlRSvR05OSnS7nA57gs1qMZsk
o0Gv02pEgedYhqYwyq5QKhs8IV9DiPEpo0f7SVlphIrGGyoaQh6oqry5T8hDnmuEppt6BqHn
nH49g/Gewes9seQpQSX+bE+F4gm9Ua54wvjWCbWQv79cqfOEutV8tZpnfGpBDwWvF57wVDjm
lXtCuMFTEapsmdcKttyfjY8FgYwafzY6BmRAWjJyCI1sXAt6H40kPSpCLqW8IuRUIA9tdFpF
4+zQ+Am1FeVur7fOnx3CI2cpM0NIGREyZvU+ro4c4keGuJEwtGd+CBaA7vMczH6ldWtYQjMb
snSzldmN02tDdCMMUREyZYXsSnnIfkeXw58dxs9Mrg2JI8MYTQbb7IqtP+hcXw6Grq9nxdbe
3p9B7xCVVtnY1FoZCjbcB7tAig2k1LgVStgRgPkJ0mQB8aXEzVhawwJPSFRGKPNaFzQA5V2t
ITRxtbfD5QoeA7XmqvC0Tq5VvKEyt1LXWJ540IpaJ64+5Ax6nDe3+LOPOdYN9QLhjvmH+4eT
dKjXsS6e/vPueP1fXiGpY92pTyAdM/E67TBBTbkFUA95ZnkAgVoF8B9Mbk2DUeuswUBiuOow
rHw+UKShVRoCiwqxaZLiaf0e/O8Gpfvrm2sae2u4NOl7RBrJll9nmxBu7MuHsrJCmZmw87BL
TbBZgFqpWlHoz24JuZVmyRNyg8VH42vhqbohASC210s27r4w+DpQCK2fUBsve9BMdwcKBrLq
QlQDaXmlr8U2hbSs72u5/niDAjx5mLiXyBYSfNf/jFKCpWLekBBO+F+am9R2OO1kjwkjcXzt
QYx/XRcGrzSMypOOwZmJnnGbP4zyCdPPL4f1Q6EgGyoyvZArzPZUAt0rgdp1nlZP6y2zWz2V
nnnA1kyamkJDU2tdAJY+qXY+3CfXekPBOvf1bFNd3RAYp4iMA49A99Y6GGFB7wiQqlWBCHQa
lD2GeCrjayfUhtaXu0PgG8KmgiC9AmR9BWQI2DqMBl/HFDBeO9/Ri3Mx4Dw4E9qHxEcBp3c9
DFHX2krGnET485XWVncrEf14GWSmf0WwtyKMSBciC2G8fjw8C4nidZMKxat4Aa26cphqaDb4
1r3CzbyBHgJAABTACYCdzBt4L8AfIe+Np6SMRgGcj7er+TmQvx9gD8BygLsAnu3Nt0O6C2A1
AHmOlKcBkP5XAch4DQAPAMAcyAowGMAD8DbAOmCa+DkawSmbA1uHQK/fpjITZNWLnF1oOLSS
iwXg4Kjxc5cA3AIK8D+atP9R01eh68v0S/VQNoAPJyETMiML+FI2lKD2sSMHeBEu5IZSIkoC
f0IGfL0oBSlQkwqQpvYbDF7eFVyK78Fh/BH4XOXUr6kwdYl+kP4dM5npYqezF7gW7n/4B+EI
VyncIaaKbRqD5inNVW2XbqyuU5+iDxkGGk4apxovwHgUeAOIXgy+LA1rrwiKPJeEGTaJpsJ4
d9AMJNQwfBKNXCLLJVHYKXTibIyRI6tGulxSHSmpka6QBJWVSJGSCLnl5WZgk5f3mrz04oiP
+uCR6ET8O0565FoiQZ9GVOwc8zpXCuvKRcXoteDAsYItwaMEAl6UN1BISfEGAgPMgpAycJCS
kZjozUgzUilezaA0Wps4y+0eWmle4gvj/KAue4n27wVLOOeQgiIVm+ruy5ErkRZTccDRjcq6
y0rKus3FAXOxuXizISdrM7v21GbDqVOnNkuGUyUlgKVj5OpgUWFReo5oYli9r4gpSEYDJF8y
zjRkJ6McMTuZKmQHgVdnykjGWTq4+TUBaAiIApJKpBJyVsDqgWEDXGkGrKSkFkppObiwoBTn
DwSHgONxKTUM55OcRYEtKyzwKSmczZpgTxAxSfMHFtHLZv2h+d3oNWyeOGnmgXmtncs68Eyj
yHUmVl68GHmtqWVS7dgGRw2PV0YXvvS7NSPuuWveLd+dwHzX3EPV9aGGh1ubzm6Ojh0YfM6a
Fxjx7/uiH9GfjNpXPry+eYK/fr4mosHf7XnpridyCO0xOhHdyuTC+cSEgsFMTsNpOSMn2TQ2
qUJbYayj6jgNMlnENEEypSGzcId+EuM0D17TS16Vqt3YXFycl4vrcSqiCgvMKM3GMZTNambs
TG70q+jG8+fBR7Sdi7594AD2n4tuJe71Bxcv4g+w3bzD8q/ove+9F733OxJEA3x2Aj4mFZ/y
YI6oEbWiUZRcGpdUpa0yTqWmcrXaWqNOEPWAjwR4mQGjO5DTvKgxjlPkZpwsDDLbrBRiC4tS
zYUFVGr6TmzDa86fj26MfnUO+59/Pvr2OW6xOfpF1HfxYtQX/cLUbv0O3/7ee/j2f1kgYrE3
WkOn4nSgT3rQhr1ohvYWVovHCuwsw3LBaR44pm9aqQtY7HI3EKKwlCpM8RUWFKlbboAxRo/x
19fOHD75joanozVrLKMWV88vqZjxm3VL/tgKa8Z/jJ2jRWyH05ozqOOakVa8jXbq+oYmC8rL
ZX8akaPmjGxoHDGisSHQMLJ8xozykQ1x2nlBjp4HOaJRWdBFYZwEwgrShd+maVBrmGJoF0s5
mTAed3C7I8tZI3VJn5tg85CjrKRaipiKN7M5WWulU3m5dgXn/+0F+sODAXJ0JaEcFUdmDeBo
RwOCNl2zmSeY2m4zis00bXQ6etGFgbql+B7cjDT9cwsY2X8hdNP1JVFx2sOcJtB9g4Mk5kao
b2528KzW3WyL78JsQbA5k3+aPdINywIEygCNn90Oyw2I3LQ1g3qR6b9FzPs/4YRGYZnZRNtV
3Zh5DNH45Q5qKR/GL8POsaATecopeLJVpigBRYgC1ZErhCls3kICzKZrJ5nSaydpe3t7dHd7
O9AWwxkWMYNB34poVHAAx6YLAs8jmkmnMIWENv4JPsS/wjP8AsqlZcRUjJyaEw/FZ4ir2+qu
elgv6FrQbnF9m2/y2kDdApynp0RWUdWRQ5y0I/Jte6SIyBjwyTjgEx96M3j3WP1Yx62OJuMd
+pVys2ez7mnhT74vfVrBKEh8Cq/43GmeMUwde6t+jnuO50WpQ/lQMmhZ1i4qtFan0yQly4ke
Da1PSJTlVLNGo5MTdRomgbaeD1oWmBOKTTQ+H0QLzHRxqqg28U7r3Xy+1zXAmW8oQ870W9fG
JehyNxiO6u4uk9leDBwP3m4Iuep6XN035kkj0d3ApMhUDLzLG0pKeMkAyhsvq0f1gwpBgapa
NUClggR6B9ptvQpWpkH/Im+Kb+elUxMfqV7w4Jy50Uv/wtQz7fuf2vD4HTNqGifGolejH09/
1vvS8rKWign3Txk69Mlvfv9N7vMj7m2Ysa4wMDR3x9eHo1FygsRoVKwJzopEvuSgkUZgCDWU
i8VOJr75IFlgAGF7QJYKvbZRTGk72WwKzYl9ytzGLAYr70Hng9NP2z7jL/M02sLsc70kfiAz
ehHLwWQ6DSygI1mbAKYfS2azbLZYEJIcycYKh6LV8BazJnkIrUWWBHOK2TI/QZaMq5rN2OxK
cfubOcw5vTXrVLLWVxOy1ldfLokAZQnF4oawhBC6WBX4zcLaU5g0kIq4EXQ5kxhR8CUx7jzk
FN2ZKJFNzkMu3pEJ5o1YuA0b0C2TVwfNsgdTHpxcxciUrQp7bOBdqYYQQQ+yIcvqVSsIytAM
2tCeYM83We2KjzbBpoCJUK3d6infzN768cM/vFC4UPIczzyZoJ815cBna8dP+8u1rb/+7spJ
nHdQS9E9X51dNx3syMeu6JXPntkXIrS8P3aJ+QXE3oh+eDE4Zgt7wP6u/Uu2m/+RvQoSdEg8
JVIMoSftThMsZkS7bVqHRULuITRv1NiAkFqHSi6XbLLIUsD4hJEyOpNzeknX68wACWEru0Gh
lPWSyQ5kAlfBleAiVEoQgSwuxpGH7bwtEzlZd14/KiUmYSoJu6vYRMpchZLM/0kl8ARUY0Fx
Skq6L10x5TsxEAcsFuFePGrqxdlbP9n2wwsFiyRPZ2fTlH3/XDd+2jl6pkqg6JuEQFxNz6Co
14XFz5/dC9QhPLoHeG0U6E8H2hmsma1dqX3YsR89rT3u4I4yHUKHdNRy2Po6/brwIf2hILIC
HiDoHAab7kmt1qCIvONJOGINobRaXTOM5XKZ/QHuZY7inM6c8TfyFtiPsuruYqm7LAK3OBMB
dRKNVlpg0qQ0K23OREYBbhYW6GPiDX1c1Msk9Wmw6lRwHRCwCBFXAwbvARyhQcyo4/v2Rq89
iMd8+fwf/vjYnMMzXzw7rOVxT1k7FvdF8fjhh+qa3l32aPSiqYjww3JYbxD4wQye8pHgiC7+
Ck+1Mp3in8X3ky6KrBxMBLmyWhCdkGixmsyGCo0RJSga3qxJBGEymmXJ5PI4/XcSAZJHFcIq
W8CnrXeoMhT3aVU2kLoIIxCB6eMEu5twgptx5iG76MxELjYxDzn4hL6V9slLUjKmknFiFZNE
WapwsuUmTgD91U9aTPkmxYmBIn2ysukmWTn+c4KCv/2xA//tJjm5K/YJMxb4wAZy8kJwXKVt
iq1TR29O2sPsEfbpjjBHhCOmswkfakWWwcUComyWBIfRIOvsCaMMRiPlBhJZFErreNJW0azD
OpdsfDLAlRFWSC68Wc10xS0/sUOREkIk+ENwjwtMhjOJNpt8TJrgM9NGoJIWhCZRTMhESRJr
AdHRgegk8W5CtSysutNE1aianfCIj7iXoEfMJpvXmgwSMwh74xLClHz82qMXH7j38iOvfdsT
bdzVdPiDiJPy39O87OmqBY9g++O/xa6d0a7o3wasfKXhdvyse8tTT8dl5FmwvfeCk2NHTcEk
UcKSVtJ5tB5dkVQpTZGOCKcEEZx2ncFKw8vEYLKNopChV0Iw0jBYTrBoLVbKOt5J5Tiky1IP
rPh1snrigcTlgZTMxEMmCtFrUgrz4+eBXl5PwsRO48d/+GH2uQN33fOb5rp7q/HxaAXd1F7w
93fudR/MHbGtY3R7D/EVgMejASYI9iMFIvE/Bn3PDOjiP0/+nme2MC+KHfbXxff934hfJX8l
f+URdUT1ZdMVgiUcuxrMdyQ46cRUBU7z2drUDGOFjxiSbGD8RCXBmJIqW+YbXbnOiow4/wdu
4v8uYpu7yKLAHIMyVAVA5X9Yrrq2wSDyA9OzkrxWGyN6vLI32Utzgi+LychDSbaUTGy1pIsZ
mSiTzc5DXmtiJhrA+zIxIjudpR6dMsmhKW5W/DmYysHZVYyfUqpwjnKTmBA7309O8k0Sx3MM
6M5CwhZFg8AF+F/kxmgaED1/9s9vjfvnoinbA4GUnxOjni+jn68Nbjsw70TRpKL8/M3N+Fc3
yBSGODRiSkHX2NHDwdxTPFCas8gCnWDHyDKE4+0GDZEgvb5Z26altC4nZZdxAPSo09GnPfvM
Cxwc48dloKyJWGCgZALoJK2oFbQ0Z/KZeWMe8KUFzAoIRmYvjYDOrI2xVLFWNqEK2RIY+gbT
W58PqkO1KfZkbDMppoIcOIxyvKm9c/w/ls3YKTvNnfKkvJmf3sLVRNwbHmysKPxlZ6SN2vzk
3BGdWyOriGxQaBe4N6+CbPAQlSgNWkyfaTGmfAzNcayPRxrhM0MYXuLruAusTF1ATmvTmbgr
1xXpuhwBmxkpUYG4v+CMFhKHFPeeiog043eiZ/ElPChyaaovferUdN9U+mR7T2k7e6mstBT+
SokNWw04/D+gM49GBr1whoHpUXx6mJa+gBhWxuPgLc7H4Ik5hTAecvDduHEiRJW+lr6+jgcR
wOtovBbtoARcz3bsuFoNWwn+HOznJtCRaeCVNbtpN+NOcSvZdDaTnZKtzOZnC7ONs6WFroXu
hcrC1JX8SmGlcaW0xrXGvUZZk7qR3yhsNG6UHuIfEh4yPiQ9zT8tHHAdUF52vay84fq76yvX
VddVJSvVraGZNO8QzjHEYACtwqUlJSUmWjSWMD4S1I02ecw4aMZLwY8L4w86EkcnkXr9aNHt
ScTBRLw0ESeShtFUGjQcGQ3M5Ks+huv6Qi8tkZKWK/XLlpWUtERawOmDXEvEAesnLhmcD8jB
zEQsFvqJPZIgHkE8jxtYBJgFLA7wyqjd1ZvKJ8zy1s8ePnrObl2qreCXpTuG2PNXFTL1MbR7
zZ2rSubcOeaOoz2HqWu3VaQ+Ho5so64+XNBxX+RXcd2qyohqdx7okxGTU6CtNhNICEQ7dBq9
TtZotc1im0iJLjtl65WRhP8uI2XdfTIi8ZKQZvRJvD4PG0RTXDqyeqXDbGFYC2OqYs2stQpZ
rDdLBwLxsBHx+BnhmPXU8F7RYOovb3hw/nM//odcTAM/owXWRc7C+4LTHqEeYx4THtEwp/Fp
6jRzmj3DnxHOaM5oz+jPGM5IZ0ynLaetpxNO27txN9vFd2l7cA/7L/5fWscgwaxwvE5BWqO/
WcSiy2nzN9OYdjpq5t7oYhEPFBSvqhoysV2vNcIdq84U5FS3yqDRZaIECm4SuFrYysANdGs8
HrUBg85kU5DqYiE4BqUPLLoeeaLmXop+gj2XvsGe6CffbAuFtj0SCoFQxWK4JtoRi0UPtl/4
89kLF87++QLxuaM1zC9g7cTHOhWccFh8RTxHvZPEtLIbHAccf3F8xX7Nf26/xgvgdSfGva3E
BIvVaQRvC7ws3sSBx6WVDM644+0xG2VJCpieMFEmp/yT5w1RQ/Xcoh7kyVn+v7hcxNvCxO/C
xNtS/a5+znefy8USlwvd7HKheohaqWoSYkSgksD1BkH4v/ve0RrOGB1wg/eN0VXQJ0Ggkwmt
CGaBcdBDOFWr1wgcpdEgSg8CQHFIo9XIoii4LJRJBmk2vxx3rHstA4nJEDcCWB4cKgD4U41t
3EgajAxrZPRVrIGVqpBRupHF+/jbDt5GXJivdk77tLWp6VDAPe9PM4CzW7fI0cUxYc+eyC9B
WDHaCzxdAPhm4NrgQSolgAI4QAUyhopDNUXJRfLsFHh/k3q78XZphXdFygplRepDlsfS96d3
msOWwxnviO9oPhM/01wWL2uSaZHWkKCdmCQmcxgbE4x2F8pCAxIG2EvQGFThqfD+Ak32TPYu
QvO18/XzDfONTXKT5w60Wrtat1q/2rDavtqxSl7laYWXvAfQMc8x72n9u7p39b4qIUU2aBgn
YzBp5MQU3r5rRsIqp2LlIe6dGNQwiFEGaO1HRkE45ujR5jSc5soChXk0qA2YsGk+cmbmPB83
UJfr46fi7pYu0I/gpnWVdUOkAZuAvOCs/uTYF7jSWYvLkpiL2HQ+F4sK3JKNUHSbnbmY8zG5
SEjV5IJtFTVJkpyLkmWjQT0B98aDVRkEt6YenL9BceeksCDdF6B86fEIYV98wp4gYwgCQ2BY
SdnbfHXa/WuSklYEN7xVNOiv3xx6IvxUy6YhxRvWPV9Z+fH37w599Zahvyj3ezwBV/6EivKZ
rR0F+0ZMKi1JTQ3klFVVLf3N8bj+bYA9Hc6ehPPfmqClFW1mH0Pb2OcQ6xQQ7RAT9GFcfEQj
iT6jJowfDWoSIKKD5nvABw7je4JGvVnW8RdkUEtOZ03fiQ/iCCWX60moU43tkyACcf/AZZEY
m9XHptkYcx6ycAl5KB4owL3OGgTBVRcgHpmKe+/M8LtbBq06OSv6BbZ34m+jxuDCWzZv8w+y
3RoK45Pt+GS0tD06fPPSginx9TwA6xkI39fY0IPBgrP8+xZKDpo41aLoQK7AqmhtFHzh9zLw
s8uu08tajSYg3ik+LtKiM6F38+vj/hbRLr0CBme6kl6/C2yK0SekEZuCiE3pXURc4PpsCkNs
Cu5vUzCIGon4k4VClCNZ9UNNzMDOWz9aMnN3EGxK7sxPq5j6a7u/b22dv/8HqjmyGrytY/dT
9xH584K+eB7WxqE9wYz1dBv9BP0lfZVmR1HTqHl4LrsXfJ3P2R/QFVYUWJGjIKTLMCgc2xoc
AA6RBz4sQLKZVLIcRzLgpbEMAx82cKBmIH7LcGwnDkK8Mhg0QpAGvvsJYQY7+fWPqpFgcsqN
dBP1Aqd5cNsI+8JrEogHb4a3JDkOkmSBwe0LtHlxvgjfg1Bc1P06vhNv7ozamfqerfTKa7vj
ewXhfCYM67FAjHFn39sthkciA7rB7NQ49W6zT8zQDzAU66v0EF3Es6hF2nm6VXg59StQBJvQ
Jryde8T4qvFL9kvuc8Pnxh/ZH7l/G/5tTIFPEo2VVCX9ruY97Qc6njGJEqPXURyv1bGYsxj0
NAKuZiQTx4t6A4MsS3V36ihdl0HWN/My15yqwxZ51FL46IdCXdgqvXu5vqW7vicS6XZE6uNq
lmhaZyAwLADqwV4Cf/GjvnoSzafzLfZBlviNVuh0hafPHn1+QaK749kzin3hA0d+924KK3cy
9ZHaXbuovfH7td3Um7t2RnLJXg8G2uwE2mjR6eD9RPvSwgA2g8vgM4Vifg41l57LrKBXMNup
fdQ+9jnuOT7MHueO8WfYv7H/1P6bv6J1KWwhO5eaw95DbWSfYd+jLggi7DStgfVDIALxjKhF
PK3h4N2lbMakRSObRZHhOY4BztCIIryx02jgzATMA36H/vcYY6eu15skbwbq4dUABGLhzYDq
Par3zWy1Gnrt5QcjXMSZxPVeBZhB/VNA4b+HX4jOuYgV7H47uga/8U30AHw5ZY1uwb+MRCNP
4xfJipEnmqPyuxn9Ndi2BT6Ceg69RzPoFlSHtqBWeiuzhd1i3o62049yj/LP0QeY59gwfYw5
xp5hzrAfMh+yNhEcJVUICAFpymxmdGZDrxwgiaY4M8PIZhbkgUa0uVcYzBoIbRnNsG4KFl7G
jmNnsEvZB1iWdVl18CoGOy3VcYnoqi+WPq+P06CaqAhVJCD8TGTCAEIhEKmAd4gkbrpZgkBB
Cbn3HvPr0/oEhBxKIZRXigdRRZGeN+BDqdrj0XFb/n1qysjqylu3rnT4mdyeTrry2nfRF/5m
3OOo7BhO6PM2vAcbB2evIeie4Aj/qwU59/oNr/L6ew0OC88yBpRUVDAgjfEno7QMvmCQM2lz
crIsG7L98L2ROSn5ZIbBfzZj0JKUFGaJc0JGBhwoPjk0tPV3jix4JyFd7iZnATgeXSZvacvi
rw3A+qnuRdz6gbNhh+gFhm9B1DssKxmCUEb1HeVQbFM8YL7KaOJFZuFCOHIXFgRoYtG8+Tb1
hSZYM5vVgCmlflqW1Wmd8XD7zujFXUazScev3VVXt+NOXmcyG3dh8872hxqgQ9Y0ak3ebbOC
xdOX1/uHTWkPLR1aPn5aYZpSv7H9rsbUlIJp4yuGLjm4Y0ppdv3y6cXBWbfF9cy66Fb6qkqn
TcFRN9IpTh+UHKdXEl/AoDSzM3kzOXL5wUhn+83JSSfNN9DIbz5rcA7deCDuIwCN+ij1fyJT
DgSpynAfYTxABSNNXuwSopE3vep7CM4LUSCVaBiIVoqp5+qnZVriZMLmx6WbySQ9Hr24s/3h
GVanJfNmMu04uKQEyAQHtukb2+9uVFIKCZmW/r79BjKRLxrgih0iMYufuXxQR8O7Jy18E2EE
f9UMUcJk5IEvF4vQCFSOKlAlnI5Hg2hWgfs2Fr5jHI8mwHfzk9TvGaehWhDZW9Ev0HT4kqJB
HR/DGGCP4OLgvzVQzfjqqZUTs6qXLmmctZTwdt/1BGQOAJwAeB2A/N/E1wA90Am+lsDweQDO
BigBGAswHWARwBqArQA7AA4AnAB4HeAjgK8BeiB4oQNIBMgGKAEYCzAdYBHAGoCtADsADgCc
AHgd4COAr2O9F+CBrudBX/UrE6rd2D6gXzmjXzm7X1l9/X7D+IF+7UP6lYf2Kw/rV67sV57U
rzyjX7mxX3lmv/KsfuXZ/cpN/cpz+pXn9ivP61ee36+8qF9Zfe18A32W9GsHRrqJ/s39ysv7
leEr7Zv6q/+Lc8P4asjrhnJLv/7klHTjft/erwxxqpvaf9WvvJaU/z9aPtGSCmVuZHN0cmVh
bQplbmRvYmoKMTE1IDAgb2JqCjkzOTQKZW5kb2JqCjE2IDAgb2JqCjw8IC9UeXBlIC9Gb250
IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0ZVSEdURStDb3VyaWVyLUJvbGQgL0Zv
bnREZXNjcmlwdG9yCjExNiAwIFIgL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nIC9GaXJz
dENoYXIgNjEgL0xhc3RDaGFyIDExOSAvV2lkdGhzIFsKNjAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDYwMAow
IDYwMCAwIDAgMCA2MDAgMCAwIDYwMCAwIDAgMCA2MDAgMCAwIDYwMCA2MDAgMCA2MDAgNjAw
IDYwMCA2MDAgNjAwIDYwMCBdCj4+CmVuZG9iagoxMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnRE
ZXNjcmlwdG9yIC9Gb250TmFtZSAvRlVIR1RFK0NvdXJpZXItQm9sZCAvRmxhZ3MgMzIgL0Zv
bnRCQm94ClstNjU2IC00MDMgMTA3NCAxMTE5XSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDc1
NCAvRGVzY2VudCAtMjQ2IC9DYXBIZWlnaHQKNTk1IC9TdGVtViAxMjYgL1hIZWlnaHQgNDYy
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
IG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9TQkda
VEErSGVsdmV0aWNhLUJvbGQgL0ZvbnREZXNjcmlwdG9yCjExOSAwIFIgL0VuY29kaW5nIC9N
YWNSb21hbkVuY29kaW5nIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDIyMiAvV2lkdGhzIFsK
Mjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyNzggMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgNjExIDAgNzIyCjAgNzIyIDcyMiAwIDAgMCA3MjIgMjc4IDAgMCAwIDgz
MyAwIDc3OCA2NjcgNzc4IDcyMiA2NjcgMCAwIDAgOTQ0IDAgMCAwIDAKMCAwIDAgMCAwIDU1
NiA2MTEgNTU2IDYxMSA1NTYgMzMzIDYxMSA2MTEgMjc4IDAgNTU2IDI3OCA4ODkgNjExIDYx
MSA2MTEgNjExCjM4OSA1NTYgMzMzIDYxMSA1NTYgNzc4IDU1NiA1NTYgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCA2MTEgXSA+PgplbmRvYmoKMTE5IDAgb2JqCjw8
IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL1NCR1pUQStIZWx2ZXRpY2EtQm9s
ZCAvRmxhZ3MgMzIgL0ZvbnRCQm94ClstMTAxOCAtNDgxIDE0MzYgMTE1OV0gL0l0YWxpY0Fu
Z2xlIDAgL0FzY2VudCA3NzAgL0Rlc2NlbnQgLTIzMCAvQ2FwSGVpZ2h0CjcyMCAvU3RlbVYg
MTQ5IC9YSGVpZ2h0IDUzMiAvU3RlbUggMTI0IC9BdmdXaWR0aCA2MjEgL01heFdpZHRoIDE1
MDAgL0ZvbnRGaWxlMgoxMjAgMCBSID4+CmVuZG9iagoxMjAgMCBvYmoKPDwgL0xlbmd0aCAx
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
QU1XVUgrQ291cmllciAvRm9udERlc2NyaXB0b3IKMTIyIDAgUiAvRW5jb2RpbmcgL01hY1Jv
bWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciA1OCAvTGFzdENoYXIgMTIxIC9XaWR0aHMgWwo2MDAg
MCA2MDAgNjAwIDYwMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjAwIDAgMCAwIDAg
MCAwIDYwMCA2MDAgMCAwCjAgMCAwIDAgMCAwIDAgNjAwIDAgNjAwIDYwMCA2MDAgNjAwIDYw
MCA2MDAgMCA2MDAgNjAwIDAgMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDAgNjAwIDYwMCA2MDAg
NjAwIDYwMCA2MDAgNjAwIDYwMCBdID4+CmVuZG9iagoxMjIgMCBvYmoKPDwgL1R5cGUgL0Zv
bnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQkFNV1VIK0NvdXJpZXIgL0ZsYWdzIDMyIC9Gb250
QkJveCBbLTY1NSAtNDA5IDEwNjMgMTA5MF0KL0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA3NTQg
L0Rlc2NlbnQgLTI0NiAvQ2FwSGVpZ2h0IDU5NSAvU3RlbVYgNzYgL1hIZWlnaHQKNDYyIC9T
dGVtSCA2NyAvTWF4V2lkdGggODIzIC9Gb250RmlsZTIgMTIzIDAgUiA+PgplbmRvYmoKMTIz
IDAgb2JqCjw8IC9MZW5ndGggMTI0IDAgUiAvTGVuZ3RoMSAxMzA2OCAvRmlsdGVyIC9GbGF0
ZURlY29kZSA+PgpzdHJlYW0KeAGlmwtwHNWZ70/PtEcay3qMZqSxPaN5aKanZ0ZjjTR6jGzZ
imXktyEGAkiEgG38ZDFgm4d9c1nsYomxjPNYdgETyKVYIEARIoyvkWVSIbAQuBsnTmVD8C2T
bKqWBHZZipsENg97fH9f98xoJG9tbW1U9Z8+53T36XO+7/995ztft27dedsmVav2Kqdae/X6
WzYr669jTCnHNddvX3+LXXee5fjQ9bffGrHr2sccQ5tv2bLdrjsalNJ2bblxT/F+/R+Vartm
66b1G+3zSu7v3UqDXde6Oca3br91t113/hXH3TfefH3xvP431Ae2r99dfL46Qz1y0/rtm+zr
O74q9Vtu3nVrsd7Bcd0tOzcVr9eGqT+gNH5D2teUW/0PNcOqKTWTmSlnkvlqVgvXPPzVj7uu
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
CbwQ+fyI45xXmrDry5jkAfhxkXaQzz/hxgAYapiMwYK2DoPoMIgOg+gwiA6D6DCIDoPoMIgO
g+gwiA6D6DCIDoMlHQbl/Y2lQyUlS5w6AtJ5jrx9sd/oTJCBsM9ajByAkQMlRg7AyAEYOQAj
B2DkAIwcgJEDMHIARg7AyAEYOQAjB2DkgMVICaTyMLKVet56qrTkeHKOt0pLyq2SxVpaZswF
cVxK+MAeorxtueCVUDFfZVHown2MxDoeizmlFbWUzO1gKJ1AEu5dHLvBIFgCcwx7gS3vTEo+
ovzNkz8/hVPiRexbinTq10ztYEuur7On8GEo2dvv04YKr9YtmNe14mRvZ767+mcnm/p6O3o1
PWzm8sHCL7VrZybSHat/0JPrSPedPWS0xluTIaNVW6P1hK3EUmv8Jz+JxsyYGTZihZ8WnjU4
3xqPJj6FQ/PZ1x6CQ1ltDRaIXg0gWUDJX/tsH2Og0WLYOJ/CSjACtoE94AA4DJ4Bx8Fb4DT4
APwBSNho0GPG8jE+K1lH37QEbH4G4GcAfgbgZwB+BuBnAH4G4GcAfgbgZwB+BuBnAH4GSvwM
wLuAxc9wcVUQLtpPmOA1kFF8loRanWWeXLAYJIUnpJGm84T9bik8q9x92ZSwVwR5XpX1mSSv
n5CYEOQ/2p56p3iKyYWjSIoqR6BtZXfKLHRlDdM8/Xjha9YC4u+zFpB6zWcu7U7M//eUmek7
r9iOxSN8iqF9xvEjWeatJeS0w+RrNpYQHITkK6w/vuPhY53/4C9EWwuxSgQhdeAy+zCqIbUU
PSwnil9J+nWN+iwfs1+Kj7lcXYFuriKyH1FXq8/LF3H8aYRwmlVyseirJYMXX3XFiraLbr5t
57ZNO4tn5PReIK/JHgHPAd6VqR+AM+BDcJauZoEgyICFYA24BtwI/ie4DzwCngMvgx+AM+BD
cJbJzgJBkAELwZrzxT/6V+WyRmJ6ap1rp5xfNK0+MK1+8bT656bVr5hWv25aff20+oZp9eun
1XmXNmV81v9VVMxn87Tz5IinXL9tWv3GaXXr/0Iq+rtp2vmbp9Wt/9uouH7ntPO7ptWt//uo
uP62aectblaclxRhpb5INEyp75H6/wfrIYKjCmVuZHN0cmVhbQplbmRvYmoKMTI0IDAgb2Jq
Cjc1NjkKZW5kb2JqCjEyNSAwIG9iagooc3dhcF9oYXNoKQplbmRvYmoKMTI2IDAgb2JqCihN
YWMgT1MgWCAxMC4xMS4yIFF1YXJ0eiBQREZDb250ZXh0KQplbmRvYmoKMTI3IDAgb2JqCihN
YWNEb3duKQplbmRvYmoKMTI4IDAgb2JqCihEOjIwMTYwMTEyMjI0NjQ1WjAwJzAwJykKZW5k
b2JqCjEyOSAwIG9iagooKQplbmRvYmoKMTMwIDAgb2JqClsgXQplbmRvYmoKMSAwIG9iago8
PCAvVGl0bGUgMTI1IDAgUiAvUHJvZHVjZXIgMTI2IDAgUiAvQ3JlYXRvciAxMjcgMCBSIC9D
cmVhdGlvbkRhdGUgMTI4IDAgUgovTW9kRGF0ZSAxMjggMCBSIC9LZXl3b3JkcyAxMjkgMCBS
IC9BQVBMOktleXdvcmRzIDEzMCAwIFIgPj4KZW5kb2JqCnhyZWYKMCAxMzEKMDAwMDAwMDAw
MCA2NTUzNSBmIAowMDAwMTA3NTU5IDAwMDAwIG4gCjAwMDAwMDc0MzUgMDAwMDAgbiAKMDAw
MDA0NTQyOCAwMDAwMCBuIAowMDAwMDAwMDIyIDAwMDAwIG4gCjAwMDAwMDc0MTUgMDAwMDAg
biAKMDAwMDAwNzU1NCAwMDAwMCBuIAowMDAwMDEwNDcwIDAwMDAwIG4gCjAwMDAwNTY0NTEg
MDAwMDAgbiAKMDAwMDA5OTA5MCAwMDAwMCBuIAowMDAwMDA3Njg2IDAwMDAwIG4gCjAwMDAw
NTA4NjUgMDAwMDAgbiAKMDAwMDA1MDU5NiAwMDAwMCBuIAowMDAwMDUwMzMwIDAwMDAwIG4g
CjAwMDAwNTAwNjggMDAwMDAgbiAKMDAwMDA4ODEyNCAwMDAwMCBuIAowMDAwMDgzOTQ3IDAw
MDAwIG4gCjAwMDAwMDc3MzQgMDAwMDAgbiAKMDAwMDAxMDQ0OSAwMDAwMCBuIAowMDAwMDE5
OTUzIDAwMDAwIG4gCjAwMDAwMTA1MDYgMDAwMDAgbiAKMDAwMDAxOTkzMiAwMDAwMCBuIAow
MDAwMDIwMDc1IDAwMDAwIG4gCjAwMDAwNzM3NjAgMDAwMDAgbiAKMDAwMDAyMDI0OSAwMDAw
MCBuIAowMDAwMDQ5ODA3IDAwMDAwIG4gCjAwMDAwNDk1NDYgMDAwMDAgbiAKMDAwMDAyMDI4
MyAwMDAwMCBuIAowMDAwMDIwMzMyIDAwMDAwIG4gCjAwMDAwMjc1NDYgMDAwMDAgbiAKMDAw
MDAyMDM3NyAwMDAwMCBuIAowMDAwMDI3NTI1IDAwMDAwIG4gCjAwMDAwMjc2NTMgMDAwMDAg
biAKMDAwMDA1MTA5NyAwMDAwMCBuIAowMDAwMDM0Mzk4IDAwMDAwIG4gCjAwMDAwMjc4NTEg
MDAwMDAgbiAKMDAwMDAzNDM3NyAwMDAwMCBuIAowMDAwMDM0NTIwIDAwMDAwIG4gCjAwMDAw
MzQ3MDYgMDAwMDAgbiAKMDAwMDA0OTI4MSAwMDAwMCBuIAowMDAwMDQ5MDE5IDAwMDAwIG4g
CjAwMDAwNDI2NjIgMDAwMDAgbiAKMDAwMDAzNDc0MCAwMDAwMCBuIAowMDAwMDQyNjQxIDAw
MDAwIG4gCjAwMDAwNDI3ODQgMDAwMDAgbiAKMDAwMDA0MjkxNyAwMDAwMCBuIAowMDAwMDQ4
NzU3IDAwMDAwIG4gCjAwMDAwNDg0OTUgMDAwMDAgbiAKMDAwMDA0ODIzNCAwMDAwMCBuIAow
MDAwMDQ3OTcyIDAwMDAwIG4gCjAwMDAwNDc3MTAgMDAwMDAgbiAKMDAwMDA0NzQ0OSAwMDAw
MCBuIAowMDAwMDQ1MTI3IDAwMDAwIG4gCjAwMDAwNDI5NzkgMDAwMDAgbiAKMDAwMDA0NTEw
NiAwMDAwMCBuIAowMDAwMDQ1MjQ5IDAwMDAwIG4gCjAwMDAwNDUzNTkgMDAwMDAgbiAKMDAw
MDA0NzE4OCAwMDAwMCBuIAowMDAwMDQ2OTI2IDAwMDAwIG4gCjAwMDAwNDY2NjQgMDAwMDAg
biAKMDAwMDA0NjQwMiAwMDAwMCBuIAowMDAwMDQ2MTQwIDAwMDAwIG4gCjAwMDAwNDU4NzUg
MDAwMDAgbiAKMDAwMDA0NTYxMCAwMDAwMCBuIAowMDAwMDQ1NTQ2IDAwMDAwIG4gCjAwMDAw
NDU3MzIgMDAwMDAgbiAKMDAwMDA0NTc4OCAwMDAwMCBuIAowMDAwMDQ1OTk3IDAwMDAwIG4g
CjAwMDAwNDYwNTMgMDAwMDAgbiAKMDAwMDA0NjI2MSAwMDAwMCBuIAowMDAwMDQ2MzE3IDAw
MDAwIG4gCjAwMDAwNDY1MjQgMDAwMDAgbiAKMDAwMDA0NjU4MCAwMDAwMCBuIAowMDAwMDQ2
Nzg2IDAwMDAwIG4gCjAwMDAwNDY4NDIgMDAwMDAgbiAKMDAwMDA0NzA0OCAwMDAwMCBuIAow
MDAwMDQ3MTA0IDAwMDAwIG4gCjAwMDAwNDczMDkgMDAwMDAgbiAKMDAwMDA0NzM2NSAwMDAw
MCBuIAowMDAwMDQ3NTcwIDAwMDAwIG4gCjAwMDAwNDc2MjYgMDAwMDAgbiAKMDAwMDA0Nzgz
MiAwMDAwMCBuIAowMDAwMDQ3ODg4IDAwMDAwIG4gCjAwMDAwNDgwOTQgMDAwMDAgbiAKMDAw
MDA0ODE1MCAwMDAwMCBuIAowMDAwMDQ4MzU1IDAwMDAwIG4gCjAwMDAwNDg0MTEgMDAwMDAg
biAKMDAwMDA0ODYxNyAwMDAwMCBuIAowMDAwMDQ4NjczIDAwMDAwIG4gCjAwMDAwNDg4Nzgg
MDAwMDAgbiAKMDAwMDA0ODkzNCAwMDAwMCBuIAowMDAwMDQ5MTQxIDAwMDAwIG4gCjAwMDAw
NDkxOTcgMDAwMDAgbiAKMDAwMDA0OTQwMyAwMDAwMCBuIAowMDAwMDQ5NDU5IDAwMDAwIG4g
CjAwMDAwNDk2NjcgMDAwMDAgbiAKMDAwMDA0OTcyMyAwMDAwMCBuIAowMDAwMDQ5OTI4IDAw
MDAwIG4gCjAwMDAwNDk5ODQgMDAwMDAgbiAKMDAwMDA1MDE4OCAwMDAwMCBuIAowMDAwMDUw
MjQ1IDAwMDAwIG4gCjAwMDAwNTA0NTMgMDAwMDAgbiAKMDAwMDA1MDUxMSAwMDAwMCBuIAow
MDAwMDUwNzE5IDAwMDAwIG4gCjAwMDAwNTA3NzcgMDAwMDAgbiAKMDAwMDA1MDk4OCAwMDAw
MCBuIAowMDAwMDUxMDQ2IDAwMDAwIG4gCjAwMDAwNTEzODQgMDAwMDAgbiAKMDAwMDA1MTY0
NiAwMDAwMCBuIAowMDAwMDU2NDI5IDAwMDAwIG4gCjAwMDAwNTcxNzAgMDAwMDAgbiAKMDAw
MDA1NzQyMiAwMDAwMCBuIAowMDAwMDczNzM3IDAwMDAwIG4gCjAwMDAwNzQxOTIgMDAwMDAg
biAKMDAwMDA3NDQzOCAwMDAwMCBuIAowMDAwMDgzOTI1IDAwMDAwIG4gCjAwMDAwODQyNjkg
MDAwMDAgbiAKMDAwMDA4NDUxMSAwMDAwMCBuIAowMDAwMDg4MTAyIDAwMDAwIG4gCjAwMDAw
ODg3NjQgMDAwMDAgbiAKMDAwMDA4OTAyNCAwMDAwMCBuIAowMDAwMDk5MDY4IDAwMDAwIG4g
CjAwMDAwOTk0NDYgMDAwMDAgbiAKMDAwMDA5OTY4MSAwMDAwMCBuIAowMDAwMTA3MzQzIDAw
MDAwIG4gCjAwMDAxMDczNjUgMDAwMDAgbiAKMDAwMDEwNzM5NCAwMDAwMCBuIAowMDAwMTA3
NDQ4IDAwMDAwIG4gCjAwMDAxMDc0NzUgMDAwMDAgbiAKMDAwMDEwNzUxOCAwMDAwMCBuIAow
MDAwMTA3NTM4IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMTMxIC9Sb290IDY0IDAgUiAv
SW5mbyAxIDAgUiAvSUQgWyA8MmZjNmRmN2EzMmNkMmI0MGIxMDcwYTMyNTEyYjdkMjA+Cjwy
ZmM2ZGY3YTMyY2QyYjQwYjEwNzBhMzI1MTJiN2QyMD4gXSA+PgpzdGFydHhyZWYKMTA3NzEw
CiUlRU9GCg==
--------------000506050109010309010905--
.
Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Tue, 12 Jan 2016 18:54:44 -0500
Raw View
On Jan 12, 2016, at 5:49 PM, Vicente J. Botet Escriba <vicente.botet@wanado=
o.fr> wrote:
>=20
> Hi,=20
>=20
> I've been working on a proposal (see attached document)
>=20
> Default swap/hash_value
> Defining swap and hash_value P0029R0 as well as comparison operators, as =
proposed in N4475, for simple classes is tedious, repetitive, slightly erro=
r-prone, and easily automated.=20
>=20
> I propose to (implicitly) supply default versions of these two operations=
, if needed. The meaning swap is to swap each member, and the meaning of ha=
sh_value is to combine the members using hash_combine.=20
>=20
> If the simple defaults are unsuitable for a class, a programmer can, as e=
ver, define more suitable ones or suppress the defaults. The proposal is to=
add the operations as an integral part of C++ (like =3D), rather than as a=
library feature.=20
>=20
> The proposal follows the same approach as Default comparison as in N4475,=
that is, having default generated code for these basic operations only whe=
n needed and possible would makes the language simpler.=20
>=20
>=20
> Any comments are welcome,
For the hash part: How does one switch to an alternate hash algorithm for =
type T without having to revisit the code for every base and member of T? =
This is the most important part of both http://www.open-std.org/jtc1/sc22/w=
g21/docs/papers/2015/p0029r0.html and http://www.open-std.org/jtc1/sc22/wg2=
1/docs/papers/2014/n3980.html. If the std ropes people/programs into a sin=
gle hash algorithm (as it does today), then all of that code is vulnerable =
to attack.
Only by allowing coders to change the hash algorithm for type T with O(1) e=
ffort can C++ ever hope to stay ahead of the arms race in software security=
.. The C++ committee itself is too slow and cumbersome (by at least 2 order=
s of magnitude) to supply (or even suggest) the best hashing algorithm for =
code that must hash values from untrusted input.
Howard
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Wed, 13 Jan 2016 01:05:01 +0100
Raw View
Le 13/01/2016 00:54, Howard Hinnant a =C3=A9crit :
> On Jan 12, 2016, at 5:49 PM, Vicente J. Botet Escriba <vicente.botet@wana=
doo.fr> wrote:
>> Hi,
>>
>> I've been working on a proposal (see attached document)
>>
>> Default swap/hash_value
>> Defining swap and hash_value P0029R0 as well as comparison operators, as=
proposed in N4475, for simple classes is tedious, repetitive, slightly err=
or-prone, and easily automated.
>>
>> I propose to (implicitly) supply default versions of these two operation=
s, if needed. The meaning swap is to swap each member, and the meaning of h=
ash_value is to combine the members using hash_combine.
>>
>> If the simple defaults are unsuitable for a class, a programmer can, as =
ever, define more suitable ones or suppress the defaults. The proposal is t=
o add the operations as an integral part of C++ (like =3D), rather than as =
a library feature.
>>
>> The proposal follows the same approach as Default comparison as in N4475=
, that is, having default generated code for these basic operations only wh=
en needed and possible would makes the language simpler.
>>
>>
>> Any comments are welcome,
>
> For the hash part: How does one switch to an alternate hash algorithm fo=
r type T without having to revisit the code for every base and member of T?=
This is the most important part of both http://www.open-std.org/jtc1/sc22=
/wg21/docs/papers/2015/p0029r0.html and http://www.open-std.org/jtc1/sc22/w=
g21/docs/papers/2014/n3980.html. If the std ropes people/programs into a s=
ingle hash algorithm (as it does today), then all of that code is vulnerabl=
e to attack.
>
> Only by allowing coders to change the hash algorithm for type T with O(1)=
effort can C++ ever hope to stay ahead of the arms race in software securi=
ty. The C++ committee itself is too slow and cumbersome (by at least 2 ord=
ers of magnitude) to supply (or even suggest) the best hashing algorithm fo=
r code that must hash values from untrusted input.
>
>
Hi Howard,
I understand your concern, and I'm taking this in account as I'm=20
suggesting the generation of hash_value as defined in P0029R0. What am I=20
missing?
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Tue, 12 Jan 2016 19:48:08 -0500
Raw View
On Jan 12, 2016, at 7:05 PM, Vicente J. Botet Escriba <vicente.botet@wanadoo.fr> wrote:
>
> I understand your concern, and I'm taking this in account as I'm suggesting the generation of hash_value as defined in P0029R0.
Thanks.
> What am I missing?
>
P0029R0 was poorly written in that it did not emphasize this capability, even though it did include it. In contrast, this was the entire point of N3980.
In P0029R0-speak, std::hash_code *is* a hash algorithm. It is just one hash algorithm. It is the hash algorithm supplied by the std::lib. A type that is inspired only to operate with this single std::lib-supplied algorithm implements:
std::hash_code hash_value(std::hash_code h, const Foo& foo)
In contrast, (and still according to P0029R0), a type that wants to be hashable by *any* hash algorithm *instead* implements:
template <typename H>
H hash_value(H h, const Foo& foo);
The hash algorithm now is represented by the generic template parameter H.
In 3980-speak, this was spelled:
template <class HashAlgorithm>
void hash_append(HashAlgorithm& h, T const& t);
But the idea was similar.
Howard
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Wed, 13 Jan 2016 09:13:36 +0100
Raw View
Le 13/01/2016 01:48, Howard Hinnant a =C3=A9crit :
> On Jan 12, 2016, at 7:05 PM, Vicente J. Botet Escriba <vicente.botet@wana=
doo.fr> wrote:
>> I understand your concern, and I'm taking this in account as I'm suggest=
ing the generation of hash_value as defined in P0029R0.
> Thanks.
>
>> What am I missing?
>>
> P0029R0 was poorly written in that it did not emphasize this capability, =
even though it did include it. In contrast, this was the entire point of N=
3980.
>
> In P0029R0-speak, std::hash_code *is* a hash algorithm. It is just one h=
ash algorithm. It is the hash algorithm supplied by the std::lib. A type =
that is inspired only to operate with this single std::lib-supplied algorit=
hm implements:
>
> std::hash_code hash_value(std::hash_code h, const Foo& foo)
>
> In contrast, (and still according to P0029R0), a type that wants to be ha=
shable by *any* hash algorithm *instead* implements:
>
> template <typename H>
> H hash_value(H h, const Foo& foo);
>
> The hash algorithm now is represented by the generic template parameter H=
..
>
> In 3980-speak, this was spelled:
>
> template <class HashAlgorithm>
> void hash_append(HashAlgorithm& h, T const& t);
>
> But the idea was similar.
>
>
I'll update the draft to signal that the proposed generation would need=20
to be adapted to the final composable hashing proposal and change the=20
example to make use of a template parameter H. What I'm interested in is=20
in knowing if the committee would be or not for this default definition.
I've some additional concerns about the possible generation of=20
specialization of is_uniquely_represented<T>. I would like it to be=20
generated the specialization when possible but while multiple definition=20
of hash_value could be check at link time, I believe that multiple=20
specializations of is_uniquely_represented<T> would result in ODR, which=20
would be a showstopper. So at the end, it would be the responsibility of=20
the developer of class C to add a specialization of=20
is_uniquely_represented<T>. What do you think about this point?
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Wed, 13 Jan 2016 11:09:41 -0500
Raw View
On Jan 13, 2016, at 3:13 AM, Vicente J. Botet Escriba <vicente.botet@wanado=
o.fr> wrote:
>=20
> I've some additional concerns about the possible generation of specializa=
tion of is_uniquely_represented<T>. I would like it to be generated the spe=
cialization when possible but while multiple definition of hash_value could=
be check at link time, I believe that multiple specializations of is_uniqu=
ely_represented<T> would result in ODR, which would be a showstopper. So at=
the end, it would be the responsibility of the developer of class C to add=
a specialization of is_uniquely_represented<T>. What do you think about th=
is point?
I believe you are correct that it will be necessary for the author of C to =
specialize is_uniquely_represented<C>. There are semantics to this propert=
y that do not show up in the C++ type system. For example the hashing of a=
std::vector should never include the vector=E2=80=99s capacity(). And the=
hashing of an IEEE floating point should hash -0. and 0. to the same value=
(despite the different bit layouts). C may have similar rules on how it m=
ust be hashed and only the author of C can know this.
In the case that is_uniquely_represented<C> answers true, I believe it is a=
simple library function to automate hash_append/hash_value. Here is an up=
dated N3980 implementation of such a function:
https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#L203=
-L212
If something is uniquely represented, you can ship its bytes off to the has=
h algorithm without concern about how its bases and members are laid out. =
Not only is this easier than dealing with the bases and members individuall=
y, it is also more efficient for most modern hash algorithms. Hash algorit=
hms like to see as many bytes as possible at once for best performance. Th=
is leads to less buffering and more bit crunching within the algorithm.
Howard
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Wed, 13 Jan 2016 23:13:30 +0100
Raw View
This is a multi-part message in MIME format.
--------------000407020207060105000304
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
Le 13/01/2016 17:09, Howard Hinnant a =C3=A9crit :
> On Jan 13, 2016, at 3:13 AM, Vicente J. Botet Escriba <vicente.botet@wana=
doo.fr> wrote:
>> I've some additional concerns about the possible generation of specializ=
ation of is_uniquely_represented<T>. I would like it to be generated the sp=
ecialization when possible but while multiple definition of hash_value coul=
d be check at link time, I believe that multiple specializations of is_uniq=
uely_represented<T> would result in ODR, which would be a showstopper. So a=
t the end, it would be the responsibility of the developer of class C to ad=
d a specialization of is_uniquely_represented<T>. What do you think about t=
his point?
> I believe you are correct that it will be necessary for the author of C t=
o specialize is_uniquely_represented<C>. There are semantics to this prope=
rty that do not show up in the C++ type system. For example the hashing of=
a std::vector should never include the vector=E2=80=99s capacity(). And t=
he hashing of an IEEE floating point should hash -0. and 0. to the same val=
ue (despite the different bit layouts). C may have similar rules on how it=
must be hashed and only the author of C can know this.
The idea is to restrict to classes for which the operator=3D=3D is=20
generated. Classes like vector would define its own operator=3D=3D and so=
=20
the hash automatic generation would be inhibited. If=20
is_uniquely_represented is false on IEEE floating point, classes=20
containing those as data members should be inhibited also. I believe=20
that in these cases is_uniquely_represented should not be specialized=20
neither.
Given
|template <class T, class U> struct is_uniquely_represented<std::pair<T,=20
U>> : public std::bool_constant<is_uniquely_represented<T>::value &&=20
is_uniquely_represented<U>::value && sizeof(T) + sizeof(U) =3D=3D=20
sizeof(std::pair<T, U>)> { };|
the following should be correct
|static_assert(not is_uniquely_represented<std::pair<float, int>>::value,=
=20
"");|
>
> In the case that is_uniquely_represented<C> answers true, I believe it is=
a simple library function to automate hash_append/hash_value. Here is an =
updated N3980 implementation of such a function:
>
> https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#L2=
03-L212
>
> If something is uniquely represented, you can ship its bytes off to the h=
ash algorithm without concern about how its bases and members are laid out.=
Not only is this easier than dealing with the bases and members individua=
lly, it is also more efficient for most modern hash algorithms. Hash algor=
ithms like to see as many bytes as possible at once for best performance. =
This leads to less buffering and more bit crunching within the algorithm.
>
>
I understand the optimization advantage of is_uniquely_represented.=20
Thanks for your clear paper.
I believe however that we can identify a good subset of simple classes=20
that satisfy the semantics of is_uniquely_represented.
My concern is if the default specialization of the trait for these=20
subset could be in conflict with a late user specialization or a=20
specialization in another translation unit
Could we require that the same user specialization must appear on all=20
the translation units that see the C declaration and before the need for=20
the trait appears?
After some thoughts I believe that this seems acceptable, as otherwise=20
the traits could take different values in different parts of the program=20
violating the ODR, independently of whether there is a default=20
specialization or not.
It is worth doing it for this subset? This should depend on how many=20
classes belong to this subset. E.g. the specialization for std::pair=20
could be default generated.
Apologies if my ideas are not clear enough
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--------------000407020207060105000304
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
<div class=3D"moz-cite-prefix">Le 13/01/2016 17:09, Howard Hinnant a
=C3=A9crit=C2=A0:<br>
</div>
<blockquote
cite=3D"mid:9160999F-C7E2-4D3F-B343-96CF587BEF61@gmail.com"
type=3D"cite">
<pre wrap=3D"">On Jan 13, 2016, at 3:13 AM, Vicente J. Botet Escriba =
<a class=3D"moz-txt-link-rfc2396E" href=3D"mailto:vicente.botet@wanadoo.fr"=
><vicente.botet@wanadoo.fr></a> wrote:
</pre>
<blockquote type=3D"cite">
<pre wrap=3D"">
I've some additional concerns about the possible generation of specializati=
on of is_uniquely_represented<T>. I would like it to be generated the=
specialization when possible but while multiple definition of hash_value c=
ould be check at link time, I believe that multiple specializations of is_u=
niquely_represented<T> would result in ODR, which would be a showstop=
per. So at the end, it would be the responsibility of the developer of clas=
s C to add a specialization of is_uniquely_represented<T>. What do yo=
u think about this point?
</pre>
</blockquote>
<pre wrap=3D"">
I believe you are correct that it will be necessary for the author of C to =
specialize is_uniquely_represented<C>. There are semantics to this p=
roperty that do not show up in the C++ type system. For example the hashin=
g of a std::vector should never include the vector=E2=80=99s capacity(). A=
nd the hashing of an IEEE floating point should hash -0. and 0. to the same=
value (despite the different bit layouts). C may have similar rules on ho=
w it must be hashed and only the author of C can know this.</pre>
</blockquote>
The idea is to restrict to classes for which the operator=3D=3D is
generated. Classes like vector would define its own operator=3D=3D and
so the hash automatic generation would be inhibited. If
is_uniquely_represented is false on=C2=A0 IEEE floating point, classes=
=C2=A0
containing those as data members should be inhibited also. I believe
that in these cases is_uniquely_represented should not be
specialized neither.<br>
<br>
Given<br>
<br>
<pre class=3D" language-cpp" style=3D"-webkit-print-color-adjust: exact=
; margin: 0.5em 0px; background-color: rgb(245, 242, 240); border: 1px soli=
d rgb(204, 204, 204); font-size: 13px; line-height: 1.5; overflow: auto; pa=
dding: 1em; border-top-left-radius: 3px; border-top-right-radius: 3px; bord=
er-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(0, =
0, 0); text-shadow: white 0px 1px; font-family: Consolas, Monaco, 'Andale M=
ono', 'Ubuntu Mono', monospace; direction: ltr; text-align: left; white-spa=
ce: pre; word-spacing: 0px; word-break: normal; word-wrap: normal; tab-size=
: 4; -webkit-hyphens: none; font-style: normal; font-variant: normal; font-=
weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; te=
xt-transform: none; widows: auto; -webkit-text-stroke-width: 0px; backgroun=
d-position: initial initial; background-repeat: initial initial;"><code cla=
ss=3D" language-cpp" style=3D"-webkit-print-color-adjust: exact; margin: 0p=
x; padding: 0px; white-space: pr
e; border: none; background-color: transparent; border-top-left-radius: 3px=
; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bot=
tom-left-radius: 3px; color: black; text-shadow: white 0px 1px; font-family=
: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr=
; text-align: left; word-spacing: normal; word-break: normal; word-wrap: no=
rmal; line-height: 1.5; tab-size: 4; -webkit-hyphens: none; background-posi=
tion: initial initial; background-repeat: initial initial;"><span class=3D"=
token keyword" style=3D"-webkit-print-color-adjust: exact; color: rgb(0, 11=
9, 170);">template</span> <span class=3D"token operator" style=3D"-webkit-p=
rint-color-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(=
255, 255, 255, 0.498039); background-position: initial initial; background-=
repeat: initial initial;"><</span><span class=3D"token keyword" style=3D=
"-webkit-print-color-adjust: exact; color: rgb(0, 119, 170);">class</span> =
<span class=3D"token class-name" style
=3D"-webkit-print-color-adjust: exact;">T</span><span class=3D"token punctu=
ation" style=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153=
);">,</span> <span class=3D"token keyword" style=3D"-webkit-print-color-adj=
ust: exact; color: rgb(0, 119, 170);">class</span> <span class=3D"token cla=
ss-name" style=3D"-webkit-print-color-adjust: exact;">U</span><span class=
=3D"token operator" style=3D"-webkit-print-color-adjust: exact; color: rgb(=
166, 127, 89); background-color: rgba(255, 255, 255, 0.498039); background-=
position: initial initial; background-repeat: initial initial;">></span>
<span class=3D"token keyword" style=3D"-webkit-print-color-adjust: exact; c=
olor: rgb(0, 119, 170);">struct</span> is_uniquely_represented<span class=
=3D"token operator" style=3D"-webkit-print-color-adjust: exact; color: rgb(=
166, 127, 89); background-color: rgba(255, 255, 255, 0.498039); background-=
position: initial initial; background-repeat: initial initial;"><</span>=
std<span class=3D"token operator" style=3D"-webkit-print-color-adjust: exac=
t; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.498039=
); background-position: initial initial; background-repeat: initial initial=
;">::</span>pair<span class=3D"token operator" style=3D"-webkit-print-color=
-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(255, 255, =
255, 0.498039); background-position: initial initial; background-repeat: in=
itial initial;"><</span>T<span class=3D"token punctuation" style=3D"-web=
kit-print-color-adjust: exact; color: rgb(153, 153, 153);">,</span> U<span =
class=3D"token operator" style=3D"-webkit-print-co
lor-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(255, 25=
5, 255, 0.498039); background-position: initial initial; background-repeat:=
initial initial;">>></span>
<span class=3D"token operator" style=3D"-webkit-print-color-adjust: exa=
ct; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.49803=
9); background-position: initial initial; background-repeat: initial initia=
l;">:</span> <span class=3D"token keyword" style=3D"-webkit-print-color-adj=
ust: exact; color: rgb(0, 119, 170);">public</span> std<span class=3D"token=
operator" style=3D"-webkit-print-color-adjust: exact; color: rgb(166, 127,=
89); background-color: rgba(255, 255, 255, 0.498039); background-position:=
initial initial; background-repeat: initial initial;">::</span>bool_consta=
nt<span class=3D"token operator" style=3D"-webkit-print-color-adjust: exact=
; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.498039)=
; background-position: initial initial; background-repeat: initial initial;=
"><</span>is_uniquely_represented<span class=3D"token operator" style=3D=
"-webkit-print-color-adjust: exact; color: rgb(166, 127, 89); background-co=
lor: rgba(255, 255, 255, 0.498039); backgrou
nd-position: initial initial; background-repeat: initial initial;"><</sp=
an>T<span class=3D"token operator" style=3D"-webkit-print-color-adjust: exa=
ct; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.49803=
9); background-position: initial initial; background-repeat: initial initia=
l;">></span><span class=3D"token operator" style=3D"-webkit-print-color-=
adjust: exact; color: rgb(166, 127, 89); background-color: rgba(255, 255, 2=
55, 0.498039); background-position: initial initial; background-repeat: ini=
tial initial;">::</span>value <span class=3D"token operator" style=3D"-webk=
it-print-color-adjust: exact; color: rgb(166, 127, 89); background-color: r=
gba(255, 255, 255, 0.498039); background-position: initial initial; backgro=
und-repeat: initial initial;">&&</span>
is_uniquely_represented<span class=3D"token=
operator" style=3D"-webkit-print-color-adjust: exact; color: rgb(166, 127,=
89); background-color: rgba(255, 255, 255, 0.498039); background-position:=
initial initial; background-repeat: initial initial;"><</span>U<span cl=
ass=3D"token operator" style=3D"-webkit-print-color-adjust: exact; color: r=
gb(166, 127, 89); background-color: rgba(255, 255, 255, 0.498039); backgrou=
nd-position: initial initial; background-repeat: initial initial;">></sp=
an><span class=3D"token operator" style=3D"-webkit-print-color-adjust: exac=
t; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.498039=
); background-position: initial initial; background-repeat: initial initial=
;">::</span>value <span class=3D"token operator" style=3D"-webkit-print-col=
or-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(255, 255=
, 255, 0.498039); background-position: initial initial; background-repeat: =
initial initial;">&&</span>
<span class=3D"token keyword" style=3D"-web=
kit-print-color-adjust: exact; color: rgb(0, 119, 170);">sizeof</span><span=
class=3D"token punctuation" style=3D"-webkit-print-color-adjust: exact; co=
lor: rgb(153, 153, 153);">(</span>T<span class=3D"token punctuation" style=
=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">)</span>=
<span class=3D"token operator" style=3D"-webkit-print-color-adjust: exact;=
color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.498039);=
background-position: initial initial; background-repeat: initial initial;"=
>+</span> <span class=3D"token keyword" style=3D"-webkit-print-color-adjust=
: exact; color: rgb(0, 119, 170);">sizeof</span><span class=3D"token punctu=
ation" style=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153=
);">(</span>U<span class=3D"token punctuation" style=3D"-webkit-print-color=
-adjust: exact; color: rgb(153, 153, 153);">)</span> <span class=3D"token o=
perator" style=3D"-webkit-print-color-adjust: exact; colo
r: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.498039); back=
ground-position: initial initial; background-repeat: initial initial;">=3D=
=3D</span> <span class=3D"token keyword" style=3D"-webkit-print-color-adjus=
t: exact; color: rgb(0, 119, 170);">sizeof</span><span class=3D"token punct=
uation" style=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 15=
3);">(</span>std<span class=3D"token operator" style=3D"-webkit-print-color=
-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(255, 255, =
255, 0.498039); background-position: initial initial; background-repeat: in=
itial initial;">::</span>pair<span class=3D"token operator" style=3D"-webki=
t-print-color-adjust: exact; color: rgb(166, 127, 89); background-color: rg=
ba(255, 255, 255, 0.498039); background-position: initial initial; backgrou=
nd-repeat: initial initial;"><</span>T<span class=3D"token punctuation" =
style=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">,</=
span> U<span class=3D"token operator" style=3D"-webki
t-print-color-adjust: exact; color: rgb(166, 127, 89); background-color: rg=
ba(255, 255, 255, 0.498039); background-position: initial initial; backgrou=
nd-repeat: initial initial;">></span><span class=3D"token punctuation" s=
tyle=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">)</s=
pan><span class=3D"token operator" style=3D"-webkit-print-color-adjust: exa=
ct; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.49803=
9); background-position: initial initial; background-repeat: initial initia=
l;">></span>
<span class=3D"token punctuation" style=3D"-webkit-print-color-adjust: exac=
t; color: rgb(153, 153, 153);">{</span>
<span class=3D"token punctuation" style=3D"-webkit-print-color-adjust: exac=
t; color: rgb(153, 153, 153);">}</span><span class=3D"token punctuation" st=
yle=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">;</sp=
an></code></pre>
<br>
the following should be correct<br>
<br>
<pre class=3D" language-cpp" style=3D"-webkit-print-color-adjust: exact=
; margin: 0.5em 0px; background-color: rgb(245, 242, 240); border: 1px soli=
d rgb(204, 204, 204); font-size: 13px; line-height: 1.5; overflow: auto; pa=
dding: 1em; border-top-left-radius: 3px; border-top-right-radius: 3px; bord=
er-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(0, =
0, 0); text-shadow: white 0px 1px; font-family: Consolas, Monaco, 'Andale M=
ono', 'Ubuntu Mono', monospace; direction: ltr; text-align: left; white-spa=
ce: pre; word-spacing: 0px; word-break: normal; word-wrap: normal; tab-size=
: 4; -webkit-hyphens: none; font-style: normal; font-variant: normal; font-=
weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; te=
xt-transform: none; widows: auto; -webkit-text-stroke-width: 0px; backgroun=
d-position: initial initial; background-repeat: initial initial;"><code cla=
ss=3D" language-cpp" style=3D"-webkit-print-color-adjust: exact; margin: 0p=
x; padding: 0px; white-space: pr
e; border: none; background-color: transparent; border-top-left-radius: 3px=
; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bot=
tom-left-radius: 3px; color: black; text-shadow: white 0px 1px; font-family=
: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr=
; text-align: left; word-spacing: normal; word-break: normal; word-wrap: no=
rmal; line-height: 1.5; tab-size: 4; -webkit-hyphens: none; background-posi=
tion: initial initial; background-repeat: initial initial;">static_assert(n=
ot is_uniquely_represented<span class=3D"token operator" style=3D"-webkit-p=
rint-color-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(=
255, 255, 255, 0.498039); background-position: initial initial; background-=
repeat: initial initial;"><</span>std<span class=3D"token operator" styl=
e=3D"-webkit-print-color-adjust: exact; color: rgb(166, 127, 89); backgroun=
d-color: rgba(255, 255, 255, 0.498039); background-position: initial initia=
l; background-repeat: initial in
itial;">::</span>pair<span class=3D"token operator" style=3D"-webkit-print-=
color-adjust: exact; color: rgb(166, 127, 89); background-color: rgba(255, =
255, 255, 0.498039); background-position: initial initial; background-repea=
t: initial initial;"><float</span><span class=3D"token punctuation" styl=
e=3D"-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">,</span=
> int<span class=3D"token operator" style=3D"-webkit-print-color-adjust: ex=
act; color: rgb(166, 127, 89); background-color: rgba(255, 255, 255, 0.4980=
39); background-position: initial initial; background-repeat: initial initi=
al;">>>::value, "");</span></code></pre>
<br class=3D"Apple-interchange-newline">
<br>
<blockquote
cite=3D"mid:9160999F-C7E2-4D3F-B343-96CF587BEF61@gmail.com"
type=3D"cite">
<pre wrap=3D"">
In the case that is_uniquely_represented<C> answers true, I believe i=
t is a simple library function to automate hash_append/hash_value. Here is=
an updated N3980 implementation of such a function:
<a class=3D"moz-txt-link-freetext" href=3D"https://github.com/HowardHinnant=
/hash_append/blob/master/hash_append.h#L203-L212">https://github.com/Howard=
Hinnant/hash_append/blob/master/hash_append.h#L203-L212</a>
If something is uniquely represented, you can ship its bytes off to the has=
h algorithm without concern about how its bases and members are laid out. =
Not only is this easier than dealing with the bases and members individuall=
y, it is also more efficient for most modern hash algorithms. Hash algorit=
hms like to see as many bytes as possible at once for best performance. Th=
is leads to less buffering and more bit crunching within the algorithm.
</pre>
</blockquote>
I understand the optimization advantage of is_uniquely_represented.
Thanks for your clear paper. <br>
<br>
I believe however that we can identify a good subset of simple
classes that satisfy the semantics of is_uniquely_represented. <br>
<br>
My concern is if the default specialization of the trait for these
subset could be in conflict with a late user specialization or a
specialization in another translation unit<br>
<br>
Could we require that the same user specialization must appear on
all the translation units that see the C declaration and before the
need for the trait appears?<br>
After some thoughts I believe that this seems acceptable, as
otherwise the traits could take different values in different parts
of the program violating the ODR, independently of whether there is
a default specialization or not.<br>
<br>
It is worth doing it for this subset? This should depend on how many
classes belong to this subset. E.g. the specialization for std::pair
could be default generated.<br>
<br>
Apologies if my ideas are not clear enough<br>
<br>
Vicente<br>
<br>
</body>
</html>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------000407020207060105000304--
.
Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Wed, 13 Jan 2016 18:09:33 -0500
Raw View
On Jan 13, 2016, at 5:13 PM, Vicente J. Botet Escriba <vicente.botet@wanado=
o.fr> wrote:
>=20
> Le 13/01/2016 17:09, Howard Hinnant a =C3=A9crit :
>> On Jan 13, 2016, at 3:13 AM, Vicente J. Botet Escriba <vicente.botet@wan=
adoo.fr>
>> wrote:
>>=20
>>> I've some additional concerns about the possible generation of speciali=
zation of is_uniquely_represented<T>. I would like it to be generated the s=
pecialization when possible but while multiple definition of hash_value cou=
ld be check at link time, I believe that multiple specializations of is_uni=
quely_represented<T> would result in ODR, which would be a showstopper. So =
at the end, it would be the responsibility of the developer of class C to a=
dd a specialization of is_uniquely_represented<T>. What do you think about =
this point?
>>>=20
>> I believe you are correct that it will be necessary for the author of C =
to specialize is_uniquely_represented<C>. There are semantics to this prop=
erty that do not show up in the C++ type system. For example the hashing o=
f a std::vector should never include the vector=E2=80=99s capacity(). And =
the hashing of an IEEE floating point should hash -0. and 0. to the same va=
lue (despite the different bit layouts). C may have similar rules on how i=
t must be hashed and only the author of C can know this.
> The idea is to restrict to classes for which the operator=3D=3D is genera=
ted. Classes like vector would define its own operator=3D=3D and so the has=
h automatic generation would be inhibited. If is_uniquely_represented is fa=
lse on IEEE floating point, classes containing those as data members shou=
ld be inhibited also. I believe that in these cases is_uniquely_represented=
should not be specialized neither.
>=20
> Given
>=20
> template <class T, class U>
> struct is_uniquely_represented<std::pair<T, U>>
>=20
> =20
> : public std::bool_constant<is_uniquely_represented<T>::value &&
>=20
> is_uniquely_represented
> <U>::value &&
>=20
> =20
> sizeof(T) + sizeof(U) =3D=3D sizeof(std::pair<T, U>)>
> {
> };
>=20
> the following should be correct
>=20
> static_assert(not is_uniquely_represented<std::pair<float, int>>::value, =
"");
>=20
>=20
>>=20
>> In the case that is_uniquely_represented<C> answers true, I believe it i=
s a simple library function to automate hash_append/hash_value. Here is an=
updated N3980 implementation of such a function:
>>=20
>>=20
>> https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#L=
203-L212
>>=20
>>=20
>> If something is uniquely represented, you can ship its bytes off to the =
hash algorithm without concern about how its bases and members are laid out=
.. Not only is this easier than dealing with the bases and members individu=
ally, it is also more efficient for most modern hash algorithms. Hash algo=
rithms like to see as many bytes as possible at once for best performance. =
This leads to less buffering and more bit crunching within the algorithm.
>>=20
>>=20
>>=20
> I understand the optimization advantage of is_uniquely_represented. Thank=
s for your clear paper.=20
>=20
> I believe however that we can identify a good subset of simple classes th=
at satisfy the semantics of is_uniquely_represented.=20
>=20
> My concern is if the default specialization of the trait for these subset=
could be in conflict with a late user specialization or a specialization i=
n another translation unit
>=20
> Could we require that the same user specialization must appear on all the=
translation units that see the C declaration and before the need for the t=
rait appears?
> After some thoughts I believe that this seems acceptable, as otherwise th=
e traits could take different values in different parts of the program viol=
ating the ODR, independently of whether there is a default specialization o=
r not.
I agree that this is a reasonable (and necessary) requirement. is_uniquely=
_represented would not be the first user-specializable trait. We=E2=80=99v=
e been doing this sort of dance since C++98 with iterator_traits.
>=20
> It is worth doing it for this subset? This should depend on how many clas=
ses belong to this subset. E.g. the specialization for std::pair could be d=
efault generated.
Sorry, I=E2=80=99m not understanding this last question. Could you give an=
example? Thanks.
Howard
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: =?UTF-8?Q?Andrzej_Krzemie=C5=84ski?= <akrzemi1@gmail.com>
Date: Wed, 13 Jan 2016 23:47:12 -0800 (PST)
Raw View
------=_Part_204_1714295254.1452757632758
Content-Type: multipart/alternative;
boundary="----=_Part_205_948825230.1452757632758"
------=_Part_205_948825230.1452757632758
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
W dniu wtorek, 12 stycznia 2016 23:49:14 UTC+1 u=C5=BCytkownik Vicente J. B=
otet=20
Escriba napisa=C5=82:
>
> Default swap/hash_value=20
>
> Defining swap and hash_value P0029R0=20
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0029r0.html> as=
=20
> well as comparison operators, as proposed in N4475=20
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf>, for=
=20
> simple classes is tedious, repetitive, slightly error-prone, and easily=
=20
> automated.=20
>
> Any comments are welcome,
>
Hi Vicente,
My intuition tells me that it would be beneficial to make it two separate=
=20
proposals. I expect that swap and hash have different constraints, would=20
rise different concerns, different discussions, and perhaps different=20
outcomes as to whether include them or not. I can see that Howard only=20
commented on the hash part. I, in contrast, will only comment on the swap=
=20
part.
I would add to the rationale for swap. Additional benefit for a default=20
member-wise swap (rather than relying on the move-based) (apart from=20
performance) is that the former can sometimes offer a better noexcept=20
guarantee. E.g., for std::vector, swap can be always guaranteed to be=20
noexcept, whereas its move operations throw.
Regards,
&rzej
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
------=_Part_205_948825230.1452757632758
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<br><br>W dniu wtorek, 12 stycznia 2016 23:49:14 UTC+1 u=C5=BCytkownik Vice=
nte J. Botet Escriba napisa=C5=82:<blockquote class=3D"gmail_quote" style=
=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: =
1ex;"><div bgcolor=3D"#FFFFFF" text=3D"#000000"><h1 style=3D"margin:20px 0p=
x 10px;padding:0px;font-weight:bold;font-size:28px;color:rgb(0,0,0);font-fa=
mily:Helvetica,arial,sans-serif;font-style:normal;font-variant:normal;lette=
r-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white=
-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Default<s=
pan>=C2=A0</span><code style=3D"margin:0px 2px;padding:0px 5px;white-space:=
nowrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);=
border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-=
radius:3px;border-bottom-left-radius:3px;font-size:inherit">swap</code>/<co=
de style=3D"margin:0px 2px;padding:0px 5px;white-space:nowrap;border:1px so=
lid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radi=
us:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bo=
ttom-left-radius:3px;font-size:inherit">hash_value</code></h1>
<p style=3D"margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,aria=
l,sans-serif;font-size:14px;font-style:normal;font-variant:normal;font-weig=
ht:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-trans=
form:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,=
255)">Defining<span>=C2=A0</span><code style=3D"margin:0px 2px;padding:0px =
5px;white-space:nowrap;border:1px solid rgb(234,234,234);background-color:r=
gb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;bord=
er-bottom-right-radius:3px;border-bottom-left-radius:3px">swap</code><span>=
=C2=A0</span>and<span>=C2=A0</span><code style=3D"margin:0px 2px;padding:0p=
x 5px;white-space:nowrap;border:1px solid rgb(234,234,234);background-color=
:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;bo=
rder-bottom-right-radius:3px;border-bottom-left-radius:3px">hash_value</cod=
e><span>=C2=A0</span><a href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs=
/papers/2015/p0029r0.html" title=3D"A Unified Proposal for Composable Hashi=
ng" style=3D"color:rgb(65,131,196)" target=3D"_blank" rel=3D"nofollow" onmo=
usedown=3D"this.href=3D'http://www.google.com/url?q\75http%3A%2F%2Fwww.=
open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2015%2Fp0029r0.html\46s=
a\75D\46sntz\0751\46usg\75AFQjCNFMJPkwLPkD7E9erH9GNLsuGh7rzA';return tr=
ue;" onclick=3D"this.href=3D'http://www.google.com/url?q\75http%3A%2F%2=
Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2015%2Fp0029r0.htm=
l\46sa\75D\46sntz\0751\46usg\75AFQjCNFMJPkwLPkD7E9erH9GNLsuGh7rzA';retu=
rn true;">P<wbr>0029R0</a><span>=C2=A0</span>as
well as comparison operators, as proposed in<span>=C2=A0</span><a hre=
f=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf" tit=
le=3D"Default comparisons (R2)" style=3D"color:rgb(65,131,196)" target=3D"_=
blank" rel=3D"nofollow" onmousedown=3D"this.href=3D'http://www.google.c=
om/url?q\75http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpape=
rs%2F2015%2Fn4477.pdf\46sa\75D\46sntz\0751\46usg\75AFQjCNGfPWSu84Bha502jWe_=
nTBMyuGcAQ';return true;" onclick=3D"this.href=3D'http://www.google=
..com/url?q\75http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpa=
pers%2F2015%2Fn4477.pdf\46sa\75D\46sntz\0751\46usg\75AFQjCNGfPWSu84Bha502jW=
e_nTBMyuGcAQ';return true;">N4475</a>, for simple classes is tedious, r=
epetitive,
slightly error-prone, and easily automated.<span> <br>
</span></p><p style=3D"margin:15px 0px;color:rgb(0,0,0);font-family:H=
elvetica,arial,sans-serif;font-size:14px;font-style:normal;font-variant:nor=
mal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0=
px;text-transform:none;white-space:normal;word-spacing:0px;background-color=
:rgb(255,255,255)"><span>
Any comments are welcome,<br></span></p></div></blockquote><div>Hi =
Vicente,<br>My intuition tells me that it would be beneficial to make it tw=
o separate proposals. I expect that swap and hash have different constraint=
s, would rise different concerns, different discussions, and perhaps differ=
ent outcomes as to whether include them or not. I can see that Howard only =
commented on the hash part. I, in contrast, will only comment on the swap p=
art.<br><br>I would add to the rationale for swap. Additional benefit for a=
default member-wise swap (rather than relying on the move-based) (apart fr=
om performance) is that the former can sometimes offer a better noexcept gu=
arantee. E.g., for std::vector, swap can be always guaranteed to be noexcep=
t, whereas its move operations throw.<br><br>Regards,<br>&rzej<br></div=
>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_205_948825230.1452757632758--
------=_Part_204_1714295254.1452757632758--
.
Author: Tomasz <tomaszkam@gmail.com>
Date: Thu, 14 Jan 2016 07:59:27 -0800 (PST)
Raw View
------=_Part_546_2134807463.1452787167649
Content-Type: multipart/alternative;
boundary="----=_Part_547_372731702.1452787167649"
------=_Part_547_372731702.1452787167649
Content-Type: text/plain; charset=UTF-8
I have a comment regarding a restricting generation of swap only in
situation when it would be noexcept:
If I the memberwise swap would not be generated, then I assume normal
std::swap (3xmove) would be used instead. And if the member has throwing
swap, then it would also have throwing move, so std::swap would also throw
in this situation.
However, the std::swap will invoke move for other members of given class,
that may be noexcept swapable but not noexcept moveable (same
implementation of std::list), so the only outcome of avoiding generation of
possibly throwing swap, would be use of swap that is less efficient and can
throw in more cases.
Also language embraced throwing swap, by introduction of
is_noexcept_swappable, so I think swap should be generated regardless of
noexcept of member swap function, but have automatic noexcept specification
(like other generated member functions).
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_547_372731702.1452787167649
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I have a comment regarding a restricting generation of swa=
p only in situation when it would be noexcept: <br>If I the memberwise swap=
would not be generated, then I assume normal std::swap (3xmove) would be u=
sed instead. And if the member has throwing swap, then it would also have t=
hrowing move, so std::swap would also throw in this situation.<br>However, =
the std::swap will invoke move for other members of given class, that may b=
e noexcept swapable but not noexcept moveable (same implementation of std::=
list), so the only outcome of avoiding generation of possibly throwing swap=
, would be use of swap that is less efficient and can throw in more cases.<=
br><br>Also language embraced throwing swap, by introduction of is_noexcept=
_swappable, so I think swap should be generated regardless of noexcept of m=
ember swap function, but have automatic noexcept specification (like other =
generated member functions).<br></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_547_372731702.1452787167649--
------=_Part_546_2134807463.1452787167649--
.
Author: Jonathan Coe <jonathanbcoe@gmail.com>
Date: Thu, 14 Jan 2016 17:43:16 +0000
Raw View
> On 13 Jan 2016, at 23:09, Howard Hinnant <howard.hinnant@gmail.com> wrote=
:
>=20
>> On Jan 13, 2016, at 5:13 PM, Vicente J. Botet Escriba <vicente.botet@wan=
adoo.fr> wrote:
>>=20
>> Le 13/01/2016 17:09, Howard Hinnant a =C3=A9crit :
>>> On Jan 13, 2016, at 3:13 AM, Vicente J. Botet Escriba <vicente.botet@wa=
nadoo.fr>
>>> wrote:
>>>=20
>>>> I've some additional concerns about the possible generation of special=
ization of is_uniquely_represented<T>. I would like it to be generated the =
specialization when possible but while multiple definition of hash_value co=
uld be check at link time, I believe that multiple specializations of is_un=
iquely_represented<T> would result in ODR, which would be a showstopper. So=
at the end, it would be the responsibility of the developer of class C to =
add a specialization of is_uniquely_represented<T>. What do you think about=
this point?
>>> I believe you are correct that it will be necessary for the author of C=
to specialize is_uniquely_represented<C>. There are semantics to this pro=
perty that do not show up in the C++ type system. For example the hashing =
of a std::vector should never include the vector=E2=80=99s capacity(). And=
the hashing of an IEEE floating point should hash -0. and 0. to the same v=
alue (despite the different bit layouts). C may have similar rules on how =
it must be hashed and only the author of C can know this.
>> The idea is to restrict to classes for which the operator=3D=3D is gener=
ated. Classes like vector would define its own operator=3D=3D and so the ha=
sh automatic generation would be inhibited. If is_uniquely_represented is f=
alse on IEEE floating point, classes containing those as data members sho=
uld be inhibited also. I believe that in these cases is_uniquely_represente=
d should not be specialized neither.
>>=20
>> Given
>>=20
>> template <class T, class U>
>> struct is_uniquely_represented<std::pair<T, U>>
>>=20
>>=20
>> : public std::bool_constant<is_uniquely_represented<T>::value &&
>>=20
>> is_uniquely_represented
>> <U>::value &&
>>=20
>>=20
>> sizeof(T) + sizeof(U) =3D=3D sizeof(std::pair<T, U>)>
>> {
>> };
>>=20
>> the following should be correct
>>=20
>> static_assert(not is_uniquely_represented<std::pair<float, int>>::value,=
"");
>>=20
>>=20
>>>=20
>>> In the case that is_uniquely_represented<C> answers true, I believe it =
is a simple library function to automate hash_append/hash_value. Here is a=
n updated N3980 implementation of such a function:
>>>=20
>>>=20
>>> https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#=
L203-L212
>>>=20
>>>=20
>>> If something is uniquely represented, you can ship its bytes off to the=
hash algorithm without concern about how its bases and members are laid ou=
t. Not only is this easier than dealing with the bases and members individ=
ually, it is also more efficient for most modern hash algorithms. Hash alg=
orithms like to see as many bytes as possible at once for best performance.=
This leads to less buffering and more bit crunching within the algorithm.
>> I understand the optimization advantage of is_uniquely_represented. Than=
ks for your clear paper.=20
>>=20
>> I believe however that we can identify a good subset of simple classes t=
hat satisfy the semantics of is_uniquely_represented.=20
>>=20
>> My concern is if the default specialization of the trait for these subse=
t could be in conflict with a late user specialization or a specialization =
in another translation unit
>>=20
>> Could we require that the same user specialization must appear on all th=
e translation units that see the C declaration and before the need for the =
trait appears?
>> After some thoughts I believe that this seems acceptable, as otherwise t=
he traits could take different values in different parts of the program vio=
lating the ODR, independently of whether there is a default specialization =
or not.
>=20
> I agree that this is a reasonable (and necessary) requirement. is_unique=
ly_represented would not be the first user-specializable trait. We=E2=80=
=99ve been doing this sort of dance since C++98 with iterator_traits.
>=20
How will is_uniquely_represented work with architecture dependant alignment=
requirements and padding?
>>=20
>> It is worth doing it for this subset? This should depend on how many cla=
sses belong to this subset. E.g. the specialization for std::pair could be =
default generated.
>=20
> Sorry, I=E2=80=99m not understanding this last question. Could you give =
an example? Thanks.
>=20
> Howard
>=20
> --=20
>=20
> ---=20
> You received this message because you are subscribed to the Google Groups=
"ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an=
email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> Visit this group at https://groups.google.com/a/isocpp.org/group/std-prop=
osals/.
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Thu, 14 Jan 2016 12:47:56 -0500
Raw View
On Jan 14, 2016, at 12:43 PM, Jonathan Coe <jonathanbcoe@gmail.com> wrote:
>=20
> How will is_uniquely_represented work with architecture dependant alignme=
nt requirements and padding?
It will have to be up to the author of the type to correctly specialize is_=
uniquely_represented for all architectures of interest to them. Padding by=
tes can be detected by assuring that the sum of the size of your bases and =
members is equal to the size of your type. For example:
https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#L143=
-L151
Howard
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Thu, 14 Jan 2016 19:30:50 +0100
Raw View
Le 14/01/2016 00:09, Howard Hinnant a =C3=A9crit :
> On Jan 13, 2016, at 5:13 PM, Vicente J. Botet Escriba <vicente.botet@wana=
doo.fr> wrote:
>> Le 13/01/2016 17:09, Howard Hinnant a =C3=A9crit :
>>> On Jan 13, 2016, at 3:13 AM, Vicente J. Botet Escriba <vicente.botet@wa=
nadoo.fr>
>>> wrote:
>>>
>>>> I've some additional concerns about the possible generation of special=
ization of is_uniquely_represented<T>. I would like it to be generated the =
specialization when possible but while multiple definition of hash_value co=
uld be check at link time, I believe that multiple specializations of is_un=
iquely_represented<T> would result in ODR, which would be a showstopper. So=
at the end, it would be the responsibility of the developer of class C to =
add a specialization of is_uniquely_represented<T>. What do you think about=
this point?
>>>>
>>> I believe you are correct that it will be necessary for the author of C=
to specialize is_uniquely_represented<C>. There are semantics to this pro=
perty that do not show up in the C++ type system. For example the hashing =
of a std::vector should never include the vector=E2=80=99s capacity(). And=
the hashing of an IEEE floating point should hash -0. and 0. to the same v=
alue (despite the different bit layouts). C may have similar rules on how =
it must be hashed and only the author of C can know this.
>> The idea is to restrict to classes for which the operator=3D=3D is gener=
ated. Classes like vector would define its own operator=3D=3D and so the ha=
sh automatic generation would be inhibited. If is_uniquely_represented is f=
alse on IEEE floating point, classes containing those as data members sho=
uld be inhibited also. I believe that in these cases is_uniquely_represente=
d should not be specialized neither.
>>
>> Given
>>
>> template <class T, class U>
>> struct is_uniquely_represented<std::pair<T, U>>
>>
>> =20
>> : public std::bool_constant<is_uniquely_represented<T>::value &&
>>
>> is_uniquely_represented
>> <U>::value &&
>>
>> =20
>> sizeof(T) + sizeof(U) =3D=3D sizeof(std::pair<T, U>)>
>> {
>> };
>>
>> the following should be correct
>>
>> static_assert(not is_uniquely_represented<std::pair<float, int>>::value,=
"");
>>
>>
>>> In the case that is_uniquely_represented<C> answers true, I believe it =
is a simple library function to automate hash_append/hash_value. Here is a=
n updated N3980 implementation of such a function:
>>>
>>>
>>> https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#=
L203-L212
>>>
>>>
>>> If something is uniquely represented, you can ship its bytes off to the=
hash algorithm without concern about how its bases and members are laid ou=
t. Not only is this easier than dealing with the bases and members individ=
ually, it is also more efficient for most modern hash algorithms. Hash alg=
orithms like to see as many bytes as possible at once for best performance.=
This leads to less buffering and more bit crunching within the algorithm.
>>>
>>>
>>>
>> I understand the optimization advantage of is_uniquely_represented. Than=
ks for your clear paper.
>>
>> I believe however that we can identify a good subset of simple classes t=
hat satisfy the semantics of is_uniquely_represented.
>>
>> My concern is if the default specialization of the trait for these subse=
t could be in conflict with a late user specialization or a specialization =
in another translation unit
>>
>> Could we require that the same user specialization must appear on all th=
e translation units that see the C declaration and before the need for the =
trait appears?
>> After some thoughts I believe that this seems acceptable, as otherwise t=
he traits could take different values in different parts of the program vio=
lating the ODR, independently of whether there is a default specialization =
or not.
> I agree that this is a reasonable (and necessary) requirement. is_unique=
ly_represented would not be the first user-specializable trait. We=E2=80=
=99ve been doing this sort of dance since C++98 with iterator_traits.
Yes, I see it now. So that there shouldn't be any trouble specializing=20
it with a default.
>
>> It is worth doing it for this subset? This should depend on how many cla=
sses belong to this subset. E.g. the specialization for std::pair could be =
default generated.
> Sorry, I=E2=80=99m not understanding this last question. Could you give =
an example? Thanks.
>
>
The question was if it is worth specializing the is_uniquely_represented=20
even if the subset of classes for which it can be done safely is small.
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Thu, 14 Jan 2016 19:32:17 +0100
Raw View
This is a multi-part message in MIME format.
--------------070004050100070703020103
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
Le 14/01/2016 08:47, Andrzej Krzemie=C5=84ski a =C3=A9crit :
>
>
> W dniu wtorek, 12 stycznia 2016 23:49:14 UTC+1 u=C5=BCytkownik Vicente J.=
=20
> Botet Escriba napisa=C5=82:
>
>
> Default|swap|/|hash_value|
>
> Defining|swap|and|hash_value|P0029R0
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0029r0.html=
>as
> well as comparison operators, as proposed inN4475
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf>,
> for simple classes is tedious, repetitive, slightly error-prone,
> and easily automated.
>
> Any comments are welcome,
>
> Hi Vicente,
> My intuition tells me that it would be beneficial to make it two=20
> separate proposals. I expect that swap and hash have different=20
> constraints, would rise different concerns, different discussions, and=20
> perhaps different outcomes as to whether include them or not. I can=20
> see that Howard only commented on the hash part. I, in contrast, will=20
> only comment on the swap part.
>
Ok, I will split it.
> I would add to the rationale for swap. Additional benefit for a=20
> default member-wise swap (rather than relying on the move-based)=20
> (apart from performance) is that the former can sometimes offer a=20
> better noexcept guarantee. E.g., for std::vector, swap can be always=20
> guaranteed to be noexcept, whereas its move operations throw.
>
You are right. I will add it.
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
--------------070004050100070703020103
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
<div class=3D"moz-cite-prefix">Le 14/01/2016 08:47, Andrzej
Krzemie=C5=84ski a =C3=A9crit=C2=A0:<br>
</div>
<blockquote
cite=3D"mid:ace3ea5b-b960-4052-8080-72113810da75@isocpp.org"
type=3D"cite"><br>
<br>
W dniu wtorek, 12 stycznia 2016 23:49:14 UTC+1 u=C5=BCytkownik Vicent=
e
J. Botet Escriba napisa=C5=82:
<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left:
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">
<div bgcolor=3D"#FFFFFF" text=3D"#000000">
<h1 style=3D"margin:20px 0px
10px;padding:0px;font-weight:bold;font-size:28px;color:rgb(0,0,0);font-fami=
ly:Helvetica,arial,sans-serif;font-style:normal;font-variant:normal;letter-=
spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-s=
pace:normal;word-spacing:0px;background-color:rgb(255,255,255)">Default<spa=
n>=C2=A0</span><code
style=3D"margin:0px 2px;padding:0px
5px;white-space:nowrap;border:1px solid
rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3=
px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom=
-left-radius:3px;font-size:inherit">swap</code>/<code
style=3D"margin:0px 2px;padding:0px
5px;white-space:nowrap;border:1px solid
rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3=
px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom=
-left-radius:3px;font-size:inherit">hash_value</code></h1>
<p style=3D"margin:15px
0px;color:rgb(0,0,0);font-family:Helvetica,arial,sans-serif;font-size:14px;=
font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:nor=
mal;text-align:start;text-indent:0px;text-transform:none;white-space:normal=
;word-spacing:0px;background-color:rgb(255,255,255)">Defining<span>=C2=A0</=
span><code
style=3D"margin:0px 2px;padding:0px
5px;white-space:nowrap;border:1px solid
rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3=
px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom=
-left-radius:3px">swap</code><span>=C2=A0</span>and<span>=C2=A0</span><code
style=3D"margin:0px 2px;padding:0px
5px;white-space:nowrap;border:1px solid
rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3=
px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom=
-left-radius:3px">hash_value</code><span>=C2=A0</span><a
moz-do-not-send=3D"true"
href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0029r0.htm=
l"
title=3D"A Unified Proposal for Composable Hashing"
style=3D"color:rgb(65,131,196)" target=3D"_blank"
rel=3D"nofollow"
onmousedown=3D"this.href=3D'http://www.google.com/url?q\75htt=
p%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2015%2Fp0=
029r0.html\46sa\75D\46sntz\0751\46usg\75AFQjCNFMJPkwLPkD7E9erH9GNLsuGh7rzA'=
;return
true;"
onclick=3D"this.href=3D'http://www.google.com/url?q\75http%3A=
%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2015%2Fp0029r=
0.html\46sa\75D\46sntz\0751\46usg\75AFQjCNFMJPkwLPkD7E9erH9GNLsuGh7rzA';ret=
urn
true;">P<wbr>0029R0</a><span>=C2=A0</span>as well as comparis=
on
operators, as proposed in<span>=C2=A0</span><a
moz-do-not-send=3D"true"
href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/20=
15/n4477.pdf"
title=3D"Default comparisons (R2)"
style=3D"color:rgb(65,131,196)" target=3D"_blank"
rel=3D"nofollow"
onmousedown=3D"this.href=3D'http://www.google.com/url?q\75htt=
p%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2015%2Fn4=
477.pdf\46sa\75D\46sntz\0751\46usg\75AFQjCNGfPWSu84Bha502jWe_nTBMyuGcAQ';re=
turn
true;"
onclick=3D"this.href=3D'http://www.google.com/url?q\75http%3A=
%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2015%2Fn4477.=
pdf\46sa\75D\46sntz\0751\46usg\75AFQjCNGfPWSu84Bha502jWe_nTBMyuGcAQ';return
true;">N4475</a>, for simple classes is tedious,
repetitive, slightly error-prone, and easily automated.<span>
<br>
</span></p>
<p style=3D"margin:15px
0px;color:rgb(0,0,0);font-family:Helvetica,arial,sans-serif;font-size:14px;=
font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:nor=
mal;text-align:start;text-indent:0px;text-transform:none;white-space:normal=
;word-spacing:0px;background-color:rgb(255,255,255)"><span>
Any comments are welcome,<br>
</span></p>
</div>
</blockquote>
<div>Hi Vicente,<br>
My intuition tells me that it would be beneficial to make it two
separate proposals. I expect that swap and hash have different
constraints, would rise different concerns, different
discussions, and perhaps different outcomes as to whether
include them or not. I can see that Howard only commented on the
hash part. I, in contrast, will only comment on the swap part.<br>
<br>
</div>
</blockquote>
Ok, I will split it.<br>
<blockquote
cite=3D"mid:ace3ea5b-b960-4052-8080-72113810da75@isocpp.org"
type=3D"cite">
<div>I would add to the rationale for swap. Additional benefit for
a default member-wise swap (rather than relying on the
move-based) (apart from performance) is that the former can
sometimes offer a better noexcept guarantee. E.g., for
std::vector, swap can be always guaranteed to be noexcept,
whereas its move operations throw.<br>
<br>
</div>
</blockquote>
You are right. I will add it.<br>
<br>
Vicente<br>
</body>
</html>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
--------------070004050100070703020103--
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Thu, 14 Jan 2016 19:34:15 +0100
Raw View
Le 14/01/2016 18:47, Howard Hinnant a =C3=A9crit :
> On Jan 14, 2016, at 12:43 PM, Jonathan Coe <jonathanbcoe@gmail.com> wrote=
:
>> How will is_uniquely_represented work with architecture dependant alignm=
ent requirements and padding?
> It will have to be up to the author of the type to correctly specialize i=
s_uniquely_represented for all architectures of interest to them. Padding =
bytes can be detected by assuring that the sum of the size of your bases an=
d members is equal to the size of your type. For example:
>
> https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#L1=
43-L151
>
>
Howard. I don't see why the author should be the single one able to do=20
it correctly. Do you see a case for classes like std::pair for which the=20
specialization your showed is not a good one?
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Thu, 14 Jan 2016 19:37:12 +0100
Raw View
Le 14/01/2016 16:59, Tomasz a =C3=A9crit :
> I have a comment regarding a restricting generation of swap only in=20
> situation when it would be noexcept:
> If I the memberwise swap would not be generated, then I assume normal=20
> std::swap (3xmove) would be used instead. And if the member has=20
> throwing swap, then it would also have throwing move, so std::swap=20
> would also throw in this situation.
> However, the std::swap will invoke move for other members of given=20
> class, that may be noexcept swapable but not noexcept moveable (same=20
> implementation of std::list), so the only outcome of avoiding=20
> generation of possibly throwing swap, would be use of swap that is=20
> less efficient and can throw in more cases.
Ok, I see. I'll remove the restriction.
>
> Also language embraced throwing swap, by introduction of=20
> is_noexcept_swappable, so I think swap should be generated regardless=20
> of noexcept of member swap function, but have automatic noexcept=20
> specification (like other generated member functions).
and add the noexcept expression.
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Thu, 14 Jan 2016 14:03:27 -0500
Raw View
On Jan 14, 2016, at 1:34 PM, Vicente J. Botet Escriba <vicente.botet@wanado=
o.fr> wrote:
>=20
> Le 14/01/2016 18:47, Howard Hinnant a =C3=A9crit :
>> On Jan 14, 2016, at 12:43 PM, Jonathan Coe <jonathanbcoe@gmail.com> wrot=
e:
>>> How will is_uniquely_represented work with architecture dependant align=
ment requirements and padding?
>> It will have to be up to the author of the type to correctly specialize =
is_uniquely_represented for all architectures of interest to them. Padding=
bytes can be detected by assuring that the sum of the size of your bases a=
nd members is equal to the size of your type. For example:
>>=20
>> https://github.com/HowardHinnant/hash_append/blob/master/hash_append.h#L=
143-L151
>>=20
>>=20
> Howard. I don't see why the author should be the single one able to do it=
correctly. Do you see a case for classes like std::pair for which the spec=
ialization your showed is not a good one?
No, I think the std::pair specialization should be fine for all cases, with=
the possible exception of if someone specialized pair itself. But I=E2=80=
=99ve never seen a motivating use case to specialize pair itself, and I wou=
ld likely reject any such code in a code review.
I may not be stating my position clearly. My position is that given some u=
ser-defined class X:
class X
{
std::size_t x_;
std::size_t y_;
public:
friend bool operator=3D(const X&, const X&);
};
I see no way to automatically do anything other than claim X is *not* uniqu=
ely represented, but of course allow the author of X to say otherwise. Tha=
t being said, if we has this instead:
class X
{
std::size_t x_;
std::size_t y_;
public:
friend bool operator=3D(const X&, const X&) =3D default;
};
Then I might get talked into believing that it would be safe for the compil=
er/std::lib to declare X uniquely represented. For this second case I have=
n=E2=80=99t given it enough thought to be positive one way or the other.
Howard
PS: I agree that it will be less problematic to split this proposal.
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: Tomasz <tomaszkam@gmail.com>
Date: Thu, 14 Jan 2016 13:02:10 -0800 (PST)
Raw View
------=_Part_911_1649533849.1452805330432
Content-Type: multipart/alternative;
boundary="----=_Part_912_520671806.1452805330433"
------=_Part_912_520671806.1452805330433
Content-Type: text/plain; charset=UTF-8
I see the reasoning between making the generation of hash_value depended on
the generation of the operator==, as we must guarantee that o1 == o2
implies that hash_value(o1) == hash_value(o2). However I do not see any
correlation between generation of swap and operator==. If move-constructor
can be generated then we will have default implementation of swap (via
std::swap). I think that you should generate swap for every class that have
generated move operations (no user defined: copy/move constructor,
copy/move assignment and destructor).
I may be beneficial to have proper rule of six: i.e. non of following copy
constructor/assigment, move constructor/assignment, swap, destructor is
generated if at least on of them is defined. However this would be breaking
change (as we may already have classes with swap, that uses compiler
generated special functions), so I would stick to making swap depended on
other five.
Also the dependency on rule of five, would also lead of question if we
should support defining swap on request via =default.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_912_520671806.1452805330433
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I see the reasoning between making the generation of hash_=
value depended on the generation of the operator=3D=3D, as we must guarante=
e that o1 =3D=3D o2 implies that hash_value(o1) =3D=3D hash_value(o2). Howe=
ver I do not see any correlation between generation of swap and operator=3D=
=3D. If move-constructor can be generated then we will have default impleme=
ntation of swap (via std::swap). I think that you should generate swap for =
every class that have generated move operations (no user defined: copy/move=
constructor, copy/move assignment and destructor).<br><br>I may be benefic=
ial to have proper rule of six: i.e. non of following copy constructor/assi=
gment, move constructor/assignment, swap, destructor is generated if at lea=
st on of them is defined. However this would be breaking change (as we may =
already have classes with swap, that uses compiler generated special functi=
ons), so I would stick to making swap depended on other five.<br><br>Also t=
he dependency on rule of five, would also lead of question if we should sup=
port defining swap on request via =3Ddefault.<br><br></div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />
------=_Part_912_520671806.1452805330433--
------=_Part_911_1649533849.1452805330432--
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Thu, 14 Jan 2016 23:09:07 +0100
Raw View
Le 14/01/2016 22:02, Tomasz a =C3=A9crit :
> I see the reasoning between making the generation of hash_value=20
> depended on the generation of the operator=3D=3D, as we must guarantee=20
> that o1 =3D=3D o2 implies that hash_value(o1) =3D=3D hash_value(o2). Howe=
ver I=20
> do not see any correlation between generation of swap and operator=3D=3D.=
=20
> If move-constructor can be generated then we will have default=20
> implementation of swap (via std::swap). I think that you should=20
> generate swap for every class that have generated move operations (no=20
> user defined: copy/move constructor, copy/move assignment and destructor)=
..
>
> I may be beneficial to have proper rule of six: i.e. non of following=20
> copy constructor/assigment, move constructor/assignment, swap,=20
> destructor is generated if at least on of them is defined. However=20
> this would be breaking change (as we may already have classes with=20
> swap, that uses compiler generated special functions), so I would=20
> stick to making swap depended on other five.
>
> Also the dependency on rule of five, would also lead of question if we=20
> should support defining swap on request via =3Ddefault.
Thanks for your comments. I need to think a little bit about. I will=20
come back later on, maybe tomorrow.
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.
Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Fri, 15 Jan 2016 21:47:48 +0100
Raw View
Le 14/01/2016 22:02, Tomasz a =C3=A9crit :
> I see the reasoning between making the generation of hash_value=20
> depended on the generation of the operator=3D=3D, as we must guarantee=20
> that o1 =3D=3D o2 implies that hash_value(o1) =3D=3D hash_value(o2). Howe=
ver I=20
> do not see any correlation between generation of swap and operator=3D=3D.=
=20
> If move-constructor can be generated then we will have default=20
> implementation of swap (via std::swap). I think that you should=20
> generate swap for every class that have generated move operations (no=20
> user defined: copy/move constructor, copy/move assignment and destructor)=
..
>
I believe that you are right, swap has nothing to be with =3D=3D.
> I may be beneficial to have proper rule of six: i.e. non of following=20
> copy constructor/assigment, move constructor/assignment, swap,=20
> destructor is generated if at least on of them is defined. However=20
> this would be breaking change (as we may already have classes with=20
> swap, that uses compiler generated special functions), so I would=20
> stick to making swap depended on other five.
Agreed.
>
> Also the dependency on rule of five, would also lead of question if we=20
> should support defining swap on request via =3Ddefault.
I'll consider this point. It could be sometimes useful, e.g. when the=20
defined destructor is not managing resources.
Thanks for catching this,
Vicente
--=20
---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.
.