Topic: [idea for proposal] Adding std::shift to <algorithm>


Author: dan@soundradix.com
Date: Wed, 12 Jul 2017 02:53:19 -0700 (PDT)
Raw View
------=_Part_8235_1977344816.1499853199870
Content-Type: multipart/alternative;
 boundary="----=_Part_8236_1520123693.1499853199870"

------=_Part_8236_1520123693.1499853199870
Content-Type: text/plain; charset="UTF-8"

Hi,

Would anyone be interested in adding std::shift to <algorithm>?

It would be similar to both:
- std::rotate, but without moving the head elements back to the tail. This
would allow a more efficient implementation and clearer semantics in case
rotation is not needed as well as correctness in case rotation is undesired.
- <algorithm>'s std::move/std::move_backward (depending on the shift
direction).

std::shift should probably accommodate both left and right shifts by one of:
- giving it either begin() and end(), or rbegin() and rend(), similar to
how std::rotate works for both left and right rotations. The advantage is
compactness of the implementation.
- allowing the shift count parameter to be either positive or negative. The
advantage is compactness, though it might not be clear which direction is
which - to be consistent with rotate, positive integers should shift to the
left.
- having std::shift_right and std::shift_left functions. The advantage is
clarity when calling the methods, although the same argument could be made
for having separate std::rotate_left and std::rotate_right instead of
std::rotate, which we don't have.

Here's a sample implementation of a shift to the right direction:

template<class BidirIt>
void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
{
    std::move_backward(first, last - n, last);
}

This demonstrates that while std::shift is implementable with
std::move/std::move_backward,
1) It isn't immediately clear from the code (at least to my eyes) that this
is a shift right, unless you are intimately familiar with
std::move_backward.
2) Different calls, either to std::move or to std::move_backward, are
required, depending on the shift direction.

So, implementing std::shift would allow writing more readable code.

Thanks,
Dan

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/bd1a5d3b-ccc1-44ab-91cc-a4d7195c9dc3%40isocpp.org.

------=_Part_8236_1520123693.1499853199870
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>Would anyone be interested in addin=
g std::shift to &lt;algorithm&gt;?=C2=A0</div><div><br></div><div>It would =
be similar to both:</div><div>- std::rotate, but without moving the head el=
ements back to the tail. This would allow a more efficient implementation a=
nd clearer semantics in case rotation is not needed as well as correctness =
in case rotation is undesired.</div><div>- &lt;algorithm&gt;&#39;s std::mov=
e/std::move_backward (depending on the shift direction).</div><div><br></di=
v><div>std::shift should probably accommodate both left and right shifts by=
 one of:</div><div>- giving it either begin() and end(), or rbegin() and re=
nd(), similar to how std::rotate works for both left and right rotations. T=
he advantage is compactness of the implementation.</div><div>- allowing the=
 shift count parameter to be either positive or negative. The advantage is =
compactness, though it might not be clear which direction is which - to be =
consistent with rotate, positive integers should shift to the left.<br></di=
v><div><div>- having std::shift_right and std::shift_left functions. The ad=
vantage is clarity when calling the methods, although the same argument cou=
ld be made for having separate std::rotate_left and std::rotate_right inste=
ad of std::rotate, which we don&#39;t have.</div></div><div><br></div><div>=
Here&#39;s a sample implementation of a shift to the right direction:</div>=
<br><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250=
); border: 1px solid rgb(187, 187, 187); word-wrap: break-word;"><code clas=
s=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;=
" class=3D"styled-by-prettify">template</span><span style=3D"color: #660;" =
class=3D"styled-by-prettify">&lt;</span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">class</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-by-=
prettify">BidirIt</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">&gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> <br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">void=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> shift_rig=
ht</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span>=
<span style=3D"color: #606;" class=3D"styled-by-prettify">BidirIt</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> first</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #60=
6;" class=3D"styled-by-prettify">BidirIt</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">last</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">uns=
igned</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #008;" class=3D"styled-by-prettify">int</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"> n </span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #066;=
" class=3D"styled-by-prettify">1</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">)</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> <br></span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">{</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> <br>=C2=A0 =C2=A0 std</span><span style=3D"color: #660;" class=3D"styled-=
by-prettify">::</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify">move_backward</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">f=
irst</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">last</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">-</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> n</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettif=
y">last</span><span style=3D"color: #660;" class=3D"styled-by-prettify">);<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> <br></span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">}</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"><br></span></div></code><=
/div><div><br></div><div>This demonstrates that while std::shift is impleme=
ntable with std::move/std::move_backward,</div><div>1) It isn&#39;t immedia=
tely clear from the code (at least to my eyes) that this is a shift right, =
unless you are intimately familiar with std::move_backward.</div><div>2) Di=
fferent calls, either to std::move or to std::move_backward, are required, =
depending on the shift direction.</div><div><br></div><div>So, implementing=
 std::shift would allow writing more readable code.</div><div><br></div><di=
v>Thanks,</div><div>Dan</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/bd1a5d3b-ccc1-44ab-91cc-a4d7195c9dc3%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/bd1a5d3b-ccc1-44ab-91cc-a4d7195c9dc3=
%40isocpp.org</a>.<br />

------=_Part_8236_1520123693.1499853199870--

------=_Part_8235_1977344816.1499853199870--

.


Author: Alexander Zaitsev <zamazan4ik@gmail.com>
Date: Wed, 12 Jul 2017 04:18:02 -0700 (PDT)
Raw View
------=_Part_7946_1506611560.1499858282949
Content-Type: multipart/alternative;
 boundary="----=_Part_7947_606884531.1499858282949"

------=_Part_7947_606884531.1499858282949
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hello.

Really nice idea! But i have some suggestions:
* shift should return iterator (or two)
* it should be constexpr

Also i suggest you create PR to Boost.Algorithm (or we can work together -=
=20
i will help you as mush as possible). And after including into=20
Bost.Algorithm we can write proposal to C++ Standard.

=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 1=
2:53:19 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=
=D0=BB=D1=8C d...@soundradix.com=20
=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>
> Hi,
>
> Would anyone be interested in adding std::shift to <algorithm>?=20
>
> It would be similar to both:
> - std::rotate, but without moving the head elements back to the tail. Thi=
s=20
> would allow a more efficient implementation and clearer semantics in case=
=20
> rotation is not needed as well as correctness in case rotation is undesir=
ed.
> - <algorithm>'s std::move/std::move_backward (depending on the shift=20
> direction).
>
> std::shift should probably accommodate both left and right shifts by one=
=20
> of:
> - giving it either begin() and end(), or rbegin() and rend(), similar to=
=20
> how std::rotate works for both left and right rotations. The advantage is=
=20
> compactness of the implementation.
> - allowing the shift count parameter to be either positive or negative.=
=20
> The advantage is compactness, though it might not be clear which directio=
n=20
> is which - to be consistent with rotate, positive integers should shift t=
o=20
> the left.
> - having std::shift_right and std::shift_left functions. The advantage is=
=20
> clarity when calling the methods, although the same argument could be mad=
e=20
> for having separate std::rotate_left and std::rotate_right instead of=20
> std::rotate, which we don't have.
>
> Here's a sample implementation of a shift to the right direction:
>
> template<class BidirIt>=20
> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)=20
> {=20
>     std::move_backward(first, last - n, last);=20
> }
>
> This demonstrates that while std::shift is implementable with=20
> std::move/std::move_backward,
> 1) It isn't immediately clear from the code (at least to my eyes) that=20
> this is a shift right, unless you are intimately familiar with=20
> std::move_backward.
> 2) Different calls, either to std::move or to std::move_backward, are=20
> required, depending on the shift direction.
>
> So, implementing std::shift would allow writing more readable code.
>
> Thanks,
> Dan
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a%40isocpp.or=
g.

------=_Part_7947_606884531.1499858282949
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello.<div><br></div><div>Really nice idea! But i have som=
e suggestions:</div><div>* shift should return iterator (or two)</div><div>=
* it should be constexpr</div><div><br></div><div>Also i suggest you create=
 PR to Boost.Algorithm (or we can work together - i will help you as mush a=
s possible). And after including into Bost.Algorithm we can write proposal =
to C++ Standard.<br><br>=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=
=BB=D1=8F 2017 =D0=B3., 12:53:19 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=
=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C d...@soundradix.com =D0=BD=D0=B0=D0=BF=
=D0=B8=D1=81=D0=B0=D0=BB:<blockquote class=3D"gmail_quote" style=3D"margin:=
 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div =
dir=3D"ltr">Hi,<div><br></div><div>Would anyone be interested in adding std=
::shift to &lt;algorithm&gt;?=C2=A0</div><div><br></div><div>It would be si=
milar to both:</div><div>- std::rotate, but without moving the head element=
s back to the tail. This would allow a more efficient implementation and cl=
earer semantics in case rotation is not needed as well as correctness in ca=
se rotation is undesired.</div><div>- &lt;algorithm&gt;&#39;s std::move/std=
::move_backward (depending on the shift direction).</div><div><br></div><di=
v>std::shift should probably accommodate both left and right shifts by one =
of:</div><div>- giving it either begin() and end(), or rbegin() and rend(),=
 similar to how std::rotate works for both left and right rotations. The ad=
vantage is compactness of the implementation.</div><div>- allowing the shif=
t count parameter to be either positive or negative. The advantage is compa=
ctness, though it might not be clear which direction is which - to be consi=
stent with rotate, positive integers should shift to the left.<br></div><di=
v><div>- having std::shift_right and std::shift_left functions. The advanta=
ge is clarity when calling the methods, although the same argument could be=
 made for having separate std::rotate_left and std::rotate_right instead of=
 std::rotate, which we don&#39;t have.</div></div><div><br></div><div>Here&=
#39;s a sample implementation of a shift to the right direction:</div><br><=
div style=3D"background-color:rgb(250,250,250);border:1px solid rgb(187,187=
,187);word-wrap:break-word"><code><div><span style=3D"color:#008">template<=
/span><span style=3D"color:#660">&lt;</span><span style=3D"color:#008">clas=
s</span><span style=3D"color:#000"> </span><span style=3D"color:#606">Bidir=
It</span><span style=3D"color:#660">&gt;</span><span style=3D"color:#000"> =
<br></span><span style=3D"color:#008">void</span><span style=3D"color:#000"=
> shift_right</span><span style=3D"color:#660">(</span><span style=3D"color=
:#606">BidirIt</span><span style=3D"color:#000"> first</span><span style=3D=
"color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"colo=
r:#606">BidirIt</span><span style=3D"color:#000"> </span><span style=3D"col=
or:#008">last</span><span style=3D"color:#660">,</span><span style=3D"color=
:#000"> </span><span style=3D"color:#008">unsigned</span><span style=3D"col=
or:#000"> </span><span style=3D"color:#008">int</span><span style=3D"color:=
#000"> n </span><span style=3D"color:#660">=3D</span><span style=3D"color:#=
000"> </span><span style=3D"color:#066">1</span><span style=3D"color:#660">=
)</span><span style=3D"color:#000"> <br></span><span style=3D"color:#660">{=
</span><span style=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">move_backward</span><sp=
an style=3D"color:#660">(</span><span style=3D"color:#000">first</span><spa=
n style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#008">last</span><span style=3D"color:#000"> </span><span style=
=3D"color:#660">-</span><span style=3D"color:#000"> n</span><span style=3D"=
color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"color=
:#008">last</span><span style=3D"color:#660">);</span><span style=3D"color:=
#000"> <br></span><span style=3D"color:#660">}</span><span style=3D"color:#=
000"><br></span></div></code></div><div><br></div><div>This demonstrates th=
at while std::shift is implementable with std::move/std::move_backward,</di=
v><div>1) It isn&#39;t immediately clear from the code (at least to my eyes=
) that this is a shift right, unless you are intimately familiar with std::=
move_backward.</div><div>2) Different calls, either to std::move or to std:=
:move_backward, are required, depending on the shift direction.</div><div><=
br></div><div>So, implementing std::shift would allow writing more readable=
 code.</div><div><br></div><div>Thanks,</div><div>Dan</div></div></blockquo=
te></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a=
%40isocpp.org</a>.<br />

------=_Part_7947_606884531.1499858282949--

------=_Part_7946_1506611560.1499858282949--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Wed, 12 Jul 2017 16:56:11 +0300
Raw View
--001a11408742f5858105541f2e72
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Sure, it can return an iterator (or at least have an overload which does)
similar to std::rotate / std::move.
I agree about constexpr, but I guess that would come with the rest of the
<algorithm> algorithms become constexpr.

Since it's such a simple algorithm, with the main benefit of adding it to
the STL being adding readability/efficiency/concise, I'm not whether
submitting it to boost.algorithm first would be a more effective way to go
than just making a proposal. What do you think?

Thanks,
Dan

On Wed, Jul 12, 2017 at 2:18 PM, Alexander Zaitsev <zamazan4ik@gmail.com>
wrote:

> Hello.
>
> Really nice idea! But i have some suggestions:
> * shift should return iterator (or two)
> * it should be constexpr
>
> Also i suggest you create PR to Boost.Algorithm (or we can work together =
-
> i will help you as mush as possible). And after including into
> Bost.Algorithm we can write proposal to C++ Standard.
>
> =D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3.,=
 12:53:19 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=
=B5=D0=BB=D1=8C d...@soundradix.com
> =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>>
>> Hi,
>>
>> Would anyone be interested in adding std::shift to <algorithm>?
>>
>> It would be similar to both:
>> - std::rotate, but without moving the head elements back to the tail.
>> This would allow a more efficient implementation and clearer semantics i=
n
>> case rotation is not needed as well as correctness in case rotation is
>> undesired.
>> - <algorithm>'s std::move/std::move_backward (depending on the shift
>> direction).
>>
>> std::shift should probably accommodate both left and right shifts by one
>> of:
>> - giving it either begin() and end(), or rbegin() and rend(), similar to
>> how std::rotate works for both left and right rotations. The advantage i=
s
>> compactness of the implementation.
>> - allowing the shift count parameter to be either positive or negative.
>> The advantage is compactness, though it might not be clear which directi=
on
>> is which - to be consistent with rotate, positive integers should shift =
to
>> the left.
>> - having std::shift_right and std::shift_left functions. The advantage i=
s
>> clarity when calling the methods, although the same argument could be ma=
de
>> for having separate std::rotate_left and std::rotate_right instead of
>> std::rotate, which we don't have.
>>
>> Here's a sample implementation of a shift to the right direction:
>>
>> template<class BidirIt>
>> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)
>> {
>>     std::move_backward(first, last - n, last);
>> }
>>
>> This demonstrates that while std::shift is implementable with
>> std::move/std::move_backward,
>> 1) It isn't immediately clear from the code (at least to my eyes) that
>> this is a shift right, unless you are intimately familiar with
>> std::move_backward.
>> 2) Different calls, either to std::move or to std::move_backward, are
>> required, depending on the shift direction.
>>
>> So, implementing std::shift would allow writing more readable code.
>>
>> Thanks,
>> Dan
>>
> --
> 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.
> To view this discussion on the web visit https://groups.google.com/a/
> isocpp.org/d/msgid/std-proposals/55df161b-f0c5-4d81-
> ad1d-882425e7bf8a%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/55df161b-f0=
c5-4d81-ad1d-882425e7bf8a%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CADw4SdSinGPK9rYUm4LHW-f%3DA3fW6R3si%2BLu%2BAqoJ=
%3DbQNBMvTQ%40mail.gmail.com.

--001a11408742f5858105541f2e72
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Sure, it can return an iterator (or at least have an overl=
oad which does) similar to std::rotate / std::move.<div>I agree about const=
expr, but I guess that would come with the rest of the &lt;algorithm&gt; al=
gorithms become constexpr.</div><div><br></div><div>Since it&#39;s such a s=
imple algorithm, with the main benefit of adding it to the STL being adding=
 readability/efficiency/<wbr>concise, I&#39;m not whether submitting it to =
boost.algorithm first would be a more effective way to go than just making =
a proposal. What do you think?</div><div><br></div><div>Thanks,</div><div>D=
an</div></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On =
Wed, Jul 12, 2017 at 2:18 PM, Alexander Zaitsev <span dir=3D"ltr">&lt;<a hr=
ef=3D"mailto:zamazan4ik@gmail.com" target=3D"_blank">zamazan4ik@gmail.com</=
a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hel=
lo.<div><br></div><div>Really nice idea! But i have some suggestions:</div>=
<div>* shift should return iterator (or two)</div><div>* it should be const=
expr</div><div><br></div><div>Also i suggest you create PR to Boost.Algorit=
hm (or we can work together - i will help you as mush as possible). And aft=
er including into Bost.Algorithm we can write proposal to C++ Standard.<br>=
<br>=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3=
.., 12:53:19 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=
=B5=D0=BB=D1=8C <a href=3D"mailto:d...@soundradix.com" target=3D"_blank">d.=
...@soundradix.com</a> =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:<span clas=
s=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br=
></div><div>Would anyone be interested in adding std::shift to &lt;algorith=
m&gt;?=C2=A0</div><div><br></div><div>It would be similar to both:</div><di=
v>- std::rotate, but without moving the head elements back to the tail. Thi=
s would allow a more efficient implementation and clearer semantics in case=
 rotation is not needed as well as correctness in case rotation is undesire=
d.</div><div>- &lt;algorithm&gt;&#39;s std::move/std::move_backward (depend=
ing on the shift direction).</div><div><br></div><div>std::shift should pro=
bably accommodate both left and right shifts by one of:</div><div>- giving =
it either begin() and end(), or rbegin() and rend(), similar to how std::ro=
tate works for both left and right rotations. The advantage is compactness =
of the implementation.</div><div>- allowing the shift count parameter to be=
 either positive or negative. The advantage is compactness, though it might=
 not be clear which direction is which - to be consistent with rotate, posi=
tive integers should shift to the left.<br></div><div><div>- having std::sh=
ift_right and std::shift_left functions. The advantage is clarity when call=
ing the methods, although the same argument could be made for having separa=
te std::rotate_left and std::rotate_right instead of std::rotate, which we =
don&#39;t have.</div></div><div><br></div><div>Here&#39;s a sample implemen=
tation of a shift to the right direction:</div><br><div style=3D"background=
-color:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:break-w=
ord"><code><div><span style=3D"color:#008">template</span><span style=3D"co=
lor:#660">&lt;</span><span style=3D"color:#008">class</span><span style=3D"=
color:#000"> </span><span style=3D"color:#606">BidirIt</span><span style=3D=
"color:#660">&gt;</span><span style=3D"color:#000"> <br></span><span style=
=3D"color:#008">void</span><span style=3D"color:#000"> shift_right</span><s=
pan style=3D"color:#660">(</span><span style=3D"color:#606">BidirIt</span><=
span style=3D"color:#000"> first</span><span style=3D"color:#660">,</span><=
span style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</span>=
<span style=3D"color:#000"> </span><span style=3D"color:#008">last</span><s=
pan style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span s=
tyle=3D"color:#008">unsigned</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#008">int</span><span style=3D"color:#000"> n </span><span =
style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#066">1</span><span style=3D"color:#660">)</span><span style=3D=
"color:#000"> <br></span><span style=3D"color:#660">{</span><span style=3D"=
color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</spa=
n><span style=3D"color:#000">move_backward</span><span style=3D"color:#660"=
>(</span><span style=3D"color:#000">first</span><span style=3D"color:#660">=
,</span><span style=3D"color:#000"> </span><span style=3D"color:#008">last<=
/span><span style=3D"color:#000"> </span><span style=3D"color:#660">-</span=
><span style=3D"color:#000"> n</span><span style=3D"color:#660">,</span><sp=
an style=3D"color:#000"> </span><span style=3D"color:#008">last</span><span=
 style=3D"color:#660">);</span><span style=3D"color:#000"> <br></span><span=
 style=3D"color:#660">}</span><span style=3D"color:#000"><br></span></div><=
/code></div><div><br></div><div>This demonstrates that while std::shift is =
implementable with std::move/std::move_backward,</div><div>1) It isn&#39;t =
immediately clear from the code (at least to my eyes) that this is a shift =
right, unless you are intimately familiar with std::move_backward.</div><di=
v>2) Different calls, either to std::move or to std::move_backward, are req=
uired, depending on the shift direction.</div><div><br></div><div>So, imple=
menting std::shift would allow writing more readable code.</div><div><br></=
div><div>Thanks,</div><div>Dan</div></div></blockquote></span></div></div><=
span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/55df=
161b-f0c5-4d81-<wbr>ad1d-882425e7bf8a%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CADw4SdSinGPK9rYUm4LHW-f%3DA3fW6R3si%=
2BLu%2BAqoJ%3DbQNBMvTQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoo=
ter">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CADw4SdSi=
nGPK9rYUm4LHW-f%3DA3fW6R3si%2BLu%2BAqoJ%3DbQNBMvTQ%40mail.gmail.com</a>.<br=
 />

--001a11408742f5858105541f2e72--

.


Author: Alexander Zaitsev <zamazan4ik@gmail.com>
Date: Wed, 12 Jul 2017 08:50:18 -0700 (PDT)
Raw View
------=_Part_7487_751277939.1499874618532
Content-Type: multipart/alternative;
 boundary="----=_Part_7488_592900968.1499874618533"

------=_Part_7488_592900968.1499874618533
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

whatever I will add these algorithms to Boost.Algorithm (i am=20
Boost.Algorithm developer). If you have some prototype of proposal already,=
=20
pls send it me. We can discuss, improve your solution and after that i will=
=20
implement it to Boost.Algorithm.=20

=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 1=
6:56:34 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=
=D0=BB=D1=8C Dan Raviv =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>
> Sure, it can return an iterator (or at least have an overload which does)=
=20
> similar to std::rotate / std::move.
> I agree about constexpr, but I guess that would come with the rest of the=
=20
> <algorithm> algorithms become constexpr.
>
> Since it's such a simple algorithm, with the main benefit of adding it to=
=20
> the STL being adding readability/efficiency/concise, I'm not whether=20
> submitting it to boost.algorithm first would be a more effective way to g=
o=20
> than just making a proposal. What do you think?
>
> Thanks,
> Dan
>
> On Wed, Jul 12, 2017 at 2:18 PM, Alexander Zaitsev <zamaz...@gmail.com=20
> <javascript:>> wrote:
>
>> Hello.
>>
>> Really nice idea! But i have some suggestions:
>> * shift should return iterator (or two)
>> * it should be constexpr
>>
>> Also i suggest you create PR to Boost.Algorithm (or we can work together=
=20
>> - i will help you as mush as possible). And after including into=20
>> Bost.Algorithm we can write proposal to C++ Standard.
>>
>> =D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3.=
, 12:53:19 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=
=B5=D0=BB=D1=8C d...@soundradix.com=20
>> =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>>>
>>> Hi,
>>>
>>> Would anyone be interested in adding std::shift to <algorithm>?=20
>>>
>>> It would be similar to both:
>>> - std::rotate, but without moving the head elements back to the tail.=
=20
>>> This would allow a more efficient implementation and clearer semantics =
in=20
>>> case rotation is not needed as well as correctness in case rotation is=
=20
>>> undesired.
>>> - <algorithm>'s std::move/std::move_backward (depending on the shift=20
>>> direction).
>>>
>>> std::shift should probably accommodate both left and right shifts by on=
e=20
>>> of:
>>> - giving it either begin() and end(), or rbegin() and rend(), similar t=
o=20
>>> how std::rotate works for both left and right rotations. The advantage =
is=20
>>> compactness of the implementation.
>>> - allowing the shift count parameter to be either positive or negative.=
=20
>>> The advantage is compactness, though it might not be clear which direct=
ion=20
>>> is which - to be consistent with rotate, positive integers should shift=
 to=20
>>> the left.
>>> - having std::shift_right and std::shift_left functions. The advantage=
=20
>>> is clarity when calling the methods, although the same argument could b=
e=20
>>> made for having separate std::rotate_left and std::rotate_right instead=
 of=20
>>> std::rotate, which we don't have.
>>>
>>> Here's a sample implementation of a shift to the right direction:
>>>
>>> template<class BidirIt>=20
>>> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)=20
>>> {=20
>>>     std::move_backward(first, last - n, last);=20
>>> }
>>>
>>> This demonstrates that while std::shift is implementable with=20
>>> std::move/std::move_backward,
>>> 1) It isn't immediately clear from the code (at least to my eyes) that=
=20
>>> this is a shift right, unless you are intimately familiar with=20
>>> std::move_backward.
>>> 2) Different calls, either to std::move or to std::move_backward, are=
=20
>>> required, depending on the shift direction.
>>>
>>> So, implementing std::shift would allow writing more readable code.
>>>
>>> Thanks,
>>> Dan
>>>
>> --=20
>> You received this message because you are subscribed to the Google Group=
s=20
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n=20
>> email to std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit=20
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/55df161b-f0=
c5-4d81-ad1d-882425e7bf8a%40isocpp.org=20
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/55df161b-f=
0c5-4d81-ad1d-882425e7bf8a%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/1130610b-86b8-4533-a080-c365ffdd3489%40isocpp.or=
g.

------=_Part_7488_592900968.1499874618533
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><span style=3D"color: rgb(0, 0, 0); font-family: arial, sa=
ns-serif; white-space: nowrap; text-decoration: underline;">whatever=C2=A0<=
/span>I will add these algorithms to Boost.Algorithm (i am Boost.Algorithm =
developer). If you have some prototype of proposal already, pls send it me.=
 We can discuss, improve your solution and after that i will implement it t=
o Boost.Algorithm.=C2=A0<br><br>=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=
=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 16:56:34 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=
=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C Dan Raviv =D0=BD=D0=B0=D0=BF=
=D0=B8=D1=81=D0=B0=D0=BB:<blockquote class=3D"gmail_quote" style=3D"margin:=
 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div =
dir=3D"ltr">Sure, it can return an iterator (or at least have an overload w=
hich does) similar to std::rotate / std::move.<div>I agree about constexpr,=
 but I guess that would come with the rest of the &lt;algorithm&gt; algorit=
hms become constexpr.</div><div><br></div><div>Since it&#39;s such a simple=
 algorithm, with the main benefit of adding it to the STL being adding read=
ability/efficiency/<wbr>concise, I&#39;m not whether submitting it to boost=
..algorithm first would be a more effective way to go than just making a pro=
posal. What do you think?</div><div><br></div><div>Thanks,</div><div>Dan</d=
iv></div><div><br><div class=3D"gmail_quote">On Wed, Jul 12, 2017 at 2:18 P=
M, Alexander Zaitsev <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=
=3D"_blank" gdf-obfuscated-mailto=3D"ZR_Ya3IUBgAJ" rel=3D"nofollow" onmouse=
down=3D"this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.hre=
f=3D&#39;javascript:&#39;;return true;">zamaz...@gmail.com</a>&gt;</span> w=
rote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hello.<div><br></d=
iv><div>Really nice idea! But i have some suggestions:</div><div>* shift sh=
ould return iterator (or two)</div><div>* it should be constexpr</div><div>=
<br></div><div>Also i suggest you create PR to Boost.Algorithm (or we can w=
ork together - i will help you as mush as possible). And after including in=
to Bost.Algorithm we can write proposal to C++ Standard.<br><br>=D1=81=D1=
=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 12:53:19 U=
TC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=
=8C <a>d...@soundradix.com</a> =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:<=
span><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br><=
/div><div>Would anyone be interested in adding std::shift to &lt;algorithm&=
gt;?=C2=A0</div><div><br></div><div>It would be similar to both:</div><div>=
- std::rotate, but without moving the head elements back to the tail. This =
would allow a more efficient implementation and clearer semantics in case r=
otation is not needed as well as correctness in case rotation is undesired.=
</div><div>- &lt;algorithm&gt;&#39;s std::move/std::move_backward (dependin=
g on the shift direction).</div><div><br></div><div>std::shift should proba=
bly accommodate both left and right shifts by one of:</div><div>- giving it=
 either begin() and end(), or rbegin() and rend(), similar to how std::rota=
te works for both left and right rotations. The advantage is compactness of=
 the implementation.</div><div>- allowing the shift count parameter to be e=
ither positive or negative. The advantage is compactness, though it might n=
ot be clear which direction is which - to be consistent with rotate, positi=
ve integers should shift to the left.<br></div><div><div>- having std::shif=
t_right and std::shift_left functions. The advantage is clarity when callin=
g the methods, although the same argument could be made for having separate=
 std::rotate_left and std::rotate_right instead of std::rotate, which we do=
n&#39;t have.</div></div><div><br></div><div>Here&#39;s a sample implementa=
tion of a shift to the right direction:</div><br><div style=3D"background-c=
olor:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:break-wor=
d"><code><div><span style=3D"color:#008">template</span><span style=3D"colo=
r:#660">&lt;</span><span style=3D"color:#008">class</span><span style=3D"co=
lor:#000"> </span><span style=3D"color:#606">BidirIt</span><span style=3D"c=
olor:#660">&gt;</span><span style=3D"color:#000"> <br></span><span style=3D=
"color:#008">void</span><span style=3D"color:#000"> shift_right</span><span=
 style=3D"color:#660">(</span><span style=3D"color:#606">BidirIt</span><spa=
n style=3D"color:#000"> first</span><span style=3D"color:#660">,</span><spa=
n style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</span><sp=
an style=3D"color:#000"> </span><span style=3D"color:#008">last</span><span=
 style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span styl=
e=3D"color:#008">unsigned</span><span style=3D"color:#000"> </span><span st=
yle=3D"color:#008">int</span><span style=3D"color:#000"> n </span><span sty=
le=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><span style=
=3D"color:#066">1</span><span style=3D"color:#660">)</span><span style=3D"c=
olor:#000"> <br></span><span style=3D"color:#660">{</span><span style=3D"co=
lor:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span>=
<span style=3D"color:#000">move_backward</span><span style=3D"color:#660">(=
</span><span style=3D"color:#000">first</span><span style=3D"color:#660">,<=
/span><span style=3D"color:#000"> </span><span style=3D"color:#008">last</s=
pan><span style=3D"color:#000"> </span><span style=3D"color:#660">-</span><=
span style=3D"color:#000"> n</span><span style=3D"color:#660">,</span><span=
 style=3D"color:#000"> </span><span style=3D"color:#008">last</span><span s=
tyle=3D"color:#660">);</span><span style=3D"color:#000"> <br></span><span s=
tyle=3D"color:#660">}</span><span style=3D"color:#000"><br></span></div></c=
ode></div><div><br></div><div>This demonstrates that while std::shift is im=
plementable with std::move/std::move_backward,</div><div>1) It isn&#39;t im=
mediately clear from the code (at least to my eyes) that this is a shift ri=
ght, unless you are intimately familiar with std::move_backward.</div><div>=
2) Different calls, either to std::move or to std::move_backward, are requi=
red, depending on the shift direction.</div><div><br></div><div>So, impleme=
nting std::shift would allow writing more readable code.</div><div><br></di=
v><div>Thanks,</div><div>Dan</div></div></blockquote></span></div></div><sp=
an>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
ZR_Ya3IUBgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&=
#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"ZR_Ya3IUBgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank" =
rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://groups.google.com/=
a/isocpp.org/d/msgid/std-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a%40i=
socpp.org?utm_medium\x3demail\x26utm_source\x3dfooter&#39;;return true;" on=
click=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/msgid/st=
d-proposals/55df161b-f0c5-4d81-ad1d-882425e7bf8a%40isocpp.org?utm_medium\x3=
demail\x26utm_source\x3dfooter&#39;;return true;">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/55df161b-f0c5-4d81-<wbr>ad1d-=
882425e7bf8a%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/1130610b-86b8-4533-a080-c365ffdd3489%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/1130610b-86b8-4533-a080-c365ffdd3489=
%40isocpp.org</a>.<br />

------=_Part_7488_592900968.1499874618533--

------=_Part_7487_751277939.1499874618532--

.


Author: Ray Hamel <rayghamel@gmail.com>
Date: Wed, 12 Jul 2017 10:10:39 -0700 (PDT)
Raw View
------=_Part_56_1395443315.1499879439543
Content-Type: multipart/alternative;
 boundary="----=_Part_57_1582464980.1499879439543"

------=_Part_57_1582464980.1499879439543
Content-Type: text/plain; charset="UTF-8"

A couple additional comments about your sample implementation:

`n` should be `std::iterator_traits<BidirIt>::difference_type`, which is a
signed type (usually `std::ptrdiff_t`), instead of `unsigned`.

Bidirectional iterators aren't required to implement `operator-`, so the
second argument to `std::move_backward` should be `std::prev(last, n)`
instead of `last - n`.

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a33d3e68-f629-4048-8716-418b5778d471%40isocpp.org.

------=_Part_57_1582464980.1499879439543
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">A couple additional comments about your sample implementat=
ion:<div><br></div><div><font face=3D"arial, sans-serif">`</font><font face=
=3D"courier new, monospace">n</font><font face=3D"arial, sans-serif">`=C2=
=A0should be `</font><font face=3D"courier new, monospace">std::iterator_tr=
aits&lt;BidirIt&gt;::difference_type</font><span style=3D"font-family: aria=
l, sans-serif;">`, which is a signed type (usually `</span><font face=3D"co=
urier new, monospace">std::ptrdiff_t</font><span style=3D"font-family: aria=
l, sans-serif;">`), i</span><font face=3D"arial, sans-serif">nstead of `</f=
ont><font face=3D"courier new, monospace">unsigned</font><font face=3D"aria=
l, sans-serif">`</font><span style=3D"font-family: arial, sans-serif;">.</s=
pan></div><div><span style=3D"font-family: arial, sans-serif;"><br></span><=
/div><div><span style=3D"font-family: arial, sans-serif;">Bidirectional ite=
rators aren&#39;t required to implement `</span><font face=3D"courier new, =
monospace">operator-</font><span style=3D"font-family: arial, sans-serif;">=
`, so the second argument to `</span><font face=3D"courier new, monospace">=
std::move_backward</font><span style=3D"font-family: arial, sans-serif;">` =
should be `</span><font face=3D"courier new, monospace">std::prev(last, n)<=
/font><span style=3D"font-family: arial, sans-serif;">` instead of `</span>=
<font face=3D"courier new, monospace">last - n</font><span style=3D"font-fa=
mily: arial, sans-serif;">`.</span></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a33d3e68-f629-4048-8716-418b5778d471%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a33d3e68-f629-4048-8716-418b5778d471=
%40isocpp.org</a>.<br />

------=_Part_57_1582464980.1499879439543--

------=_Part_56_1395443315.1499879439543--

.


Author: Alexander Zaitsev <zamazan4ik@gmail.com>
Date: Wed, 12 Jul 2017 10:17:29 -0700 (PDT)
Raw View
------=_Part_53_762262222.1499879849953
Content-Type: multipart/alternative;
 boundary="----=_Part_54_669482072.1499879849953"

------=_Part_54_669482072.1499879849953
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Yeah, you are right :)

We should create the most general implementation and efficient=20
implementation for any iterator type.=20

Also we should decide about type of shifting: circular and/or logical=20
shifting ( https://en.wikipedia.org/wiki/Circular_shift ).

=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 2=
0:10:39 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=
=D0=BB=D1=8C Ray Hamel =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>
> A couple additional comments about your sample implementation:
>
> `n` should be `std::iterator_traits<BidirIt>::difference_type`, which is=
=20
> a signed type (usually `std::ptrdiff_t`), instead of `unsigned`.
>
> Bidirectional iterators aren't required to implement `operator-`, so the=
=20
> second argument to `std::move_backward` should be `std::prev(last, n)`=20
> instead of `last - n`.
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/48819b6e-f08d-46b8-bc88-08d3640509a1%40isocpp.or=
g.

------=_Part_54_669482072.1499879849953
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Yeah, you are right :)<div><br></div><div>We should create=
 the most general implementation and efficient implementation for any itera=
tor type.=C2=A0<br><br>Also we should decide about type of shifting: circul=
ar and/or logical shifting ( https://en.wikipedia.org/wiki/Circular_shift=
=C2=A0).<br><br>=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F=
 2017 =D0=B3., 20:10:39 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=
=B0=D1=82=D0=B5=D0=BB=D1=8C Ray Hamel =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=
=D0=BB:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.=
8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">A coup=
le additional comments about your sample implementation:<div><br></div><div=
><font face=3D"arial, sans-serif">`</font><font face=3D"courier new, monosp=
ace">n</font><font face=3D"arial, sans-serif">`=C2=A0should be `</font><fon=
t face=3D"courier new, monospace">std::iterator_traits&lt;BidirIt&gt;<wbr>:=
:difference_type</font><span style=3D"font-family:arial,sans-serif">`, whic=
h is a signed type (usually `</span><font face=3D"courier new, monospace">s=
td::ptrdiff_t</font><span style=3D"font-family:arial,sans-serif">`), i</spa=
n><font face=3D"arial, sans-serif">nstead of `</font><font face=3D"courier =
new, monospace">unsigned</font><font face=3D"arial, sans-serif">`</font><sp=
an style=3D"font-family:arial,sans-serif">.</span></div><div><span style=3D=
"font-family:arial,sans-serif"><br></span></div><div><span style=3D"font-fa=
mily:arial,sans-serif">Bidirectional iterators aren&#39;t required to imple=
ment `</span><font face=3D"courier new, monospace">operator-</font><span st=
yle=3D"font-family:arial,sans-serif">`, so the second argument to `</span><=
font face=3D"courier new, monospace">std::move_backward</font><span style=
=3D"font-family:arial,sans-serif">` should be `</span><font face=3D"courier=
 new, monospace">std::prev(last, n)</font><span style=3D"font-family:arial,=
sans-serif">` instead of `</span><font face=3D"courier new, monospace">last=
 - n</font><span style=3D"font-family:arial,sans-serif">`.</span></div></di=
v></blockquote></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/48819b6e-f08d-46b8-bc88-08d3640509a1%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/48819b6e-f08d-46b8-bc88-08d3640509a1=
%40isocpp.org</a>.<br />

------=_Part_54_669482072.1499879849953--

------=_Part_53_762262222.1499879849953--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Wed, 12 Jul 2017 11:46:51 -0700 (PDT)
Raw View
------=_Part_182_798985797.1499885211734
Content-Type: multipart/alternative;
 boundary="----=_Part_183_464652086.1499885211734"

------=_Part_183_464652086.1499885211734
Content-Type: text/plain; charset="UTF-8"

On Wednesday, July 12, 2017 at 1:17:30 PM UTC-4, Alexander Zaitsev wrote:
>
> Yeah, you are right :)
>
> We should create the most general implementation and efficient
> implementation for any iterator type.
>
> Also we should decide about type of shifting: circular and/or logical
> shifting ( https://en.wikipedia.org/wiki/Circular_shift ).
>

Isn't circular shift just `std::rotate
<http://en.cppreference.com/w/cpp/algorithm/rotate>`?

And how would a logical shift work? Would it value-initialize all of the
empty entries? Would it take a value to copy into them? Would it leave them
in the moved-from state?

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/5666b7ac-b35e-4e9c-90ce-43a246b95f1a%40isocpp.org.

------=_Part_183_464652086.1499885211734
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Wednesday, July 12, 2017 at 1:17:30 PM UTC-4, Alexander=
 Zaitsev wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
">Yeah, you are right :)<div><br></div><div>We should create the most gener=
al implementation and efficient implementation for any iterator type.=C2=A0=
<br><br>Also we should decide about type of shifting: circular and/or logic=
al shifting ( <a href=3D"https://en.wikipedia.org/wiki/Circular_shift" targ=
et=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://www.=
google.com/url?q\x3dhttps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCircular_shift\=
x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGhhryP9byJ1Xvxy2Ow0ybk9f0MYw&#39;;r=
eturn true;" onclick=3D"this.href=3D&#39;https://www.google.com/url?q\x3dht=
tps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCircular_shift\x26sa\x3dD\x26sntz\x3d=
1\x26usg\x3dAFQjCNGhhryP9byJ1Xvxy2Ow0ybk9f0MYw&#39;;return true;">https://e=
n.wikipedia.org/wiki/<wbr>Circular_shift</a>=C2=A0).<br></div></div></block=
quote><div><br>Isn&#39;t circular shift just `<a href=3D"http://en.cpprefer=
ence.com/w/cpp/algorithm/rotate">std::rotate</a>`?<br><br>And how would a l=
ogical shift work? Would it value-initialize all of the empty entries? Woul=
d it take a value to copy into them? Would it leave them in the moved-from =
state?<br></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/5666b7ac-b35e-4e9c-90ce-43a246b95f1a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/5666b7ac-b35e-4e9c-90ce-43a246b95f1a=
%40isocpp.org</a>.<br />

------=_Part_183_464652086.1499885211734--

------=_Part_182_798985797.1499885211734--

.


Author: Dan Raviv <dan@soundradix.com>
Date: Wed, 12 Jul 2017 22:11:24 +0300
Raw View
--f403045ec85411c0a10554239591
Content-Type: text/plain; charset="UTF-8"

Indeed, circular shift is just std::rotate.

For the 'logical' shift,  I was thinking leaving them in the moved-from
state. Filling them with some value would both 1) have a cost 2) not
necessarily be desired.
So I'm for the same behavior as the equivalent std::move[_backward], at
least by default.

It is possible to add an optional fill-in value parameter, if that's
something that would be deemed useful enough.

On Wed, Jul 12, 2017 at 9:46 PM, Nicol Bolas <jmckesson@gmail.com> wrote:

> On Wednesday, July 12, 2017 at 1:17:30 PM UTC-4, Alexander Zaitsev wrote:
>>
>> Yeah, you are right :)
>>
>> We should create the most general implementation and efficient
>> implementation for any iterator type.
>>
>> Also we should decide about type of shifting: circular and/or logical
>> shifting ( https://en.wikipedia.org/wiki/Circular_shift ).
>>
>
> Isn't circular shift just `std::rotate
> <http://en.cppreference.com/w/cpp/algorithm/rotate>`?
>
> And how would a logical shift work? Would it value-initialize all of the
> empty entries? Would it take a value to copy into them? Would it leave them
> in the moved-from state?
>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJ7KwrNU1eo%3DCLR3D4WWywwWMLGWFzLtbHN%2BQga_9GSArL0Apg%40mail.gmail.com.

--f403045ec85411c0a10554239591
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Indeed, circular shift is just std::rotate.<div><br></div>=
<div>For the &#39;logical&#39; shift, =C2=A0I was thinking leaving them in =
the moved-from state. Filling them with some value would both 1) have a cos=
t 2) not necessarily be desired.=C2=A0</div><div>So I&#39;m for the same be=
havior as the equivalent std::move[_backward], at least by default.</div><d=
iv><br></div><div>It is possible to add an optional fill-in value parameter=
, if that&#39;s something that would be deemed useful enough.</div></div><d=
iv class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Wed, Jul 12, 201=
7 at 9:46 PM, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson=
@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</span> wrote:<br>=
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span class=3D"">On Wednesd=
ay, July 12, 2017 at 1:17:30 PM UTC-4, Alexander Zaitsev wrote:<blockquote =
class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div dir=3D"ltr">Yeah, you are right :)<div><br=
></div><div>We should create the most general implementation and efficient =
implementation for any iterator type.=C2=A0<br><br>Also we should decide ab=
out type of shifting: circular and/or logical shifting ( <a href=3D"https:/=
/en.wikipedia.org/wiki/Circular_shift" rel=3D"nofollow" target=3D"_blank">h=
ttps://en.wikipedia.org/wiki/<wbr>Circular_shift</a>=C2=A0).<br></div></div=
></blockquote></span><div><br>Isn&#39;t circular shift just `<a href=3D"htt=
p://en.cppreference.com/w/cpp/algorithm/rotate" target=3D"_blank">std::rota=
te</a>`?<br><br>And how would a logical shift work? Would it value-initiali=
ze all of the empty entries? Would it take a value to copy into them? Would=
 it leave them in the moved-from state?<br></div></div></blockquote></div><=
br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAJ7KwrNU1eo%3DCLR3D4WWywwWMLGWFzLtbH=
N%2BQga_9GSArL0Apg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJ7KwrNU1eo%=
3DCLR3D4WWywwWMLGWFzLtbHN%2BQga_9GSArL0Apg%40mail.gmail.com</a>.<br />

--f403045ec85411c0a10554239591--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Wed, 12 Jul 2017 12:51:23 -0700 (PDT)
Raw View
------=_Part_24_184945050.1499889083880
Content-Type: multipart/alternative;
 boundary="----=_Part_25_655899050.1499889083880"

------=_Part_25_655899050.1499889083880
Content-Type: text/plain; charset="UTF-8"

On Wednesday, July 12, 2017 at 3:11:27 PM UTC-4, Dan Raviv wrote:
>
> Indeed, circular shift is just std::rotate.
>
> For the 'logical' shift,  I was thinking leaving them in the moved-from
> state. Filling them with some value would both 1) have a cost 2) not
> necessarily be desired.
>

But logical bitshifts do fill in a specific, well-defined value. So if this
is going to be separate from `move[_backward]`, then it ought to have the
behavior a user would expect.

So I'm for the same behavior as the equivalent std::move[_backward], at
> least by default.
>

> It is possible to add an optional fill-in value parameter, if that's
> something that would be deemed useful enough.
>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/df32b9a3-9215-4517-9bba-ba42654c55ee%40isocpp.org.

------=_Part_25_655899050.1499889083880
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Wednesday, July 12, 2017 at 3:11:27 PM UTC-4, Dan Raviv=
 wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.=
8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">Indeed=
, circular shift is just std::rotate.<div><br></div><div>For the &#39;logic=
al&#39; shift, =C2=A0I was thinking leaving them in the moved-from state. F=
illing them with some value would both 1) have a cost 2) not necessarily be=
 desired.</div></div></blockquote><div><br>But logical bitshifts do fill in=
 a specific, well-defined value. So if this is going to be separate from `m=
ove[_backward]`, then it ought to have the behavior a user would expect.<br=
><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left=
: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><d=
iv>So I&#39;m for the same behavior as the equivalent std::move[_backward],=
 at least by default.</div></div></blockquote><div></div><blockquote class=
=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #cc=
c solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br></div><div>It is poss=
ible to add an optional fill-in value parameter, if that&#39;s something th=
at would be deemed useful enough.</div></div></blockquote><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/df32b9a3-9215-4517-9bba-ba42654c55ee%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/df32b9a3-9215-4517-9bba-ba42654c55ee=
%40isocpp.org</a>.<br />

------=_Part_25_655899050.1499889083880--

------=_Part_24_184945050.1499889083880--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Thu, 13 Jul 2017 00:14:38 +0300
Raw View
--001a1137cfe8fe0c8c0554254ee3
Content-Type: text/plain; charset="UTF-8"

I guess I shouldn't have consented to use the term 'logical' shift which
Alexander used, I was just mirroring his term, but I see it just resulted
in confusion.
I'm discussing a shift of elements inside a generic container. It isn't
'logical' in any numeric sense.

Implementing a logical shift (say for vector<bool>), which would handle
positive and negative numbers correctly, is out of the scope for this
proposal idea, I think.



On Wed, Jul 12, 2017 at 10:51 PM, Nicol Bolas <jmckesson@gmail.com> wrote:

> On Wednesday, July 12, 2017 at 3:11:27 PM UTC-4, Dan Raviv wrote:
>>
>> Indeed, circular shift is just std::rotate.
>>
>> For the 'logical' shift,  I was thinking leaving them in the moved-from
>> state. Filling them with some value would both 1) have a cost 2) not
>> necessarily be desired.
>>
>
> But logical bitshifts do fill in a specific, well-defined value. So if
> this is going to be separate from `move[_backward]`, then it ought to have
> the behavior a user would expect.
>
> So I'm for the same behavior as the equivalent std::move[_backward], at
>> least by default.
>>
>
>> It is possible to add an optional fill-in value parameter, if that's
>> something that would be deemed useful enough.
>>
>
> --
> 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.
> To view this discussion on the web visit https://groups.google.com/a/
> isocpp.org/d/msgid/std-proposals/df32b9a3-9215-4517-
> 9bba-ba42654c55ee%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/df32b9a3-9215-4517-9bba-ba42654c55ee%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CADw4SdTSRXazyZUMrD_g%2BzS5HBLWPELDUzHjfEgZNd_AcC6_YA%40mail.gmail.com.

--001a1137cfe8fe0c8c0554254ee3
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>I guess I shouldn&#39;t have consented to use the ter=
m &#39;logical&#39; shift which Alexander used, I was just mirroring his te=
rm, but I see it just resulted in confusion.</div><div>I&#39;m discussing a=
 shift of elements inside a generic container. It isn&#39;t &#39;logical&#3=
9; in any numeric sense.</div><div><br></div><div>Implementing a logical sh=
ift (say for vector&lt;bool&gt;), which would handle positive and negative =
numbers correctly, is out of the scope for this proposal idea, I think.</di=
v><div><br></div><div><br></div></div><div class=3D"gmail_extra"><br><div c=
lass=3D"gmail_quote">On Wed, Jul 12, 2017 at 10:51 PM, Nicol Bolas <span di=
r=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmck=
esson@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" =
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><di=
v dir=3D"ltr"><span class=3D"">On Wednesday, July 12, 2017 at 3:11:27 PM UT=
C-4, Dan Raviv wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;ma=
rgin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r">Indeed, circular shift is just std::rotate.<div><br></div><div>For the &=
#39;logical&#39; shift, =C2=A0I was thinking leaving them in the moved-from=
 state. Filling them with some value would both 1) have a cost 2) not neces=
sarily be desired.</div></div></blockquote></span><div><br>But logical bits=
hifts do fill in a specific, well-defined value. So if this is going to be =
separate from `move[_backward]`, then it ought to have the behavior a user =
would expect.<br><br></div><span class=3D""><blockquote class=3D"gmail_quot=
e" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-l=
eft:1ex"><div dir=3D"ltr"><div>So I&#39;m for the same behavior as the equi=
valent std::move[_backward], at least by default.</div></div></blockquote><=
div></div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br=
></div><div>It is possible to add an optional fill-in value parameter, if t=
hat&#39;s something that would be deemed useful enough.</div></div></blockq=
uote><br></span></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/df32b9a3-9215-4517-9bba-ba42654c55ee%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/df32=
b9a3-9215-4517-<wbr>9bba-ba42654c55ee%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CADw4SdTSRXazyZUMrD_g%2BzS5HBLWPELDUz=
HjfEgZNd_AcC6_YA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CADw4SdTSRXazyZ=
UMrD_g%2BzS5HBLWPELDUzHjfEgZNd_AcC6_YA%40mail.gmail.com</a>.<br />

--001a1137cfe8fe0c8c0554254ee3--

.


Author: Alexander Zaitsev <zamazan4ik@gmail.com>
Date: Wed, 12 Jul 2017 15:18:10 -0700 (PDT)
Raw View
------=_Part_139_2052215361.1499897890874
Content-Type: multipart/alternative;
 boundary="----=_Part_140_955042977.1499897890874"

------=_Part_140_955042977.1499897890874
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Yes, i agree with your point of view. I meant this way - function with=20
optional fill parameter.

=D1=81=D1=80=D0=B5=D0=B4=D0=B0, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 2=
2:11:27 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=
=D0=BB=D1=8C Dan Raviv =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:
>
> Indeed, circular shift is just std::rotate.
>
> For the 'logical' shift,  I was thinking leaving them in the moved-from=
=20
> state. Filling them with some value would both 1) have a cost 2) not=20
> necessarily be desired.=20
> So I'm for the same behavior as the equivalent std::move[_backward], at=
=20
> least by default.
>
> It is possible to add an optional fill-in value parameter, if that's=20
> something that would be deemed useful enough.
>
> On Wed, Jul 12, 2017 at 9:46 PM, Nicol Bolas <jmck...@gmail.com=20
> <javascript:>> wrote:
>
>> On Wednesday, July 12, 2017 at 1:17:30 PM UTC-4, Alexander Zaitsev wrote=
:
>>>
>>> Yeah, you are right :)
>>>
>>> We should create the most general implementation and efficient=20
>>> implementation for any iterator type.=20
>>>
>>> Also we should decide about type of shifting: circular and/or logical=
=20
>>> shifting ( https://en.wikipedia.org/wiki/Circular_shift ).
>>>
>>
>> Isn't circular shift just `std::rotate=20
>> <http://en.cppreference.com/w/cpp/algorithm/rotate>`?
>>
>> And how would a logical shift work? Would it value-initialize all of the=
=20
>> empty entries? Would it take a value to copy into them? Would it leave t=
hem=20
>> in the moved-from state?
>>
>
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/00148336-0a16-4ba0-b058-1742f469328e%40isocpp.or=
g.

------=_Part_140_955042977.1499897890874
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Yes, i agree with your point of view. I meant this way - f=
unction with optional fill parameter.<br><br>=D1=81=D1=80=D0=B5=D0=B4=D0=B0=
, 12 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 22:11:27 UTC+3 =D0=BF=D0=BE=D0=
=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C Dan Raviv =D0=BD=
=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:<blockquote class=3D"gmail_quote" styl=
e=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left:=
 1ex;"><div dir=3D"ltr">Indeed, circular shift is just std::rotate.<div><br=
></div><div>For the &#39;logical&#39; shift, =C2=A0I was thinking leaving t=
hem in the moved-from state. Filling them with some value would both 1) hav=
e a cost 2) not necessarily be desired.=C2=A0</div><div>So I&#39;m for the =
same behavior as the equivalent std::move[_backward], at least by default.<=
/div><div><br></div><div>It is possible to add an optional fill-in value pa=
rameter, if that&#39;s something that would be deemed useful enough.</div><=
/div><div><br><div class=3D"gmail_quote">On Wed, Jul 12, 2017 at 9:46 PM, N=
icol Bolas <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" =
gdf-obfuscated-mailto=3D"dRWtPKElBgAJ" rel=3D"nofollow" onmousedown=3D"this=
..href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39;jav=
ascript:&#39;;return true;">jmck...@gmail.com</a>&gt;</span> wrote:<br><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div dir=3D"ltr"><span>On Wednesday, July 12, 20=
17 at 1:17:30 PM UTC-4, Alexander Zaitsev wrote:<blockquote class=3D"gmail_=
quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddi=
ng-left:1ex"><div dir=3D"ltr">Yeah, you are right :)<div><br></div><div>We =
should create the most general implementation and efficient implementation =
for any iterator type.=C2=A0<br><br>Also we should decide about type of shi=
fting: circular and/or logical shifting ( <a href=3D"https://en.wikipedia.o=
rg/wiki/Circular_shift" rel=3D"nofollow" target=3D"_blank" onmousedown=3D"t=
his.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fen.wikipedia.=
org%2Fwiki%2FCircular_shift\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGhhryP9=
byJ1Xvxy2Ow0ybk9f0MYw&#39;;return true;" onclick=3D"this.href=3D&#39;https:=
//www.google.com/url?q\x3dhttps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCircular_=
shift\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGhhryP9byJ1Xvxy2Ow0ybk9f0MYw&=
#39;;return true;">https://en.wikipedia.org/wiki/<wbr>Circular_shift</a>=C2=
=A0).<br></div></div></blockquote></span><div><br>Isn&#39;t circular shift =
just `<a href=3D"http://en.cppreference.com/w/cpp/algorithm/rotate" target=
=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;http://www.goo=
gle.com/url?q\x3dhttp%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Falgorithm%2Fr=
otate\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGYb2gKbPU9UXJskeGPZjb9ddZgcQ&=
#39;;return true;" onclick=3D"this.href=3D&#39;http://www.google.com/url?q\=
x3dhttp%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Falgorithm%2Frotate\x26sa\x3=
dD\x26sntz\x3d1\x26usg\x3dAFQjCNGYb2gKbPU9UXJskeGPZjb9ddZgcQ&#39;;return tr=
ue;">std::rotate</a>`?<br><br>And how would a logical shift work? Would it =
value-initialize all of the empty entries? Would it take a value to copy in=
to them? Would it leave them in the moved-from state?<br></div></div></bloc=
kquote></div><br></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/00148336-0a16-4ba0-b058-1742f469328e%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/00148336-0a16-4ba0-b058-1742f469328e=
%40isocpp.org</a>.<br />

------=_Part_140_955042977.1499897890874--

------=_Part_139_2052215361.1499897890874--

.


Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date: Wed, 12 Jul 2017 16:47:04 -0700 (PDT)
Raw View
------=_Part_138_1339289051.1499903224955
Content-Type: multipart/alternative;
 boundary="----=_Part_139_914765861.1499903224956"

------=_Part_139_914765861.1499903224956
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soundradix.com wrote:
>
> Hi,
>
> Would anyone be interested in adding std::shift to <algorithm>?=20
>
> It would be similar to both:
> - std::rotate, but without moving the head elements back to the tail. Thi=
s=20
> would allow a more efficient implementation and clearer semantics in case=
=20
> rotation is not needed as well as correctness in case rotation is undesir=
ed.
> - <algorithm>'s std::move/std::move_backward (depending on the shift=20
> direction).
>
> std::shift should probably accommodate both left and right shifts by one=
=20
> of:
> - giving it either begin() and end(), or rbegin() and rend(), similar to=
=20
> how std::rotate works for both left and right rotations. The advantage is=
=20
> compactness of the implementation.
> - allowing the shift count parameter to be either positive or negative.=
=20
> The advantage is compactness, though it might not be clear which directio=
n=20
> is which - to be consistent with rotate, positive integers should shift t=
o=20
> the left.
> - having std::shift_right and std::shift_left functions. The advantage is=
=20
> clarity when calling the methods, although the same argument could be mad=
e=20
> for having separate std::rotate_left and std::rotate_right instead of=20
> std::rotate, which we don't have.
>

std::rotate is actually just a rotation; it doesn't need "left" or "right"=
=20
qualification because they're 100% equivalent. Consider a classroom globe=
=20
with London in front, facing you. Now "rotate" the globe until Beijing is=
=20
in front. It doesn't matter if you rotate left or rotate right; the outcome=
=20
is exactly the same either way.
=20

> Here's a sample implementation of a shift to the right direction:
>
> template<class BidirIt>=20
> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)=20
> {=20
>     std::move_backward(first, last - n, last);=20
> }
>
> This demonstrates that while std::shift is implementable with=20
> std::move/std::move_backward,
> 1) It isn't immediately clear from the code (at least to my eyes) that=20
> this is a shift right, unless you are intimately familiar with=20
> std::move_backward.
> 2) Different calls, either to std::move or to std::move_backward, are=20
> required, depending on the shift direction.
>

If you're shifting the whole container's contents, you could use either of=
=20
these:
    std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());
    std::move_backward(ctr.begin(), ctr.end() - n, ctr.end())?
I don't currently see the use-case for this "shift just a piece of a=20
container" algorithm, I mean as distinct from std::move and=20
std::move_backward which already exist. Do you have a use-case?

Re naming, notice in passing that std::valarray::shift() exists, and=20
std::left_shift<T> and std::right_shift<T> do *not* exist but obviously=20
should. The name std::shift itself is indeed still available. I question=20
whether it should be used for this purpose, though.

=E2=80=93Arthur

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/68bbd6d3-1578-43e1-b15f-563c9d6fb27c%40isocpp.or=
g.

------=_Part_139_914765861.1499903224956
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soun=
dradix.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr">Hi,<div><br></div><div>Would anyone be interested in adding std::shift =
to &lt;algorithm&gt;?=C2=A0</div><div><br></div><div>It would be similar to=
 both:</div><div>- std::rotate, but without moving the head elements back t=
o the tail. This would allow a more efficient implementation and clearer se=
mantics in case rotation is not needed as well as correctness in case rotat=
ion is undesired.</div><div>- &lt;algorithm&gt;&#39;s std::move/std::move_b=
ackward (depending on the shift direction).</div><div><br></div><div>std::s=
hift should probably accommodate both left and right shifts by one of:</div=
><div>- giving it either begin() and end(), or rbegin() and rend(), similar=
 to how std::rotate works for both left and right rotations. The advantage =
is compactness of the implementation.</div><div>- allowing the shift count =
parameter to be either positive or negative. The advantage is compactness, =
though it might not be clear which direction is which - to be consistent wi=
th rotate, positive integers should shift to the left.<br></div><div><div>-=
 having std::shift_right and std::shift_left functions. The advantage is cl=
arity when calling the methods, although the same argument could be made fo=
r having separate std::rotate_left and std::rotate_right instead of std::ro=
tate, which we don&#39;t have.</div></div></div></blockquote><div><br></div=
><div>std::rotate is actually just a rotation; it doesn&#39;t need &quot;le=
ft&quot; or &quot;right&quot; qualification because they&#39;re 100% equiva=
lent. Consider a classroom globe with London in front, facing you. Now &quo=
t;rotate&quot; the globe until Beijing is in front. It doesn&#39;t matter i=
f you rotate left or rotate right; the outcome is exactly the same either w=
ay.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin=
: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div=
 dir=3D"ltr"><div>Here&#39;s a sample implementation of a shift to the righ=
t direction:<br></div><br><div style=3D"background-color:rgb(250,250,250);b=
order:1px solid rgb(187,187,187);word-wrap:break-word"><code><div><span sty=
le=3D"color:#008">template</span><span style=3D"color:#660">&lt;</span><spa=
n style=3D"color:#008">class</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#606">BidirIt</span><span style=3D"color:#660">&gt;</span><=
span style=3D"color:#000"> <br></span><span style=3D"color:#008">void</span=
><span style=3D"color:#000"> shift_right</span><span style=3D"color:#660">(=
</span><span style=3D"color:#606">BidirIt</span><span style=3D"color:#000">=
 first</span><span style=3D"color:#660">,</span><span style=3D"color:#000">=
 </span><span style=3D"color:#606">BidirIt</span><span style=3D"color:#000"=
> </span><span style=3D"color:#008">last</span><span style=3D"color:#660">,=
</span><span style=3D"color:#000"> </span><span style=3D"color:#008">unsign=
ed</span><span style=3D"color:#000"> </span><span style=3D"color:#008">int<=
/span><span style=3D"color:#000"> n </span><span style=3D"color:#660">=3D</=
span><span style=3D"color:#000"> </span><span style=3D"color:#066">1</span>=
<span style=3D"color:#660">)</span><span style=3D"color:#000"> <br></span><=
span style=3D"color:#660">{</span><span style=3D"color:#000"> <br>=C2=A0 =
=C2=A0 std</span><span style=3D"color:#660">::</span><span style=3D"color:#=
000">move_backward</span><span style=3D"color:#660">(</span><span style=3D"=
color:#000">first</span><span style=3D"color:#660">,</span><span style=3D"c=
olor:#000"> </span><span style=3D"color:#008">last</span><span style=3D"col=
or:#000"> </span><span style=3D"color:#660">-</span><span style=3D"color:#0=
00"> n</span><span style=3D"color:#660">,</span><span style=3D"color:#000">=
 </span><span style=3D"color:#008">last</span><span style=3D"color:#660">);=
</span><span style=3D"color:#000"> <br></span><span style=3D"color:#660">}<=
/span><span style=3D"color:#000"><br></span></div></code></div><div><br></d=
iv><div>This demonstrates that while std::shift is implementable with std::=
move/std::move_backward,</div><div>1) It isn&#39;t immediately clear from t=
he code (at least to my eyes) that this is a shift right, unless you are in=
timately familiar with std::move_backward.</div><div>2) Different calls, ei=
ther to std::move or to std::move_backward, are required, depending on the =
shift direction.</div></div></blockquote><div><br></div><div>If you&#39;re =
shifting the whole container&#39;s contents, you could use either of these:=
</div><div>=C2=A0 =C2=A0 std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin=
());</div><div>=C2=A0 =C2=A0 std::move_backward(ctr.begin(), ctr.end() - n,=
 ctr.end())?</div><div>I don&#39;t currently see the use-case for this &quo=
t;shift just a piece of a container&quot; algorithm, I mean as distinct fro=
m std::move and std::move_backward which already exist. Do you have a use-c=
ase?</div><div><br></div><div>Re naming, notice in passing that std::valarr=
ay::shift() exists, and std::left_shift&lt;T&gt; and std::right_shift&lt;T&=
gt; do <i><b>not</b></i> exist but obviously should. The name std::shift it=
self is indeed still available. I question whether it should be used for th=
is purpose, though.</div><div><br></div><div>=E2=80=93Arthur</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/68bbd6d3-1578-43e1-b15f-563c9d6fb27c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/68bbd6d3-1578-43e1-b15f-563c9d6fb27c=
%40isocpp.org</a>.<br />

------=_Part_139_914765861.1499903224956--

------=_Part_138_1339289051.1499903224955--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Wed, 12 Jul 2017 18:43:11 -0700 (PDT)
Raw View
------=_Part_166_819055649.1499910191274
Content-Type: multipart/alternative;
 boundary="----=_Part_167_271704742.1499910191275"

------=_Part_167_271704742.1499910191275
Content-Type: text/plain; charset="UTF-8"

On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O'Dwyer wrote:
>
> On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soundradix.com
> wrote:
>>
>> Hi,
>>
>> Would anyone be interested in adding std::shift to <algorithm>?
>>
>> It would be similar to both:
>> - std::rotate, but without moving the head elements back to the tail.
>> This would allow a more efficient implementation and clearer semantics in
>> case rotation is not needed as well as correctness in case rotation is
>> undesired.
>> - <algorithm>'s std::move/std::move_backward (depending on the shift
>> direction).
>>
>> std::shift should probably accommodate both left and right shifts by one
>> of:
>> - giving it either begin() and end(), or rbegin() and rend(), similar to
>> how std::rotate works for both left and right rotations. The advantage is
>> compactness of the implementation.
>> - allowing the shift count parameter to be either positive or negative.
>> The advantage is compactness, though it might not be clear which direction
>> is which - to be consistent with rotate, positive integers should shift to
>> the left.
>> - having std::shift_right and std::shift_left functions. The advantage is
>> clarity when calling the methods, although the same argument could be made
>> for having separate std::rotate_left and std::rotate_right instead of
>> std::rotate, which we don't have.
>>
>
> std::rotate is actually just a rotation; it doesn't need "left" or "right"
> qualification because they're 100% equivalent. Consider a classroom globe
> with London in front, facing you. Now "rotate" the globe until Beijing is
> in front. It doesn't matter if you rotate left or rotate right; the outcome
> is exactly the same either way.
>
>
>> Here's a sample implementation of a shift to the right direction:
>>
>> template<class BidirIt>
>> void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
>> {
>>     std::move_backward(first, last - n, last);
>> }
>>
>> This demonstrates that while std::shift is implementable with
>> std::move/std::move_backward,
>> 1) It isn't immediately clear from the code (at least to my eyes) that
>> this is a shift right, unless you are intimately familiar with
>> std::move_backward.
>> 2) Different calls, either to std::move or to std::move_backward, are
>> required, depending on the shift direction.
>>
>
> If you're shifting the whole container's contents, you could use either of
> these:
>     std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());
>     std::move_backward(ctr.begin(), ctr.end() - n, ctr.end())?
> I don't currently see the use-case for this "shift just a piece of a
> container" algorithm, I mean as distinct from std::move and
> std::move_backward which already exist. Do you have a use-case?
>

The use-case would be anytime you'd want to use the code you just wrote.
When you have a range and N, and you want to do a shift N units in that
direction.

The point of having it is one of clarification and user expectations. Yes,
you can use `move` and `move_backward` to accomplish a shift. But consider
the two function calls:

//A
std::shift(rng.begin(), rng.end(), N);

//B
auto rrng = std::make_reverse_range(rng);
std::move(rrng.begin() + N, rrng.end(), rrng.begin());

A and B both do the same thing. But it's a *lot easier* to figure out what
the code is actually accomplishing from looking at A than B.

B gets even more obtuse confusing in a range-based world:

//A
std::shift(rng, N);

//B
auto rrng = std::make_reverse_range(rng);
std::move(std::make_range(rrng.begin + N, rrng.end()), rrng.begin());

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%40isocpp.org.

------=_Part_167_271704742.1499910191275
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O&=
#39;Dwyer wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r">On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, <a>d...@soundradix.com<=
/a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div>=
<br></div><div>Would anyone be interested in adding std::shift to &lt;algor=
ithm&gt;?=C2=A0</div><div><br></div><div>It would be similar to both:</div>=
<div>- std::rotate, but without moving the head elements back to the tail. =
This would allow a more efficient implementation and clearer semantics in c=
ase rotation is not needed as well as correctness in case rotation is undes=
ired.</div><div>- &lt;algorithm&gt;&#39;s std::move/std::move_backward (dep=
ending on the shift direction).</div><div><br></div><div>std::shift should =
probably accommodate both left and right shifts by one of:</div><div>- givi=
ng it either begin() and end(), or rbegin() and rend(), similar to how std:=
:rotate works for both left and right rotations. The advantage is compactne=
ss of the implementation.</div><div>- allowing the shift count parameter to=
 be either positive or negative. The advantage is compactness, though it mi=
ght not be clear which direction is which - to be consistent with rotate, p=
ositive integers should shift to the left.<br></div><div><div>- having std:=
:shift_right and std::shift_left functions. The advantage is clarity when c=
alling the methods, although the same argument could be made for having sep=
arate std::rotate_left and std::rotate_right instead of std::rotate, which =
we don&#39;t have.</div></div></div></blockquote><div><br></div><div>std::r=
otate is actually just a rotation; it doesn&#39;t need &quot;left&quot; or =
&quot;right&quot; qualification because they&#39;re 100% equivalent. Consid=
er a classroom globe with London in front, facing you. Now &quot;rotate&quo=
t; the globe until Beijing is in front. It doesn&#39;t matter if you rotate=
 left or rotate right; the outcome is exactly the same either way.</div><di=
v>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-le=
ft:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div=
>Here&#39;s a sample implementation of a shift to the right direction:<br><=
/div><br><div style=3D"background-color:rgb(250,250,250);border:1px solid r=
gb(187,187,187);word-wrap:break-word"><code><div><span style=3D"color:#008"=
>template</span><span style=3D"color:#660">&lt;</span><span style=3D"color:=
#008">class</span><span style=3D"color:#000"> </span><span style=3D"color:#=
606">BidirIt</span><span style=3D"color:#660">&gt;</span><span style=3D"col=
or:#000"> <br></span><span style=3D"color:#008">void</span><span style=3D"c=
olor:#000"> shift_right</span><span style=3D"color:#660">(</span><span styl=
e=3D"color:#606">BidirIt</span><span style=3D"color:#000"> first</span><spa=
n style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#606">BidirIt</span><span style=3D"color:#000"> </span><span st=
yle=3D"color:#008">last</span><span style=3D"color:#660">,</span><span styl=
e=3D"color:#000"> </span><span style=3D"color:#008">unsigned</span><span st=
yle=3D"color:#000"> </span><span style=3D"color:#008">int</span><span style=
=3D"color:#000"> n </span><span style=3D"color:#660">=3D</span><span style=
=3D"color:#000"> </span><span style=3D"color:#066">1</span><span style=3D"c=
olor:#660">)</span><span style=3D"color:#000"> <br></span><span style=3D"co=
lor:#660">{</span><span style=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><=
span style=3D"color:#660">::</span><span style=3D"color:#000">move_backward=
</span><span style=3D"color:#660">(</span><span style=3D"color:#000">first<=
/span><span style=3D"color:#660">,</span><span style=3D"color:#000"> </span=
><span style=3D"color:#008">last</span><span style=3D"color:#000"> </span><=
span style=3D"color:#660">-</span><span style=3D"color:#000"> n</span><span=
 style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span styl=
e=3D"color:#008">last</span><span style=3D"color:#660">);</span><span style=
=3D"color:#000"> <br></span><span style=3D"color:#660">}</span><span style=
=3D"color:#000"><br></span></div></code></div><div><br></div><div>This demo=
nstrates that while std::shift is implementable with std::move/std::move_ba=
ckward,</div><div>1) It isn&#39;t immediately clear from the code (at least=
 to my eyes) that this is a shift right, unless you are intimately familiar=
 with std::move_backward.</div><div>2) Different calls, either to std::move=
 or to std::move_backward, are required, depending on the shift direction.<=
/div></div></blockquote><div><br></div><div>If you&#39;re shifting the whol=
e container&#39;s contents, you could use either of these:</div><div>=C2=A0=
 =C2=A0 std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());</div><div>=
=C2=A0 =C2=A0 std::move_backward(ctr.begin()<wbr>, ctr.end() - n, ctr.end()=
)?</div><div>I don&#39;t currently see the use-case for this &quot;shift ju=
st a piece of a container&quot; algorithm, I mean as distinct from std::mov=
e and std::move_backward which already exist. Do you have a use-case?</div>=
</div></blockquote><div><br>The use-case would be anytime you&#39;d want to=
 use the code you just wrote. When you have a range and N, and you want to =
do a shift N units in that direction.<br><br>The point of having it is one =
of clarification and user expectations. Yes, you can use `move` and `move_b=
ackward` to accomplish a shift. But consider the two function calls:<br><br=
><div style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187,=
 187, 187); border-style: solid; border-width: 1px; overflow-wrap: break-wo=
rd;" class=3D"prettyprint"><code class=3D"prettyprint"><div class=3D"subpre=
ttyprint"><span style=3D"color: #800;" class=3D"styled-by-prettify">//A</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>std</span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify">shift</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify">rng</span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">.</span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">begin</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">(),</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> rng</span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">.</span><span style=3D"color: #008;" class=3D"styled-by-prettify">end=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(),</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"> N</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"><br><br></span><span style=3D"col=
or: #800;" class=3D"styled-by-prettify">//B</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> rrng </span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"> std</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">make=
_reverse_range</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">rng</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">);</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"><br>std</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify">move</span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify">rrng</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">.</span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">begin</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">()</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">+</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> N</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> rrng</span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">.</span><span style=3D"color: #008;" c=
lass=3D"styled-by-prettify">end</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">(),</span><span style=3D"color: #000;" class=3D"styled=
-by-prettify"> rrng</span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">.</span><span style=3D"color: #008;" class=3D"styled-by-prettify">=
begin</span><span style=3D"color: #660;" class=3D"styled-by-prettify">());<=
/span></div></code></div><br>A and B both do the same thing. But it&#39;s a=
 <i>lot easier</i> to figure out what the code is actually accomplishing fr=
om looking at A than B.<br><br>B gets even more obtuse confusing in a range=
-based world:<br><br><div style=3D"background-color: rgb(250, 250, 250); bo=
rder-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; ove=
rflow-wrap: break-word;" class=3D"prettyprint"><code class=3D"prettyprint">=
<div class=3D"subprettyprint"><span style=3D"color: #800;" class=3D"styled-=
by-prettify">//A</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"><br>std</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">shift=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify">rng</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> N</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">);</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br><br></span><span style=3D"color: #800;" class=
=3D"styled-by-prettify">//B</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"><br></span><span style=3D"color: #008;" class=3D"styled-by=
-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> rrng </span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> std</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify">make_reverse_range</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify">rng</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"><br>std</span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">::</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify">move</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify">std</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
make_range</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">rrng</spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">.</span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">begin</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">+</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> N</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> rrng</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">.</span><span style=3D"color: #008;" class=3D"styled-by-prettify">en=
d</span><span style=3D"color: #660;" class=3D"styled-by-prettify">()),</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> rrng</span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">.</span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">begin</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">());</span></div></code></div></d=
iv></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860=
%40isocpp.org</a>.<br />

------=_Part_167_271704742.1499910191275--

------=_Part_166_819055649.1499910191274--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Thu, 13 Jul 2017 14:41:28 +0300
Raw View
--Apple-Mail-B758B76A-D759-4322-99A9-61165DC59A77
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Thanks for phrasing the motivation so well Nicol.

Arthur, regarding specific use cases, any algorithm doing time series analy=
sis (e.g. temperature the last 20 days) could use this.

(A cyclical buffer is an alternative, but one which isn't always preferrabl=
e.)

> On 13 Jul 2017, at 4:43, Nicol Bolas <jmckesson@gmail.com> wrote:
>=20
>> On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O'Dwyer wrote:
>>> On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soundradix.com wr=
ote:
>>> Hi,
>>>=20
>>> Would anyone be interested in adding std::shift to <algorithm>?=20
>>>=20
>>> It would be similar to both:
>>> - std::rotate, but without moving the head elements back to the tail. T=
his would allow a more efficient implementation and clearer semantics in ca=
se rotation is not needed as well as correctness in case rotation is undesi=
red.
>>> - <algorithm>'s std::move/std::move_backward (depending on the shift di=
rection).
>>>=20
>>> std::shift should probably accommodate both left and right shifts by on=
e of:
>>> - giving it either begin() and end(), or rbegin() and rend(), similar t=
o how std::rotate works for both left and right rotations. The advantage is=
 compactness of the implementation.
>>> - allowing the shift count parameter to be either positive or negative.=
 The advantage is compactness, though it might not be clear which direction=
 is which - to be consistent with rotate, positive integers should shift to=
 the left.
>>> - having std::shift_right and std::shift_left functions. The advantage =
is clarity when calling the methods, although the same argument could be ma=
de for having separate std::rotate_left and std::rotate_right instead of st=
d::rotate, which we don't have.
>>=20
>> std::rotate is actually just a rotation; it doesn't need "left" or "righ=
t" qualification because they're 100% equivalent. Consider a classroom glob=
e with London in front, facing you. Now "rotate" the globe until Beijing is=
 in front. It doesn't matter if you rotate left or rotate right; the outcom=
e is exactly the same either way.
>> =20
>>> Here's a sample implementation of a shift to the right direction:
>>>=20
>>> template<class BidirIt>=20
>>> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)=20
>>> {=20
>>>     std::move_backward(first, last - n, last);=20
>>> }
>>>=20
>>> This demonstrates that while std::shift is implementable with std::move=
/std::move_backward,
>>> 1) It isn't immediately clear from the code (at least to my eyes) that =
this is a shift right, unless you are intimately familiar with std::move_ba=
ckward.
>>> 2) Different calls, either to std::move or to std::move_backward, are r=
equired, depending on the shift direction.
>>=20
>> If you're shifting the whole container's contents, you could use either =
of these:
>>     std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());
>>     std::move_backward(ctr.begin(), ctr.end() - n, ctr.end())?
>> I don't currently see the use-case for this "shift just a piece of a con=
tainer" algorithm, I mean as distinct from std::move and std::move_backward=
 which already exist. Do you have a use-case?
>=20
> The use-case would be anytime you'd want to use the code you just wrote. =
When you have a range and N, and you want to do a shift N units in that dir=
ection.
>=20
> The point of having it is one of clarification and user expectations. Yes=
, you can use `move` and `move_backward` to accomplish a shift. But conside=
r the two function calls:
>=20
> //A
> std::shift(rng.begin(), rng.end(), N);
>=20
> //B
> auto rrng =3D std::make_reverse_range(rng);
> std::move(rrng.begin() + N, rrng.end(), rrng.begin());
>=20
> A and B both do the same thing. But it's a lot easier to figure out what =
the code is actually accomplishing from looking at A than B.
>=20
> B gets even more obtuse confusing in a range-based world:
>=20
> //A
> std::shift(rng, N);
>=20
> //B
> auto rrng =3D std::make_reverse_range(rng);
> std::move(std::make_range(rrng.begin + N, rrng.end()), rrng.begin());
> --=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.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%40isocpp.=
org.

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/1E3763D6-C8A5-471A-AA44-F5CFDEDD6D9E%40gmail.com=
..

--Apple-Mail-B758B76A-D759-4322-99A9-61165DC59A77
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 dir=3D"auto"><div></div><div>Thanks for phrasing the=
 motivation so well Nicol.</div><div><br></div><div>Arthur, regarding speci=
fic use cases, any algorithm doing time series analysis (e.g. temperature t=
he last 20 days) could use this.</div><div><br></div><div>(A cyclical buffe=
r is an alternative, but one which isn't always preferrable.)</div><div><br=
>On 13 Jul 2017, at 4:43, Nicol Bolas &lt;<a href=3D"mailto:jmckesson@gmail=
..com">jmckesson@gmail.com</a>&gt; wrote:<br><br></div><blockquote type=3D"c=
ite"><div><div dir=3D"ltr">On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4,=
 Arthur O'Dwyer wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr">On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, <a>d...@soundradi=
x.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-=
left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi=
,<div><br></div><div>Would anyone be interested in adding std::shift to &lt=
;algorithm&gt;?&nbsp;</div><div><br></div><div>It would be similar to both:=
</div><div>- std::rotate, but without moving the head elements back to the =
tail. This would allow a more efficient implementation and clearer semantic=
s in case rotation is not needed as well as correctness in case rotation is=
 undesired.</div><div>- &lt;algorithm&gt;'s std::move/std::move_backward (d=
epending on the shift direction).</div><div><br></div><div>std::shift shoul=
d probably accommodate both left and right shifts by one of:</div><div>- gi=
ving it either begin() and end(), or rbegin() and rend(), similar to how st=
d::rotate works for both left and right rotations. The advantage is compact=
ness of the implementation.</div><div>- allowing the shift count parameter =
to be either positive or negative. The advantage is compactness, though it =
might not be clear which direction is which - to be consistent with rotate,=
 positive integers should shift to the left.<br></div><div><div>- having st=
d::shift_right and std::shift_left functions. The advantage is clarity when=
 calling the methods, although the same argument could be made for having s=
eparate std::rotate_left and std::rotate_right instead of std::rotate, whic=
h we don't have.</div></div></div></blockquote><div><br></div><div>std::rot=
ate is actually just a rotation; it doesn't need "left" or "right" qualific=
ation because they're 100% equivalent. Consider a classroom globe with Lond=
on in front, facing you. Now "rotate" the globe until Beijing is in front. =
It doesn't matter if you rotate left or rotate right; the outcome is exactl=
y the same either way.</div><div>&nbsp;</div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-=
left:1ex"><div dir=3D"ltr"><div>Here's a sample implementation of a shift t=
o the right direction:<br></div><br><div style=3D"background-color:rgb(250,=
250,250);border:1px solid rgb(187,187,187);word-wrap:break-word"><code><div=
><span style=3D"color:#008">template</span><span style=3D"color:#660">&lt;<=
/span><span style=3D"color:#008">class</span><span style=3D"color:#000"> </=
span><span style=3D"color:#606">BidirIt</span><span style=3D"color:#660">&g=
t;</span><span style=3D"color:#000"> <br></span><span style=3D"color:#008">=
void</span><span style=3D"color:#000"> shift_right</span><span style=3D"col=
or:#660">(</span><span style=3D"color:#606">BidirIt</span><span style=3D"co=
lor:#000"> first</span><span style=3D"color:#660">,</span><span style=3D"co=
lor:#000"> </span><span style=3D"color:#606">BidirIt</span><span style=3D"c=
olor:#000"> </span><span style=3D"color:#008">last</span><span style=3D"col=
or:#660">,</span><span style=3D"color:#000"> </span><span style=3D"color:#0=
08">unsigned</span><span style=3D"color:#000"> </span><span style=3D"color:=
#008">int</span><span style=3D"color:#000"> n </span><span style=3D"color:#=
660">=3D</span><span style=3D"color:#000"> </span><span style=3D"color:#066=
">1</span><span style=3D"color:#660">)</span><span style=3D"color:#000"> <b=
r></span><span style=3D"color:#660">{</span><span style=3D"color:#000"> <br=
>&nbsp; &nbsp; std</span><span style=3D"color:#660">::</span><span style=3D=
"color:#000">move_backward</span><span style=3D"color:#660">(</span><span s=
tyle=3D"color:#000">first</span><span style=3D"color:#660">,</span><span st=
yle=3D"color:#000"> </span><span style=3D"color:#008">last</span><span styl=
e=3D"color:#000"> </span><span style=3D"color:#660">-</span><span style=3D"=
color:#000"> n</span><span style=3D"color:#660">,</span><span style=3D"colo=
r:#000"> </span><span style=3D"color:#008">last</span><span style=3D"color:=
#660">);</span><span style=3D"color:#000"> <br></span><span style=3D"color:=
#660">}</span><span style=3D"color:#000"><br></span></div></code></div><div=
><br></div><div>This demonstrates that while std::shift is implementable wi=
th std::move/std::move_backward,</div><div>1) It isn't immediately clear fr=
om the code (at least to my eyes) that this is a shift right, unless you ar=
e intimately familiar with std::move_backward.</div><div>2) Different calls=
, either to std::move or to std::move_backward, are required, depending on =
the shift direction.</div></div></blockquote><div><br></div><div>If you're =
shifting the whole container's contents, you could use either of these:</di=
v><div>&nbsp; &nbsp; std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());=
</div><div>&nbsp; &nbsp; std::move_backward(ctr.begin()<wbr>, ctr.end() - n=
, ctr.end())?</div><div>I don't currently see the use-case for this "shift =
just a piece of a container" algorithm, I mean as distinct from std::move a=
nd std::move_backward which already exist. Do you have a use-case?</div></d=
iv></blockquote><div><br>The use-case would be anytime you'd want to use th=
e code you just wrote. When you have a range and N, and you want to do a sh=
ift N units in that direction.<br><br>The point of having it is one of clar=
ification and user expectations. Yes, you can use `move` and `move_backward=
` to accomplish a shift. But consider the two function calls:<br><br><div s=
tyle=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 187, 1=
87); border-style: solid; border-width: 1px; overflow-wrap: break-word;" cl=
ass=3D"prettyprint"><code class=3D"prettyprint"><div class=3D"subprettyprin=
t"><span style=3D"color: #800;" class=3D"styled-by-prettify">//A</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"><br>std</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify">shift</span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify">rng</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">.</span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">begin</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">(),</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y"> rng</span><span style=3D"color: #660;" class=3D"styled-by-prettify">.</=
span><span style=3D"color: #008;" class=3D"styled-by-prettify">end</span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">(),</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> N</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"><br><br></span><span style=3D"color: #800;=
" class=3D"styled-by-prettify">//B</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> rrng </span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> std</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify">make_reverse_=
range</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify">rng</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"><br>std</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify">move</span><span style=3D"color: #660;"=
 class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify">rrng</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">.</span><span style=3D"color: #008;" class=3D"styled-by-pret=
tify">begin</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>()</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">+</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> N</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> rrng</span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">.</span><span style=3D"color: #008;" class=3D"s=
tyled-by-prettify">end</span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">(),</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> rrng</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
..</span><span style=3D"color: #008;" class=3D"styled-by-prettify">begin</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">());</span></d=
iv></code></div><br>A and B both do the same thing. But it's a <i>lot easie=
r</i> to figure out what the code is actually accomplishing from looking at=
 A than B.<br><br>B gets even more obtuse confusing in a range-based world:=
<br><br><div style=3D"background-color: rgb(250, 250, 250); border-color: r=
gb(187, 187, 187); border-style: solid; border-width: 1px; overflow-wrap: b=
reak-word;" class=3D"prettyprint"><code class=3D"prettyprint"><div class=3D=
"subprettyprint"><span style=3D"color: #800;" class=3D"styled-by-prettify">=
//A</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>std=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify">shift</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify">rng</span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> N</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">);</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"><br><br></span><span style=3D"color: #800;" class=3D"styled-by-p=
rettify">//B</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">auto=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> rrng </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"> std</span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify">make_reverse_range</span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify">rng</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">);</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br>std</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">::</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify">move</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">st=
d</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify">make_range</span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify">rrng</span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">.</span><span style=3D"color: #0=
08;" class=3D"styled-by-prettify">begin</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">+</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> N</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> rrng<=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">.</span><sp=
an style=3D"color: #008;" class=3D"styled-by-prettify">end</span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">()),</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> rrng</span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">.</span><span style=3D"color: #008;" c=
lass=3D"styled-by-prettify">begin</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">());</span></div></code></div></div></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups "=
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>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter">https://groups.goo=
gle.com/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d=
7860%40isocpp.org</a>.<br>
</div></blockquote></body></html>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/1E3763D6-C8A5-471A-AA44-F5CFDEDD6D9E%=
40gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/1E3763D6-C8A5-471A-AA44-F5CFDEDD6D9E%=
40gmail.com</a>.<br />

--Apple-Mail-B758B76A-D759-4322-99A9-61165DC59A77--

.


Author: Alexander Zaitsev <zamazan4ik@gmail.com>
Date: Thu, 13 Jul 2017 05:39:20 -0700 (PDT)
Raw View
------=_Part_404_1005163662.1499949560108
Content-Type: multipart/alternative;
 boundary="----=_Part_405_1637477051.1499949560109"

------=_Part_405_1637477051.1499949560109
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Can you write proposal about std::shift? Need you any help with writing=20
proposal and/or implementation?

=D1=87=D0=B5=D1=82=D0=B2=D0=B5=D1=80=D0=B3, 13 =D0=B8=D1=8E=D0=BB=D1=8F 201=
7 =D0=B3., 14:41:34 UTC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=
=D1=82=D0=B5=D0=BB=D1=8C Dan Raviv =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=
=BB:
>
> Thanks for phrasing the motivation so well Nicol.
>
> Arthur, regarding specific use cases, any algorithm doing time series=20
> analysis (e.g. temperature the last 20 days) could use this.
>
> (A cyclical buffer is an alternative, but one which isn't always=20
> preferrable.)
>
> On 13 Jul 2017, at 4:43, Nicol Bolas <jmck...@gmail.com <javascript:>>=20
> wrote:
>
> On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O'Dwyer wrote:
>>
>> On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soundradix.com=20
>> wrote:
>>>
>>> Hi,
>>>
>>> Would anyone be interested in adding std::shift to <algorithm>?=20
>>>
>>> It would be similar to both:
>>> - std::rotate, but without moving the head elements back to the tail.=
=20
>>> This would allow a more efficient implementation and clearer semantics =
in=20
>>> case rotation is not needed as well as correctness in case rotation is=
=20
>>> undesired.
>>> - <algorithm>'s std::move/std::move_backward (depending on the shift=20
>>> direction).
>>>
>>> std::shift should probably accommodate both left and right shifts by on=
e=20
>>> of:
>>> - giving it either begin() and end(), or rbegin() and rend(), similar t=
o=20
>>> how std::rotate works for both left and right rotations. The advantage =
is=20
>>> compactness of the implementation.
>>> - allowing the shift count parameter to be either positive or negative.=
=20
>>> The advantage is compactness, though it might not be clear which direct=
ion=20
>>> is which - to be consistent with rotate, positive integers should shift=
 to=20
>>> the left.
>>> - having std::shift_right and std::shift_left functions. The advantage=
=20
>>> is clarity when calling the methods, although the same argument could b=
e=20
>>> made for having separate std::rotate_left and std::rotate_right instead=
 of=20
>>> std::rotate, which we don't have.
>>>
>>
>> std::rotate is actually just a rotation; it doesn't need "left" or=20
>> "right" qualification because they're 100% equivalent. Consider a classr=
oom=20
>> globe with London in front, facing you. Now "rotate" the globe until=20
>> Beijing is in front. It doesn't matter if you rotate left or rotate righ=
t;=20
>> the outcome is exactly the same either way.
>> =20
>>
>>> Here's a sample implementation of a shift to the right direction:
>>>
>>> template<class BidirIt>=20
>>> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)=20
>>> {=20
>>>     std::move_backward(first, last - n, last);=20
>>> }
>>>
>>> This demonstrates that while std::shift is implementable with=20
>>> std::move/std::move_backward,
>>> 1) It isn't immediately clear from the code (at least to my eyes) that=
=20
>>> this is a shift right, unless you are intimately familiar with=20
>>> std::move_backward.
>>> 2) Different calls, either to std::move or to std::move_backward, are=
=20
>>> required, depending on the shift direction.
>>>
>>
>> If you're shifting the whole container's contents, you could use either=
=20
>> of these:
>>     std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());
>>     std::move_backward(ctr.begin(), ctr.end() - n, ctr.end())?
>> I don't currently see the use-case for this "shift just a piece of a=20
>> container" algorithm, I mean as distinct from std::move and=20
>> std::move_backward which already exist. Do you have a use-case?
>>
>
> The use-case would be anytime you'd want to use the code you just wrote.=
=20
> When you have a range and N, and you want to do a shift N units in that=
=20
> direction.
>
> The point of having it is one of clarification and user expectations. Yes=
,=20
> you can use `move` and `move_backward` to accomplish a shift. But conside=
r=20
> the two function calls:
>
> //A
> std::shift(rng.begin(), rng.end(), N);
>
> //B
> auto rrng =3D std::make_reverse_range(rng);
> std::move(rrng.begin() + N, rrng.end(), rrng.begin());
>
> A and B both do the same thing. But it's a *lot easier* to figure out=20
> what the code is actually accomplishing from looking at A than B.
>
> B gets even more obtuse confusing in a range-based world:
>
> //A
> std::shift(rng, N);
>
> //B
> auto rrng =3D std::make_reverse_range(rng);
> std::move(std::make_range(rrng.begin + N, rrng.end()), rrng.begin());
>
> --=20
> You received this message because you are subscribed to the Google Groups=
=20
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an=
=20
> email to std-proposal...@isocpp.org <javascript:>.
> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
> To view this discussion on the web visit=20
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9=
c-4ac5-a1bd-e50beb6d7860%40isocpp.org=20
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c722a201-5c=
9c-4ac5-a1bd-e50beb6d7860%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/b8807f7c-afc7-4e35-9020-98882a5d93bc%40isocpp.or=
g.

------=_Part_405_1637477051.1499949560109
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Can you write proposal about std::shift? Need you any help=
 with writing proposal and/or implementation?<br><br>=D1=87=D0=B5=D1=82=D0=
=B2=D0=B5=D1=80=D0=B3, 13 =D0=B8=D1=8E=D0=BB=D1=8F 2017 =D0=B3., 14:41:34 U=
TC+3 =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=
=8C Dan Raviv =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB:<blockquote class=
=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #cc=
c solid;padding-left: 1ex;"><div dir=3D"auto"><div></div><div>Thanks for ph=
rasing the motivation so well Nicol.</div><div><br></div><div>Arthur, regar=
ding specific use cases, any algorithm doing time series analysis (e.g. tem=
perature the last 20 days) could use this.</div><div><br></div><div>(A cycl=
ical buffer is an alternative, but one which isn&#39;t always preferrable.)=
</div><div><br>On 13 Jul 2017, at 4:43, Nicol Bolas &lt;<a href=3D"javascri=
pt:" target=3D"_blank" gdf-obfuscated-mailto=3D"ZSNIAKlbBgAJ" rel=3D"nofoll=
ow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return true;" onclick=
=3D"this.href=3D&#39;javascript:&#39;;return true;">jmck...@gmail.com</a>&g=
t; wrote:<br><br></div><blockquote type=3D"cite"><div><div dir=3D"ltr">On W=
ednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O&#39;Dwyer wrote:<bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Wednesday, July 12, =
2017 at 2:53:19 AM UTC-7, <a>d...@soundradix.com</a> wrote:<blockquote clas=
s=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc =
solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>Would anyon=
e be interested in adding std::shift to &lt;algorithm&gt;?=C2=A0</div><div>=
<br></div><div>It would be similar to both:</div><div>- std::rotate, but wi=
thout moving the head elements back to the tail. This would allow a more ef=
ficient implementation and clearer semantics in case rotation is not needed=
 as well as correctness in case rotation is undesired.</div><div>- &lt;algo=
rithm&gt;&#39;s std::move/std::move_backward (depending on the shift direct=
ion).</div><div><br></div><div>std::shift should probably accommodate both =
left and right shifts by one of:</div><div>- giving it either begin() and e=
nd(), or rbegin() and rend(), similar to how std::rotate works for both lef=
t and right rotations. The advantage is compactness of the implementation.<=
/div><div>- allowing the shift count parameter to be either positive or neg=
ative. The advantage is compactness, though it might not be clear which dir=
ection is which - to be consistent with rotate, positive integers should sh=
ift to the left.<br></div><div><div>- having std::shift_right and std::shif=
t_left functions. The advantage is clarity when calling the methods, althou=
gh the same argument could be made for having separate std::rotate_left and=
 std::rotate_right instead of std::rotate, which we don&#39;t have.</div></=
div></div></blockquote><div><br></div><div>std::rotate is actually just a r=
otation; it doesn&#39;t need &quot;left&quot; or &quot;right&quot; qualific=
ation because they&#39;re 100% equivalent. Consider a classroom globe with =
London in front, facing you. Now &quot;rotate&quot; the globe until Beijing=
 is in front. It doesn&#39;t matter if you rotate left or rotate right; the=
 outcome is exactly the same either way.</div><div>=C2=A0</div><blockquote =
class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>Here&#39;s a sample imple=
mentation of a shift to the right direction:<br></div><br><div style=3D"bac=
kground-color:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:=
break-word"><code><div><span style=3D"color:#008">template</span><span styl=
e=3D"color:#660">&lt;</span><span style=3D"color:#008">class</span><span st=
yle=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</span><span s=
tyle=3D"color:#660">&gt;</span><span style=3D"color:#000"> <br></span><span=
 style=3D"color:#008">void</span><span style=3D"color:#000"> shift_right</s=
pan><span style=3D"color:#660">(</span><span style=3D"color:#606">BidirIt</=
span><span style=3D"color:#000"> first</span><span style=3D"color:#660">,</=
span><span style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt<=
/span><span style=3D"color:#000"> </span><span style=3D"color:#008">last</s=
pan><span style=3D"color:#660">,</span><span style=3D"color:#000"> </span><=
span style=3D"color:#008">unsigned</span><span style=3D"color:#000"> </span=
><span style=3D"color:#008">int</span><span style=3D"color:#000"> n </span>=
<span style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><sp=
an style=3D"color:#066">1</span><span style=3D"color:#660">)</span><span st=
yle=3D"color:#000"> <br></span><span style=3D"color:#660">{</span><span sty=
le=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">:=
:</span><span style=3D"color:#000">move_backward</span><span style=3D"color=
:#660">(</span><span style=3D"color:#000">first</span><span style=3D"color:=
#660">,</span><span style=3D"color:#000"> </span><span style=3D"color:#008"=
>last</span><span style=3D"color:#000"> </span><span style=3D"color:#660">-=
</span><span style=3D"color:#000"> n</span><span style=3D"color:#660">,</sp=
an><span style=3D"color:#000"> </span><span style=3D"color:#008">last</span=
><span style=3D"color:#660">);</span><span style=3D"color:#000"> <br></span=
><span style=3D"color:#660">}</span><span style=3D"color:#000"><br></span><=
/div></code></div><div><br></div><div>This demonstrates that while std::shi=
ft is implementable with std::move/std::move_backward,</div><div>1) It isn&=
#39;t immediately clear from the code (at least to my eyes) that this is a =
shift right, unless you are intimately familiar with std::move_backward.</d=
iv><div>2) Different calls, either to std::move or to std::move_backward, a=
re required, depending on the shift direction.</div></div></blockquote><div=
><br></div><div>If you&#39;re shifting the whole container&#39;s contents, =
you could use either of these:</div><div>=C2=A0 =C2=A0 std::move(ctr.rbegin=
() + n, ctr.rend(), ctr.rbegin());</div><div>=C2=A0 =C2=A0 std::move_backwa=
rd(ctr.begin()<wbr>, ctr.end() - n, ctr.end())?</div><div>I don&#39;t curre=
ntly see the use-case for this &quot;shift just a piece of a container&quot=
; algorithm, I mean as distinct from std::move and std::move_backward which=
 already exist. Do you have a use-case?</div></div></blockquote><div><br>Th=
e use-case would be anytime you&#39;d want to use the code you just wrote. =
When you have a range and N, and you want to do a shift N units in that dir=
ection.<br><br>The point of having it is one of clarification and user expe=
ctations. Yes, you can use `move` and `move_backward` to accomplish a shift=
.. But consider the two function calls:<br><br><div style=3D"background-colo=
r:rgb(250,250,250);border-color:rgb(187,187,187);border-style:solid;border-=
width:1px"><code><div><span style=3D"color:#800">//A</span><span style=3D"c=
olor:#000"><br>std</span><span style=3D"color:#660">::</span><span style=3D=
"color:#000">shift</span><span style=3D"color:#660">(</span><span style=3D"=
color:#000">rng</span><span style=3D"color:#660">.</span><span style=3D"col=
or:#008">begin</span><span style=3D"color:#660">(),</span><span style=3D"co=
lor:#000"> rng</span><span style=3D"color:#660">.</span><span style=3D"colo=
r:#008">end</span><span style=3D"color:#660">(),</span><span style=3D"color=
:#000"> N</span><span style=3D"color:#660">);</span><span style=3D"color:#0=
00"><br><br></span><span style=3D"color:#800">//B</span><span style=3D"colo=
r:#000"><br></span><span style=3D"color:#008">auto</span><span style=3D"col=
or:#000"> rrng </span><span style=3D"color:#660">=3D</span><span style=3D"c=
olor:#000"> std</span><span style=3D"color:#660">::</span><span style=3D"co=
lor:#000">make_reverse_range</span><span style=3D"color:#660">(</span><span=
 style=3D"color:#000">rng</span><span style=3D"color:#660">);</span><span s=
tyle=3D"color:#000"><br>std</span><span style=3D"color:#660">::</span><span=
 style=3D"color:#000">move</span><span style=3D"color:#660">(</span><span s=
tyle=3D"color:#000">rrng</span><span style=3D"color:#660">.</span><span sty=
le=3D"color:#008">begin</span><span style=3D"color:#660">()</span><span sty=
le=3D"color:#000"> </span><span style=3D"color:#660">+</span><span style=3D=
"color:#000"> N</span><span style=3D"color:#660">,</span><span style=3D"col=
or:#000"> rrng</span><span style=3D"color:#660">.</span><span style=3D"colo=
r:#008">end</span><span style=3D"color:#660">(),</span><span style=3D"color=
:#000"> rrng</span><span style=3D"color:#660">.</span><span style=3D"color:=
#008">begin</span><span style=3D"color:#660">());</span></div></code></div>=
<br>A and B both do the same thing. But it&#39;s a <i>lot easier</i> to fig=
ure out what the code is actually accomplishing from looking at A than B.<b=
r><br>B gets even more obtuse confusing in a range-based world:<br><br><div=
 style=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,187);b=
order-style:solid;border-width:1px"><code><div><span style=3D"color:#800">/=
/A</span><span style=3D"color:#000"><br>std</span><span style=3D"color:#660=
">::</span><span style=3D"color:#000">shift</span><span style=3D"color:#660=
">(</span><span style=3D"color:#000">rng</span><span style=3D"color:#660">,=
</span><span style=3D"color:#000"> N</span><span style=3D"color:#660">);</s=
pan><span style=3D"color:#000"><br><br></span><span style=3D"color:#800">//=
B</span><span style=3D"color:#000"><br></span><span style=3D"color:#008">au=
to</span><span style=3D"color:#000"> rrng </span><span style=3D"color:#660"=
>=3D</span><span style=3D"color:#000"> std</span><span style=3D"color:#660"=
>::</span><span style=3D"color:#000">make_reverse_range</span><span style=
=3D"color:#660">(</span><span style=3D"color:#000">rng</span><span style=3D=
"color:#660">);</span><span style=3D"color:#000"><br>std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">move</span><span style=
=3D"color:#660">(</span><span style=3D"color:#000">std</span><span style=3D=
"color:#660">::</span><span style=3D"color:#000">make_range</span><span sty=
le=3D"color:#660">(</span><span style=3D"color:#000">rrng</span><span style=
=3D"color:#660"><wbr>.</span><span style=3D"color:#008">begin</span><span s=
tyle=3D"color:#000"> </span><span style=3D"color:#660">+</span><span style=
=3D"color:#000"> N</span><span style=3D"color:#660">,</span><span style=3D"=
color:#000"> rrng</span><span style=3D"color:#660">.</span><span style=3D"c=
olor:#008">end</span><span style=3D"color:#660">()),</span><span style=3D"c=
olor:#000"> rrng</span><span style=3D"color:#660">.</span><span style=3D"co=
lor:#008">begin</span><span style=3D"color:#660">());</span></div></code></=
div></div></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
ZSNIAKlbBgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&=
#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"ZSNIAKlbBgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank" =
rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://groups.google.com/=
a/isocpp.org/d/msgid/std-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%40i=
socpp.org?utm_medium\x3demail\x26utm_source\x3dfooter&#39;;return true;" on=
click=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/msgid/st=
d-proposals/c722a201-5c9c-4ac5-a1bd-e50beb6d7860%40isocpp.org?utm_medium\x3=
demail\x26utm_source\x3dfooter&#39;;return true;">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/c722a201-5c9c-4ac5-<wbr>a1bd-=
e50beb6d7860%40isocpp.org</a><wbr>.<br>
</div></blockquote></div></blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/b8807f7c-afc7-4e35-9020-98882a5d93bc%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/b8807f7c-afc7-4e35-9020-98882a5d93bc=
%40isocpp.org</a>.<br />

------=_Part_405_1637477051.1499949560109--

------=_Part_404_1005163662.1499949560108--

.


Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date: Thu, 13 Jul 2017 10:21:17 -0700 (PDT)
Raw View
------=_Part_611_508594222.1499966478086
Content-Type: multipart/alternative;
 boundary="----=_Part_612_799264021.1499966478087"

------=_Part_612_799264021.1499966478087
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wednesday, July 12, 2017 at 6:43:11 PM UTC-7, Nicol Bolas wrote:
>
> On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O'Dwyer wrote:
>>
>> On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soundradix.com=20
>> wrote:
>>>
>>> Hi,
>>>
>>> Would anyone be interested in adding std::shift to <algorithm>?=20
>>>
>>> It would be similar to both:
>>> - std::rotate, but without moving the head elements back to the tail.=
=20
>>> This would allow a more efficient implementation and clearer semantics =
in=20
>>> case rotation is not needed as well as correctness in case rotation is=
=20
>>> undesired.
>>> - <algorithm>'s std::move/std::move_backward (depending on the shift=20
>>> direction).
>>>
>>> std::shift should probably accommodate both left and right shifts by on=
e=20
>>> of:
>>> - giving it either begin() and end(), or rbegin() and rend(), similar t=
o=20
>>> how std::rotate works for both left and right rotations. The advantage =
is=20
>>> compactness of the implementation.
>>> - allowing the shift count parameter to be either positive or negative.=
=20
>>> The advantage is compactness, though it might not be clear which direct=
ion=20
>>> is which - to be consistent with rotate, positive integers should shift=
 to=20
>>> the left.
>>> - having std::shift_right and std::shift_left functions. The advantage=
=20
>>> is clarity when calling the methods, although the same argument could b=
e=20
>>> made for having separate std::rotate_left and std::rotate_right instead=
 of=20
>>> std::rotate, which we don't have.
>>>
>>
>> std::rotate is actually just a rotation; it doesn't need "left" or=20
>> "right" qualification because they're 100% equivalent. Consider a classr=
oom=20
>> globe with London in front, facing you. Now "rotate" the globe until=20
>> Beijing is in front. It doesn't matter if you rotate left or rotate righ=
t;=20
>> the outcome is exactly the same either way.
>> =20
>>
>>> Here's a sample implementation of a shift to the right direction:
>>>
>>> template<class BidirIt>=20
>>> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)=20
>>> {=20
>>>     std::move_backward(first, last - n, last);=20
>>> }
>>>
>>> This demonstrates that while std::shift is implementable with=20
>>> std::move/std::move_backward,
>>> 1) It isn't immediately clear from the code (at least to my eyes) that=
=20
>>> this is a shift right, unless you are intimately familiar with=20
>>> std::move_backward.
>>> 2) Different calls, either to std::move or to std::move_backward, are=
=20
>>> required, depending on the shift direction.
>>>
>>
>> If you're shifting the whole container's contents, you could use either=
=20
>> of these:
>>     std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());
>>     std::move_backward(ctr.begin(), ctr.end() - n, ctr.end())?
>> I don't currently see the use-case for this "shift just a piece of a=20
>> container" algorithm, I mean as distinct from std::move and=20
>> std::move_backward which already exist. Do you have a use-case?
>>
>
> The use-case would be anytime you'd want to use the code you just wrote.=
=20
> When you have a range and N, and you want to do a shift N units in that=
=20
> direction.
>
> The point of having it is one of clarification and user expectations. Yes=
,=20
> you can use `move` and `move_backward` to accomplish a shift. But conside=
r=20
> the two function calls:
>
> //A
> std::shift(rng.begin(), rng.end(), N);
>
> //B
> auto rrng =3D std::make_reverse_range(rng);
> std::move(rrng.begin() + N, rrng.end(), rrng.begin());
>
> A and B both do the same thing. But it's a *lot easier* to figure out=20
> what the code is actually accomplishing from looking at A than B.
>

Do you have a use-case for either of these?
I recall your admonition cross-thread that generally in the STL we *don't*=
=20
want to operate on containers but rather on ranges (or iterator-pairs); so=
=20
if I had a range that I wanted to "shift", I would first consider whether I=
=20
could do something like

    // OLD: shift_in_place(range, n); operate_on(range.begin(),=20
range.end());
    // NEW: operate_on(range.begin() + n, range.end());

That is, instead of moving the actual data, which might be slow, I'd move=
=20
one or the other "endpoint" while leaving the data in place.
In his reply, Dan Raviv mentioned that this is exactly the kind of thing=20
that a circular buffer does, and he's right (see proposal P0059).



B gets even more obtuse confusing in a range-based world:
>
> //A
> std::shift(rng, N);
>
> //B
> auto rrng =3D std::make_reverse_range(rng);
> std::move(std::make_range(rrng.begin + N, rrng.end()), rrng.begin());
>

In a range-based world, I would write this as

    auto output =3D input | rng::drop(n);

for a "left-shift", or... okay, the "right-shift" version is messy, at=20
least in my version, because it involves concatenating ranges one of which=
=20
needs to be created out of whole cloth, with n objects, each of which is in=
=20
a "valid but unspecified" state.  (I'd bet *money* you can't give me a=20
use-case for *that* one.)

I'd still like to see a use-case for O(n) "shifting" a sequence of elements=
=20
in-place (as opposed to using one of these range-based approaches, or using=
=20
a circular buffer, or "shifting the endpoints").  I agree that sometimes=20
you do want to copy/move the second part of a sequence over the first part,=
=20
but I would always express that in terms of "I'm std::copy'ing /=20
std::move'ing data." Expressing it as a "shift" doesn't feel natural to me=
=20
in any of the (extremely rare) use-cases I've thought of. Do you have a=20
use-case?

=E2=80=93Arthur

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/99d55051-ad56-4386-8a0f-9d7627b63106%40isocpp.or=
g.

------=_Part_612_799264021.1499966478087
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Wednesday, July 12, 2017 at 6:43:11 PM UTC-7, Nicol Bol=
as wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: =
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">On W=
ednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O&#39;Dwyer wrote:<bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Wednesday, July 12, =
2017 at 2:53:19 AM UTC-7, <a>d...@soundradix.com</a> wrote:<blockquote clas=
s=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc =
solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>Would anyon=
e be interested in adding std::shift to &lt;algorithm&gt;?=C2=A0</div><div>=
<br></div><div>It would be similar to both:</div><div>- std::rotate, but wi=
thout moving the head elements back to the tail. This would allow a more ef=
ficient implementation and clearer semantics in case rotation is not needed=
 as well as correctness in case rotation is undesired.</div><div>- &lt;algo=
rithm&gt;&#39;s std::move/std::move_backward (depending on the shift direct=
ion).</div><div><br></div><div>std::shift should probably accommodate both =
left and right shifts by one of:</div><div>- giving it either begin() and e=
nd(), or rbegin() and rend(), similar to how std::rotate works for both lef=
t and right rotations. The advantage is compactness of the implementation.<=
/div><div>- allowing the shift count parameter to be either positive or neg=
ative. The advantage is compactness, though it might not be clear which dir=
ection is which - to be consistent with rotate, positive integers should sh=
ift to the left.<br></div><div><div>- having std::shift_right and std::shif=
t_left functions. The advantage is clarity when calling the methods, althou=
gh the same argument could be made for having separate std::rotate_left and=
 std::rotate_right instead of std::rotate, which we don&#39;t have.</div></=
div></div></blockquote><div><br></div><div>std::rotate is actually just a r=
otation; it doesn&#39;t need &quot;left&quot; or &quot;right&quot; qualific=
ation because they&#39;re 100% equivalent. Consider a classroom globe with =
London in front, facing you. Now &quot;rotate&quot; the globe until Beijing=
 is in front. It doesn&#39;t matter if you rotate left or rotate right; the=
 outcome is exactly the same either way.</div><div>=C2=A0</div><blockquote =
class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>Here&#39;s a sample imple=
mentation of a shift to the right direction:<br></div><br><div style=3D"bac=
kground-color:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:=
break-word"><code><div><span style=3D"color:#008">template</span><span styl=
e=3D"color:#660">&lt;</span><span style=3D"color:#008">class</span><span st=
yle=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</span><span s=
tyle=3D"color:#660">&gt;</span><span style=3D"color:#000"> <br></span><span=
 style=3D"color:#008">void</span><span style=3D"color:#000"> shift_right</s=
pan><span style=3D"color:#660">(</span><span style=3D"color:#606">BidirIt</=
span><span style=3D"color:#000"> first</span><span style=3D"color:#660">,</=
span><span style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt<=
/span><span style=3D"color:#000"> </span><span style=3D"color:#008">last</s=
pan><span style=3D"color:#660">,</span><span style=3D"color:#000"> </span><=
span style=3D"color:#008">unsigned</span><span style=3D"color:#000"> </span=
><span style=3D"color:#008">int</span><span style=3D"color:#000"> n </span>=
<span style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><sp=
an style=3D"color:#066">1</span><span style=3D"color:#660">)</span><span st=
yle=3D"color:#000"> <br></span><span style=3D"color:#660">{</span><span sty=
le=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">:=
:</span><span style=3D"color:#000">move_backward</span><span style=3D"color=
:#660">(</span><span style=3D"color:#000">first</span><span style=3D"color:=
#660">,</span><span style=3D"color:#000"> </span><span style=3D"color:#008"=
>last</span><span style=3D"color:#000"> </span><span style=3D"color:#660">-=
</span><span style=3D"color:#000"> n</span><span style=3D"color:#660">,</sp=
an><span style=3D"color:#000"> </span><span style=3D"color:#008">last</span=
><span style=3D"color:#660">);</span><span style=3D"color:#000"> <br></span=
><span style=3D"color:#660">}</span><span style=3D"color:#000"><br></span><=
/div></code></div><div><br></div><div>This demonstrates that while std::shi=
ft is implementable with std::move/std::move_backward,</div><div>1) It isn&=
#39;t immediately clear from the code (at least to my eyes) that this is a =
shift right, unless you are intimately familiar with std::move_backward.</d=
iv><div>2) Different calls, either to std::move or to std::move_backward, a=
re required, depending on the shift direction.</div></div></blockquote><div=
><br></div><div>If you&#39;re shifting the whole container&#39;s contents, =
you could use either of these:</div><div>=C2=A0 =C2=A0 std::move(ctr.rbegin=
() + n, ctr.rend(), ctr.rbegin());</div><div>=C2=A0 =C2=A0 std::move_backwa=
rd(ctr.begin()<wbr>, ctr.end() - n, ctr.end())?</div><div>I don&#39;t curre=
ntly see the use-case for this &quot;shift just a piece of a container&quot=
; algorithm, I mean as distinct from std::move and std::move_backward which=
 already exist. Do you have a use-case?</div></div></blockquote><div><br>Th=
e use-case would be anytime you&#39;d want to use the code you just wrote. =
When you have a range and N, and you want to do a shift N units in that dir=
ection.<br><br>The point of having it is one of clarification and user expe=
ctations. Yes, you can use `move` and `move_backward` to accomplish a shift=
.. But consider the two function calls:<br><br><div style=3D"background-colo=
r:rgb(250,250,250);border-color:rgb(187,187,187);border-style:solid;border-=
width:1px"><code><div><span style=3D"color:#800">//A</span><span style=3D"c=
olor:#000"><br>std</span><span style=3D"color:#660">::</span><span style=3D=
"color:#000">shift</span><span style=3D"color:#660">(</span><span style=3D"=
color:#000">rng</span><span style=3D"color:#660">.</span><span style=3D"col=
or:#008">begin</span><span style=3D"color:#660">(),</span><span style=3D"co=
lor:#000"> rng</span><span style=3D"color:#660">.</span><span style=3D"colo=
r:#008">end</span><span style=3D"color:#660">(),</span><span style=3D"color=
:#000"> N</span><span style=3D"color:#660">);</span><span style=3D"color:#0=
00"><br><br></span><span style=3D"color:#800">//B</span><span style=3D"colo=
r:#000"><br></span><span style=3D"color:#008">auto</span><span style=3D"col=
or:#000"> rrng </span><span style=3D"color:#660">=3D</span><span style=3D"c=
olor:#000"> std</span><span style=3D"color:#660">::</span><span style=3D"co=
lor:#000">make_reverse_range</span><span style=3D"color:#660">(</span><span=
 style=3D"color:#000">rng</span><span style=3D"color:#660">);</span><span s=
tyle=3D"color:#000"><br>std</span><span style=3D"color:#660">::</span><span=
 style=3D"color:#000">move</span><span style=3D"color:#660">(</span><span s=
tyle=3D"color:#000">rrng</span><span style=3D"color:#660">.</span><span sty=
le=3D"color:#008">begin</span><span style=3D"color:#660">()</span><span sty=
le=3D"color:#000"> </span><span style=3D"color:#660">+</span><span style=3D=
"color:#000"> N</span><span style=3D"color:#660">,</span><span style=3D"col=
or:#000"> rrng</span><span style=3D"color:#660">.</span><span style=3D"colo=
r:#008">end</span><span style=3D"color:#660">(),</span><span style=3D"color=
:#000"> rrng</span><span style=3D"color:#660">.</span><span style=3D"color:=
#008">begin</span><span style=3D"color:#660">());</span></div></code></div>=
<br>A and B both do the same thing. But it&#39;s a <i>lot easier</i> to fig=
ure out what the code is actually accomplishing from looking at A than B.<b=
r></div></div></blockquote><div><br></div><div>Do you have a use-case for e=
ither of these?</div><div>I recall your admonition cross-thread that genera=
lly in the STL we *don&#39;t* want to operate on containers but rather on r=
anges (or iterator-pairs); so if I had a range that I wanted to &quot;shift=
&quot;, I would first consider whether I could do something like</div><div>=
<br></div><div>=C2=A0 =C2=A0 // OLD: shift_in_place(range, n); operate_on(r=
ange.begin(), range.end());</div><div>=C2=A0 =C2=A0 // NEW: operate_on(rang=
e.begin() + n, range.end());</div><div><br></div><div>That is, instead of m=
oving the actual data, which might be slow, I&#39;d move one or the other &=
quot;endpoint&quot; while leaving the data in place.</div><div>In his reply=
, Dan Raviv mentioned that this is exactly the kind of thing that a circula=
r buffer does, and he&#39;s right (see proposal P0059).</div><div><br></div=
><div><br></div><div><br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"=
><div dir=3D"ltr"><div>B gets even more obtuse confusing in a range-based w=
orld:<br><br><div style=3D"background-color:rgb(250,250,250);border-color:r=
gb(187,187,187);border-style:solid;border-width:1px"><code><div><span style=
=3D"color:#800">//A</span><span style=3D"color:#000"><br>std</span><span st=
yle=3D"color:#660">::</span><span style=3D"color:#000">shift</span><span st=
yle=3D"color:#660">(</span><span style=3D"color:#000">rng</span><span style=
=3D"color:#660">,</span><span style=3D"color:#000"> N</span><span style=3D"=
color:#660">);</span><span style=3D"color:#000"><br><br></span><span style=
=3D"color:#800">//B</span><span style=3D"color:#000"><br></span><span style=
=3D"color:#008">auto</span><span style=3D"color:#000"> rrng </span><span st=
yle=3D"color:#660">=3D</span><span style=3D"color:#000"> std</span><span st=
yle=3D"color:#660">::</span><span style=3D"color:#000">make_reverse_range</=
span><span style=3D"color:#660">(</span><span style=3D"color:#000">rng</spa=
n><span style=3D"color:#660">);</span><span style=3D"color:#000"><br>std</s=
pan><span style=3D"color:#660">::</span><span style=3D"color:#000">move</sp=
an><span style=3D"color:#660">(</span><span style=3D"color:#000">std</span>=
<span style=3D"color:#660">::</span><span style=3D"color:#000">make_range</=
span><span style=3D"color:#660">(</span><span style=3D"color:#000">rrng</sp=
an><span style=3D"color:#660"><wbr>.</span><span style=3D"color:#008">begin=
</span><span style=3D"color:#000"> </span><span style=3D"color:#660">+</spa=
n><span style=3D"color:#000"> N</span><span style=3D"color:#660">,</span><s=
pan style=3D"color:#000"> rrng</span><span style=3D"color:#660">.</span><sp=
an style=3D"color:#008">end</span><span style=3D"color:#660">()),</span><sp=
an style=3D"color:#000"> rrng</span><span style=3D"color:#660">.</span><spa=
n style=3D"color:#008">begin</span><span style=3D"color:#660">());</span></=
div></code></div></div></div></blockquote><div><br></div><div>In a range-ba=
sed world, I would write this as</div><div><br></div><div>=C2=A0 =C2=A0 aut=
o output =3D input | rng::drop(n);</div><div><br></div><div>for a &quot;lef=
t-shift&quot;, or... okay, the &quot;right-shift&quot; version is messy, at=
 least in my version, because it involves concatenating ranges one of which=
 needs to be created out of whole cloth, with n objects, each of which is i=
n a &quot;valid but unspecified&quot; state. =C2=A0(I&#39;d bet <i>money</i=
> you can&#39;t give me a use-case for <i>that</i> one.)</div><div><br></di=
v><div>I&#39;d still like to see a use-case for O(n) &quot;shifting&quot; a=
 sequence of elements in-place (as opposed to using one of these range-base=
d approaches, or using a circular buffer, or &quot;shifting the endpoints&q=
uot;). =C2=A0I agree that sometimes you do want to copy/move the second par=
t of a sequence over the first part, but I would always express that in ter=
ms of &quot;I&#39;m std::copy&#39;ing / std::move&#39;ing data.&quot; Expre=
ssing it as a &quot;shift&quot; doesn&#39;t feel natural to me in any of th=
e (extremely rare) use-cases I&#39;ve thought of. Do you have a use-case?</=
div><div><br></div><div>=E2=80=93Arthur</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/99d55051-ad56-4386-8a0f-9d7627b63106%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/99d55051-ad56-4386-8a0f-9d7627b63106=
%40isocpp.org</a>.<br />

------=_Part_612_799264021.1499966478087--

------=_Part_611_508594222.1499966478086--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Fri, 14 Jul 2017 00:14:51 +0300
Raw View
--001a11408742936e0e0554396de7
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Jul 13, 2017 at 8:21 PM, Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
wrote:

> On Wednesday, July 12, 2017 at 6:43:11 PM UTC-7, Nicol Bolas wrote:
>>
>> On Wednesday, July 12, 2017 at 7:47:05 PM UTC-4, Arthur O'Dwyer wrote:
>>>
>>> On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, d...@soundradix.com
>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> Would anyone be interested in adding std::shift to <algorithm>?
>>>>
>>>> It would be similar to both:
>>>> - std::rotate, but without moving the head elements back to the tail.
>>>> This would allow a more efficient implementation and clearer semantics=
 in
>>>> case rotation is not needed as well as correctness in case rotation is
>>>> undesired.
>>>> - <algorithm>'s std::move/std::move_backward (depending on the shift
>>>> direction).
>>>>
>>>> std::shift should probably accommodate both left and right shifts by
>>>> one of:
>>>> - giving it either begin() and end(), or rbegin() and rend(), similar
>>>> to how std::rotate works for both left and right rotations. The advant=
age
>>>> is compactness of the implementation.
>>>> - allowing the shift count parameter to be either positive or negative=
..
>>>> The advantage is compactness, though it might not be clear which direc=
tion
>>>> is which - to be consistent with rotate, positive integers should shif=
t to
>>>> the left.
>>>> - having std::shift_right and std::shift_left functions. The advantage
>>>> is clarity when calling the methods, although the same argument could =
be
>>>> made for having separate std::rotate_left and std::rotate_right instea=
d of
>>>> std::rotate, which we don't have.
>>>>
>>>
>>> std::rotate is actually just a rotation; it doesn't need "left" or
>>> "right" qualification because they're 100% equivalent. Consider a class=
room
>>> globe with London in front, facing you. Now "rotate" the globe until
>>> Beijing is in front. It doesn't matter if you rotate left or rotate rig=
ht;
>>> the outcome is exactly the same either way.
>>>
>>>
>>>> Here's a sample implementation of a shift to the right direction:
>>>>
>>>> template<class BidirIt>
>>>> void shift_right(BidirIt first, BidirIt last, unsigned int n =3D 1)
>>>> {
>>>>     std::move_backward(first, last - n, last);
>>>> }
>>>>
>>>> This demonstrates that while std::shift is implementable with
>>>> std::move/std::move_backward,
>>>> 1) It isn't immediately clear from the code (at least to my eyes) that
>>>> this is a shift right, unless you are intimately familiar with
>>>> std::move_backward.
>>>> 2) Different calls, either to std::move or to std::move_backward, are
>>>> required, depending on the shift direction.
>>>>
>>>
>>> If you're shifting the whole container's contents, you could use either
>>> of these:
>>>     std::move(ctr.rbegin() + n, ctr.rend(), ctr.rbegin());
>>>     std::move_backward(ctr.begin(), ctr.end() - n, ctr.end())?
>>> I don't currently see the use-case for this "shift just a piece of a
>>> container" algorithm, I mean as distinct from std::move and
>>> std::move_backward which already exist. Do you have a use-case?
>>>
>>
>> The use-case would be anytime you'd want to use the code you just wrote.
>> When you have a range and N, and you want to do a shift N units in that
>> direction.
>>
>> The point of having it is one of clarification and user expectations.
>> Yes, you can use `move` and `move_backward` to accomplish a shift. But
>> consider the two function calls:
>>
>> //A
>> std::shift(rng.begin(), rng.end(), N);
>>
>> //B
>> auto rrng =3D std::make_reverse_range(rng);
>> std::move(rrng.begin() + N, rrng.end(), rrng.begin());
>>
>> A and B both do the same thing. But it's a *lot easier* to figure out
>> what the code is actually accomplishing from looking at A than B.
>>
>
> Do you have a use-case for either of these?
> I recall your admonition cross-thread that generally in the STL we *don't=
*
> want to operate on containers but rather on ranges (or iterator-pairs); s=
o
> if I had a range that I wanted to "shift", I would first consider whether=
 I
> could do something like
>
>     // OLD: shift_in_place(range, n); operate_on(range.begin(),
> range.end());
>     // NEW: operate_on(range.begin() + n, range.end());
>
> That is, instead of moving the actual data, which might be slow, I'd move
> one or the other "endpoint" while leaving the data in place.
> In his reply, Dan Raviv mentioned that this is exactly the kind of thing
> that a circular buffer does, and he's right (see proposal P0059).
>
> I also wrote that sometimes the circular buffer is less desirable than
just shifting the data.


>
> B gets even more obtuse confusing in a range-based world:
>>
>> //A
>> std::shift(rng, N);
>>
>> //B
>> auto rrng =3D std::make_reverse_range(rng);
>> std::move(std::make_range(rrng.begin + N, rrng.end()), rrng.begin());
>>
>
> In a range-based world, I would write this as
>
>     auto output =3D input | rng::drop(n);
>
> for a "left-shift", or... okay, the "right-shift" version is messy, at
> least in my version, because it involves concatenating ranges one of whic=
h
> needs to be created out of whole cloth, with n objects, each of which is =
in
> a "valid but unspecified" state.  (I'd bet *money* you can't give me a
> use-case for *that* one.)
>
> I'd still like to see a use-case for O(n) "shifting" a sequence of
> elements in-place (as opposed to using one of these range-based approache=
s,
> or using a circular buffer, or "shifting the endpoints").  I agree that
> sometimes you do want to copy/move the second part of a sequence over the
> first part, but I would always express that in terms of "I'm std::copy'in=
g
> / std::move'ing data." Expressing it as a "shift" doesn't feel natural to
> me in any of the (extremely rare) use-cases I've thought of. Do you have =
a
> use-case?
>
> Expressing a shift (either forward or backward) seems more natural to me
then copying or moving, which are generic operations, but require more
effort on the reader's part in case they are used for a simple shift. And
as I mentioned, a common use case in DSP for shifting is time series
analysis.


> =E2=80=93Arthur
>
> --
> 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.
> To view this discussion on the web visit https://groups.google.com/a/
> isocpp.org/d/msgid/std-proposals/99d55051-ad56-4386-
> 8a0f-9d7627b63106%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/99d55051-ad=
56-4386-8a0f-9d7627b63106%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CADw4SdREZTpyF84ZHkA%3Dp%2BdMZ-V%3D0drdyTp_XVFPc=
WqUF%3Ds0cA%40mail.gmail.com.

--001a11408742936e0e0554396de7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Thu, Jul 13, 2017 at 8:21 PM, Arthur O&#39;Dwyer <span dir=3D"ltr">&=
lt;<a href=3D"mailto:arthur.j.odwyer@gmail.com" target=3D"_blank">arthur.j.=
odwyer@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:=
solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"=
><div><div class=3D"gmail-h5">On Wednesday, July 12, 2017 at 6:43:11 PM UTC=
-7, Nicol Bolas wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-co=
lor:rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">On Wednesday, July =
12, 2017 at 7:47:05 PM UTC-4, Arthur O&#39;Dwyer wrote:<blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;borde=
r-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><di=
v dir=3D"ltr">On Wednesday, July 12, 2017 at 2:53:19 AM UTC-7, <a>d...@soun=
dradix.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0px =
0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-col=
or:rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><d=
iv>Would anyone be interested in adding std::shift to &lt;algorithm&gt;?=C2=
=A0</div><div><br></div><div>It would be similar to both:</div><div>- std::=
rotate, but without moving the head elements back to the tail. This would a=
llow a more efficient implementation and clearer semantics in case rotation=
 is not needed as well as correctness in case rotation is undesired.</div><=
div>- &lt;algorithm&gt;&#39;s std::move/std::move_backward (depending on th=
e shift direction).</div><div><br></div><div>std::shift should probably acc=
ommodate both left and right shifts by one of:</div><div>- giving it either=
 begin() and end(), or rbegin() and rend(), similar to how std::rotate work=
s for both left and right rotations. The advantage is compactness of the im=
plementation.</div><div>- allowing the shift count parameter to be either p=
ositive or negative. The advantage is compactness, though it might not be c=
lear which direction is which - to be consistent with rotate, positive inte=
gers should shift to the left.<br></div><div><div>- having std::shift_right=
 and std::shift_left functions. The advantage is clarity when calling the m=
ethods, although the same argument could be made for having separate std::r=
otate_left and std::rotate_right instead of std::rotate, which we don&#39;t=
 have.</div></div></div></blockquote><div><br></div><div>std::rotate is act=
ually just a rotation; it doesn&#39;t need &quot;left&quot; or &quot;right&=
quot; qualification because they&#39;re 100% equivalent. Consider a classro=
om globe with London in front, facing you. Now &quot;rotate&quot; the globe=
 until Beijing is in front. It doesn&#39;t matter if you rotate left or rot=
ate right; the outcome is exactly the same either way.</div><div>=C2=A0</di=
v><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204)=
;padding-left:1ex"><div dir=3D"ltr"><div>Here&#39;s a sample implementation=
 of a shift to the right direction:<br></div><br><div style=3D"background-c=
olor:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:break-wor=
d"><code><div><span style=3D"color:rgb(0,0,136)">template</span><span style=
=3D"color:rgb(102,102,0)">&lt;</span><span style=3D"color:rgb(0,0,136)">cla=
ss</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(=
102,0,102)">BidirIt</span><span style=3D"color:rgb(102,102,0)">&gt;</span><=
span style=3D"color:rgb(0,0,0)"> <br></span><span style=3D"color:rgb(0,0,13=
6)">void</span><span style=3D"color:rgb(0,0,0)"> shift_right</span><span st=
yle=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(102,0,102)">B=
idirIt</span><span style=3D"color:rgb(0,0,0)"> first</span><span style=3D"c=
olor:rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> </span><span=
 style=3D"color:rgb(102,0,102)">BidirIt</span><span style=3D"color:rgb(0,0,=
0)"> </span><span style=3D"color:rgb(0,0,136)">last</span><span style=3D"co=
lor:rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> </span><span =
style=3D"color:rgb(0,0,136)">unsigned</span><span style=3D"color:rgb(0,0,0)=
"> </span><span style=3D"color:rgb(0,0,136)">int</span><span style=3D"color=
:rgb(0,0,0)"> n </span><span style=3D"color:rgb(102,102,0)">=3D</span><span=
 style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(0,102,102)">1<=
/span><span style=3D"color:rgb(102,102,0)">)</span><span style=3D"color:rgb=
(0,0,0)"> <br></span><span style=3D"color:rgb(102,102,0)">{</span><span sty=
le=3D"color:rgb(0,0,0)"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:r=
gb(102,102,0)">::</span><span style=3D"color:rgb(0,0,0)">move_backward</spa=
n><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0=
,0)">first</span><span style=3D"color:rgb(102,102,0)">,</span><span style=
=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(0,0,136)">last</span=
><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(102,102,=
0)">-</span><span style=3D"color:rgb(0,0,0)"> n</span><span style=3D"color:=
rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> </span><span styl=
e=3D"color:rgb(0,0,136)">last</span><span style=3D"color:rgb(102,102,0)">);=
</span><span style=3D"color:rgb(0,0,0)"> <br></span><span style=3D"color:rg=
b(102,102,0)">}</span><span style=3D"color:rgb(0,0,0)"><br></span></div></c=
ode></div><div><br></div><div>This demonstrates that while std::shift is im=
plementable with std::move/std::move_backward,</div><div>1) It isn&#39;t im=
mediately clear from the code (at least to my eyes) that this is a shift ri=
ght, unless you are intimately familiar with std::move_backward.</div><div>=
2) Different calls, either to std::move or to std::move_backward, are requi=
red, depending on the shift direction.</div></div></blockquote><div><br></d=
iv><div>If you&#39;re shifting the whole container&#39;s contents, you coul=
d use either of these:</div><div>=C2=A0 =C2=A0 std::move(ctr.rbegin() + n, =
ctr.rend(), ctr.rbegin());</div><div>=C2=A0 =C2=A0 std::move_backward(ctr.b=
egin()<wbr>, ctr.end() - n, ctr.end())?</div><div>I don&#39;t currently see=
 the use-case for this &quot;shift just a piece of a container&quot; algori=
thm, I mean as distinct from std::move and std::move_backward which already=
 exist. Do you have a use-case?</div></div></blockquote><div><br>The use-ca=
se would be anytime you&#39;d want to use the code you just wrote. When you=
 have a range and N, and you want to do a shift N units in that direction.<=
br><br>The point of having it is one of clarification and user expectations=
.. Yes, you can use `move` and `move_backward` to accomplish a shift. But co=
nsider the two function calls:<br><br><div style=3D"background-color:rgb(25=
0,250,250);border:1px solid rgb(187,187,187)"><code><div><span style=3D"col=
or:rgb(136,0,0)">//A</span><span style=3D"color:rgb(0,0,0)"><br>std</span><=
span style=3D"color:rgb(102,102,0)">::</span><span style=3D"color:rgb(0,0,0=
)">shift</span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"=
color:rgb(0,0,0)">rng</span><span style=3D"color:rgb(102,102,0)">.</span><s=
pan style=3D"color:rgb(0,0,136)">begin</span><span style=3D"color:rgb(102,1=
02,0)">(),</span><span style=3D"color:rgb(0,0,0)"> rng</span><span style=3D=
"color:rgb(102,102,0)">.</span><span style=3D"color:rgb(0,0,136)">end</span=
><span style=3D"color:rgb(102,102,0)">(),</span><span style=3D"color:rgb(0,=
0,0)"> N</span><span style=3D"color:rgb(102,102,0)">);</span><span style=3D=
"color:rgb(0,0,0)"><br><br></span><span style=3D"color:rgb(136,0,0)">//B</s=
pan><span style=3D"color:rgb(0,0,0)"><br></span><span style=3D"color:rgb(0,=
0,136)">auto</span><span style=3D"color:rgb(0,0,0)"> rrng </span><span styl=
e=3D"color:rgb(102,102,0)">=3D</span><span style=3D"color:rgb(0,0,0)"> std<=
/span><span style=3D"color:rgb(102,102,0)">::</span><span style=3D"color:rg=
b(0,0,0)">make_reverse_range</span><span style=3D"color:rgb(102,102,0)">(</=
span><span style=3D"color:rgb(0,0,0)">rng</span><span style=3D"color:rgb(10=
2,102,0)">);</span><span style=3D"color:rgb(0,0,0)"><br>std</span><span sty=
le=3D"color:rgb(102,102,0)">::</span><span style=3D"color:rgb(0,0,0)">move<=
/span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb=
(0,0,0)">rrng</span><span style=3D"color:rgb(102,102,0)">.</span><span styl=
e=3D"color:rgb(0,0,136)">begin</span><span style=3D"color:rgb(102,102,0)">(=
)</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(1=
02,102,0)">+</span><span style=3D"color:rgb(0,0,0)"> N</span><span style=3D=
"color:rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> rrng</span=
><span style=3D"color:rgb(102,102,0)">.</span><span style=3D"color:rgb(0,0,=
136)">end</span><span style=3D"color:rgb(102,102,0)">(),</span><span style=
=3D"color:rgb(0,0,0)"> rrng</span><span style=3D"color:rgb(102,102,0)">.</s=
pan><span style=3D"color:rgb(0,0,136)">begin</span><span style=3D"color:rgb=
(102,102,0)">());</span></div></code></div><br>A and B both do the same thi=
ng. But it&#39;s a <i>lot easier</i> to figure out what the code is actuall=
y accomplishing from looking at A than B.<br></div></div></blockquote><div>=
<br></div></div></div><div>Do you have a use-case for either of these?</div=
><div>I recall your admonition cross-thread that generally in the STL we *d=
on&#39;t* want to operate on containers but rather on ranges (or iterator-p=
airs); so if I had a range that I wanted to &quot;shift&quot;, I would firs=
t consider whether I could do something like</div><div><br></div><div>=C2=
=A0 =C2=A0 // OLD: shift_in_place(range, n); operate_on(range.begin(), rang=
e.end());</div><div>=C2=A0 =C2=A0 // NEW: operate_on(range.begin() + n, ran=
ge.end());</div><div><br></div><div>That is, instead of moving the actual d=
ata, which might be slow, I&#39;d move one or the other &quot;endpoint&quot=
; while leaving the data in place.</div><div>In his reply, Dan Raviv mentio=
ned that this is exactly the kind of thing that a circular buffer does, and=
 he&#39;s right (see proposal P0059).</div><span class=3D"gmail-"><div><br>=
</div></span></div></blockquote><div><span style=3D"font-size:12.8000001907=
34863px">I also wrote that sometimes the circular buffer is less desirable =
than just shifting the data.</span></div><div><span style=3D"font-size:12.8=
00000190734863px"><br></span></div><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;=
border-left-color:rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><span=
 class=3D"gmail-"><div></div><div><br></div><div><br></div><blockquote clas=
s=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;b=
order-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"=
><div dir=3D"ltr"><div>B gets even more obtuse confusing in a range-based w=
orld:<br><br><div style=3D"background-color:rgb(250,250,250);border:1px sol=
id rgb(187,187,187)"><code><div><span style=3D"color:rgb(136,0,0)">//A</spa=
n><span style=3D"color:rgb(0,0,0)"><br>std</span><span style=3D"color:rgb(1=
02,102,0)">::</span><span style=3D"color:rgb(0,0,0)">shift</span><span styl=
e=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb(0,0,0)">rng</sp=
an><span style=3D"color:rgb(102,102,0)">,</span><span style=3D"color:rgb(0,=
0,0)"> N</span><span style=3D"color:rgb(102,102,0)">);</span><span style=3D=
"color:rgb(0,0,0)"><br><br></span><span style=3D"color:rgb(136,0,0)">//B</s=
pan><span style=3D"color:rgb(0,0,0)"><br></span><span style=3D"color:rgb(0,=
0,136)">auto</span><span style=3D"color:rgb(0,0,0)"> rrng </span><span styl=
e=3D"color:rgb(102,102,0)">=3D</span><span style=3D"color:rgb(0,0,0)"> std<=
/span><span style=3D"color:rgb(102,102,0)">::</span><span style=3D"color:rg=
b(0,0,0)">make_reverse_range</span><span style=3D"color:rgb(102,102,0)">(</=
span><span style=3D"color:rgb(0,0,0)">rng</span><span style=3D"color:rgb(10=
2,102,0)">);</span><span style=3D"color:rgb(0,0,0)"><br>std</span><span sty=
le=3D"color:rgb(102,102,0)">::</span><span style=3D"color:rgb(0,0,0)">move<=
/span><span style=3D"color:rgb(102,102,0)">(</span><span style=3D"color:rgb=
(0,0,0)">std</span><span style=3D"color:rgb(102,102,0)">::</span><span styl=
e=3D"color:rgb(0,0,0)">make_range</span><span style=3D"color:rgb(102,102,0)=
">(</span><span style=3D"color:rgb(0,0,0)">rrng</span><span style=3D"color:=
rgb(102,102,0)"><wbr>.</span><span style=3D"color:rgb(0,0,136)">begin</span=
><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:rgb(102,102,=
0)">+</span><span style=3D"color:rgb(0,0,0)"> N</span><span style=3D"color:=
rgb(102,102,0)">,</span><span style=3D"color:rgb(0,0,0)"> rrng</span><span =
style=3D"color:rgb(102,102,0)">.</span><span style=3D"color:rgb(0,0,136)">e=
nd</span><span style=3D"color:rgb(102,102,0)">()),</span><span style=3D"col=
or:rgb(0,0,0)"> rrng</span><span style=3D"color:rgb(102,102,0)">.</span><sp=
an style=3D"color:rgb(0,0,136)">begin</span><span style=3D"color:rgb(102,10=
2,0)">());</span></div></code></div></div></div></blockquote><div><br></div=
></span><div>In a range-based world, I would write this as</div><div><br></=
div><div>=C2=A0 =C2=A0 auto output =3D input | rng::drop(n);</div><div><br>=
</div><div>for a &quot;left-shift&quot;, or... okay, the &quot;right-shift&=
quot; version is messy, at least in my version, because it involves concate=
nating ranges one of which needs to be created out of whole cloth, with n o=
bjects, each of which is in a &quot;valid but unspecified&quot; state. =C2=
=A0(I&#39;d bet <i>money</i> you can&#39;t give me a use-case for <i>that</=
i> one.)</div><div><br></div><div>I&#39;d still like to see a use-case for =
O(n) &quot;shifting&quot; a sequence of elements in-place (as opposed to us=
ing one of these range-based approaches, or using a circular buffer, or &qu=
ot;shifting the endpoints&quot;).=C2=A0 I agree that sometimes you do want =
to copy/move the second part of a sequence over the first part, but I would=
 always express that in terms of &quot;I&#39;m std::copy&#39;ing / std::mov=
e&#39;ing data.&quot; Expressing it as a &quot;shift&quot; doesn&#39;t feel=
 natural to me in any of the (extremely rare) use-cases I&#39;ve thought of=
.. Do you have a use-case?</div><div><br></div></div></blockquote><div>Expre=
ssing a shift (either forward or backward) seems more natural to me then co=
pying or moving, which are generic operations, but require more effort on t=
he reader&#39;s part in case they are used for a simple shift. And as I men=
tioned, a common use case in DSP for shifting is time series analysis.</div=
><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px=
 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:=
rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div></div><div>=E2=80=
=93Arthur</div></div><span class=3D"gmail-">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/99d55051-ad56-4386-8a0f-9d7627b63106%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/99d5=
5051-ad56-4386-<wbr>8a0f-9d7627b63106%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CADw4SdREZTpyF84ZHkA%3Dp%2BdMZ-V%3D0d=
rdyTp_XVFPcWqUF%3Ds0cA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoo=
ter">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CADw4SdRE=
ZTpyF84ZHkA%3Dp%2BdMZ-V%3D0drdyTp_XVFPcWqUF%3Ds0cA%40mail.gmail.com</a>.<br=
 />

--001a11408742936e0e0554396de7--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Fri, 28 Jul 2017 11:43:10 -0700 (PDT)
Raw View
------=_Part_2136_819303541.1501267390087
Content-Type: multipart/alternative;
 boundary="----=_Part_2137_1779809544.1501267390087"

------=_Part_2137_1779809544.1501267390087
Content-Type: text/plain; charset="UTF-8"

Does anyone know if there was a specific motivation for adding
std::move_backward() to <algorithm>? It seems that using std::move() with
rbegin(),rend() iterators (for the basic use case) would have the same
effect.

On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d...@soundradix.com wrote:
>
> Hi,
>
> Would anyone be interested in adding std::shift to <algorithm>?
>
> It would be similar to both:
> - std::rotate, but without moving the head elements back to the tail. This
> would allow a more efficient implementation and clearer semantics in case
> rotation is not needed as well as correctness in case rotation is undesired.
> - <algorithm>'s std::move/std::move_backward (depending on the shift
> direction).
>
> std::shift should probably accommodate both left and right shifts by one
> of:
> - giving it either begin() and end(), or rbegin() and rend(), similar to
> how std::rotate works for both left and right rotations. The advantage is
> compactness of the implementation.
> - allowing the shift count parameter to be either positive or negative.
> The advantage is compactness, though it might not be clear which direction
> is which - to be consistent with rotate, positive integers should shift to
> the left.
> - having std::shift_right and std::shift_left functions. The advantage is
> clarity when calling the methods, although the same argument could be made
> for having separate std::rotate_left and std::rotate_right instead of
> std::rotate, which we don't have.
>
> Here's a sample implementation of a shift to the right direction:
>
> template<class BidirIt>
> void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
> {
>     std::move_backward(first, last - n, last);
> }
>
> This demonstrates that while std::shift is implementable with
> std::move/std::move_backward,
> 1) It isn't immediately clear from the code (at least to my eyes) that
> this is a shift right, unless you are intimately familiar with
> std::move_backward.
> 2) Different calls, either to std::move or to std::move_backward, are
> required, depending on the shift direction.
>
> So, implementing std::shift would allow writing more readable code.
>
> Thanks,
> Dan
>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/3e77c029-bc79-424c-bdad-eba28ec10cdb%40isocpp.org.

------=_Part_2137_1779809544.1501267390087
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Does anyone know if there was a specific motivation for ad=
ding std::move_backward() to &lt;algorithm&gt;? It seems that using std::mo=
ve() with rbegin(),rend() iterators (for the basic use case) would have the=
 same effect.<br><br>On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d...=
@soundradix.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr">Hi,<div><br></div><div>Would anyone be interested in adding std::s=
hift to &lt;algorithm&gt;?=C2=A0</div><div><br></div><div>It would be simil=
ar to both:</div><div>- std::rotate, but without moving the head elements b=
ack to the tail. This would allow a more efficient implementation and clear=
er semantics in case rotation is not needed as well as correctness in case =
rotation is undesired.</div><div>- &lt;algorithm&gt;&#39;s std::move/std::m=
ove_backward (depending on the shift direction).</div><div><br></div><div>s=
td::shift should probably accommodate both left and right shifts by one of:=
</div><div>- giving it either begin() and end(), or rbegin() and rend(), si=
milar to how std::rotate works for both left and right rotations. The advan=
tage is compactness of the implementation.</div><div>- allowing the shift c=
ount parameter to be either positive or negative. The advantage is compactn=
ess, though it might not be clear which direction is which - to be consiste=
nt with rotate, positive integers should shift to the left.<br></div><div><=
div>- having std::shift_right and std::shift_left functions. The advantage =
is clarity when calling the methods, although the same argument could be ma=
de for having separate std::rotate_left and std::rotate_right instead of st=
d::rotate, which we don&#39;t have.</div></div><div><br></div><div>Here&#39=
;s a sample implementation of a shift to the right direction:</div><br><div=
 style=3D"background-color:rgb(250,250,250);border:1px solid rgb(187,187,18=
7);word-wrap:break-word"><code><div><span style=3D"color:#008">template</sp=
an><span style=3D"color:#660">&lt;</span><span style=3D"color:#008">class</=
span><span style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt<=
/span><span style=3D"color:#660">&gt;</span><span style=3D"color:#000"> <br=
></span><span style=3D"color:#008">void</span><span style=3D"color:#000"> s=
hift_right</span><span style=3D"color:#660">(</span><span style=3D"color:#6=
06">BidirIt</span><span style=3D"color:#000"> first</span><span style=3D"co=
lor:#660">,</span><span style=3D"color:#000"> </span><span style=3D"color:#=
606">BidirIt</span><span style=3D"color:#000"> </span><span style=3D"color:=
#008">last</span><span style=3D"color:#660">,</span><span style=3D"color:#0=
00"> </span><span style=3D"color:#008">unsigned</span><span style=3D"color:=
#000"> </span><span style=3D"color:#008">int</span><span style=3D"color:#00=
0"> n </span><span style=3D"color:#660">=3D</span><span style=3D"color:#000=
"> </span><span style=3D"color:#066">1</span><span style=3D"color:#660">)</=
span><span style=3D"color:#000"> <br></span><span style=3D"color:#660">{</s=
pan><span style=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"=
color:#660">::</span><span style=3D"color:#000">move_backward</span><span s=
tyle=3D"color:#660">(</span><span style=3D"color:#000">first</span><span st=
yle=3D"color:#660">,</span><span style=3D"color:#000"> </span><span style=
=3D"color:#008">last</span><span style=3D"color:#000"> </span><span style=
=3D"color:#660">-</span><span style=3D"color:#000"> n</span><span style=3D"=
color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"color=
:#008">last</span><span style=3D"color:#660">);</span><span style=3D"color:=
#000"> <br></span><span style=3D"color:#660">}</span><span style=3D"color:#=
000"><br></span></div></code></div><div><br></div><div>This demonstrates th=
at while std::shift is implementable with std::move/std::move_backward,</di=
v><div>1) It isn&#39;t immediately clear from the code (at least to my eyes=
) that this is a shift right, unless you are intimately familiar with std::=
move_backward.</div><div>2) Different calls, either to std::move or to std:=
:move_backward, are required, depending on the shift direction.</div><div><=
br></div><div>So, implementing std::shift would allow writing more readable=
 code.</div><div><br></div><div>Thanks,</div><div>Dan</div></div></blockquo=
te></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/3e77c029-bc79-424c-bdad-eba28ec10cdb%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/3e77c029-bc79-424c-bdad-eba28ec10cdb=
%40isocpp.org</a>.<br />

------=_Part_2137_1779809544.1501267390087--

------=_Part_2136_819303541.1501267390087--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Fri, 28 Jul 2017 12:19:07 -0700 (PDT)
Raw View
------=_Part_2064_884191061.1501269547842
Content-Type: multipart/alternative;
 boundary="----=_Part_2065_719338155.1501269547842"

------=_Part_2065_719338155.1501269547842
Content-Type: text/plain; charset="UTF-8"

On Friday, July 28, 2017 at 2:43:10 PM UTC-4, Dan Raviv wrote:
>
> Does anyone know if there was a specific motivation for adding
> std::move_backward() to <algorithm>? It seems that using std::move() with
> rbegin(),rend() iterators (for the basic use case) would have the same
> effect.
>

First, reverse iterators have a tendency to be opaque. That is, you can't
effectively optimize through them. If `value_type` were trivially-copyable
and move-assignable, and the iterators would have been contiguous
(pointers, etc), you wouldn't be able to move them with a memcpy/memmove.
You could only do the standard one-element-at-a-time thing.

Second, your `rbegin/rend` idea only is useful if you have a container. If
you just have a pair of iterators, then reversing them is a bit harder, and
it requires putting them in backwards. Whereas `move_backward` pretty much
tells the story of what you want.

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/cb996c8c-eb3a-40ca-a925-b3885f1548ee%40isocpp.org.

------=_Part_2065_719338155.1501269547842
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Friday, July 28, 2017 at 2:43:10 PM UTC-4, Dan Raviv wr=
ote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex=
;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">Does anyo=
ne know if there was a specific motivation for adding std::move_backward() =
to &lt;algorithm&gt;? It seems that using std::move() with rbegin(),rend() =
iterators (for the basic use case) would have the same effect.<br></div></b=
lockquote><div><br>First, reverse iterators have a tendency to be opaque. T=
hat is, you can&#39;t effectively optimize through them. If `value_type` we=
re trivially-copyable and move-assignable, and the iterators would have bee=
n contiguous (pointers, etc), you wouldn&#39;t be able to move them with a =
memcpy/memmove. You could only do the standard one-element-at-a-time thing.=
<br><br>Second, your `rbegin/rend` idea only is useful if you have a contai=
ner. If you just have a pair of iterators, then reversing them is a bit har=
der, and it requires putting them in backwards. Whereas `move_backward` pre=
tty much tells the story of what you want.</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cb996c8c-eb3a-40ca-a925-b3885f1548ee%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/cb996c8c-eb3a-40ca-a925-b3885f1548ee=
%40isocpp.org</a>.<br />

------=_Part_2065_719338155.1501269547842--

------=_Part_2064_884191061.1501269547842--

.


Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Fri, 28 Jul 2017 15:19:18 -0400
Raw View
--Apple-Mail=_EA6096F5-8C45-41D6-A0F1-F9FC44081EE7
Content-Type: text/plain; charset="UTF-8"

On Jul 28, 2017, at 2:43 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>
> Does anyone know if there was a specific motivation for adding std::move_backward() to <algorithm>? It seems that using std::move() with rbegin(),rend() iterators (for the basic use case) would have the same effect.

See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html

Section 25 - Algorithms library

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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/94CDFCD7-3F9D-4D7E-BDD7-58D27561C291%40gmail.com.

--Apple-Mail=_EA6096F5-8C45-41D6-A0F1-F9FC44081EE7
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=signature.asc
Content-Type: application/pgp-signature;
 name=signature.asc
Content-Description: Message signed with OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIcBAEBCAAGBQJZe442AAoJEGbcHCxKqhWCXjoP/06FKnit2WlIvUO6vMHeJ8Hq
yStDxD4sBibj+jJCdTYVa9V+EOu434xUINyKmItAKIcEZTQBOQutvYtw6v1Uptbk
35c3gDe0qz7HvxMlBmSjeRtmjecTk5BZf9AnXJ1vMgjDl82zq5B/jKH5IB3shHFj
cGYOaxeNcegrhQnffiiI0WBJ+3Sb5v1xjI0NAzLqI3ehDzlqVS4NBCh3g2rRVQTT
TrjShODNHc0BERY5qBlpgojYdvLLYX/tfA9VnZUiJEyDLtwDJW64/yM6qi3A2Tx1
Ok3k+gg7ua76brGY+zi9amP5IesRPLbV0xon5+axyJ4V9olAh5QmFDzwk4sD87io
tX5A2kJARm6Y2033A+x+XYvkabdHD965r3fz2EXmuLqfqSyExM1Eri89s77LTy6k
ukHfLLGN6YuyKbDg28YsQY1+khfB8xjyOT7broUWyRnkG5W0SgH9Fw6VQqufFqMV
AaLRJXdkxRWbeVYvGglnfSXUfV+79dn9op7XUkvnUS8Ykx4xYAbCtplGCSCk0/T8
IB7xYOYe1M4RVkuTu+4X2y7LR1kQ38zaQuEo0BL6omavfCGgWRKE7u4BX2aMcwgV
nnZeLv8hPMd7HtjdETvuSRXgf1BWfWrhBdggkbHotr7LygG75IRqbYOZQr18popB
84hfwU3Z/30YKU5xdIB5
=5636
-----END PGP SIGNATURE-----

--Apple-Mail=_EA6096F5-8C45-41D6-A0F1-F9FC44081EE7--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Fri, 28 Jul 2017 23:50:10 +0300
Raw View
I see.

Then, isn't there a need for, e.g., an std::rotate_right function to augmen=
t the existing rotate(_left) algorithm, since rotating right can only be ac=
hieved through using reverse iterators? Or is the existing std::rotate desi=
gned so it can optimize for reverse iterators as well?

Thanks,
Dan

> On 28 Jul 2017, at 22:19, Howard Hinnant <howard.hinnant@gmail.com> wrote=
:
>=20
>> On Jul 28, 2017, at 2:43 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>>=20
>> Does anyone know if there was a specific motivation for adding std::move=
_backward() to <algorithm>? It seems that using std::move() with rbegin(),r=
end() iterators (for the basic use case) would have the same effect.
>=20
> See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html
>=20
> Section 25 - Algorithms library
>=20
> 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=
 email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/94CDFCD7-3F9D-4D7E-BDD7-58D27561C291%40gmail.c=
om.

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/5894BCEB-596E-4B45-B47C-0D5011F51D87%40gmail.com=
..

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Fri, 28 Jul 2017 23:51:39 +0300
Raw View
It looks like that section mentions the addition of std::move_backward, but not the rationale for adding it in addition to std::move. Or am I missing something?

Thanks,
Dan

> On 28 Jul 2017, at 22:19, Howard Hinnant <howard.hinnant@gmail.com> wrote:
>
>> On Jul 28, 2017, at 2:43 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>>
>> Does anyone know if there was a specific motivation for adding std::move_backward() to <algorithm>? It seems that using std::move() with rbegin(),rend() iterators (for the basic use case) would have the same effect.
>
> See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html
>
> Section 25 - Algorithms library
>
> 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.
> To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/94CDFCD7-3F9D-4D7E-BDD7-58D27561C291%40gmail.com.

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/96DEA673-B79C-4D08-AE8E-EFFCA3C5A0E8%40gmail.com.

.


Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Fri, 28 Jul 2017 17:13:30 -0400
Raw View
--Apple-Mail=_7F44FA8D-991D-4F46-A7E1-6A687C82E7B0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"

No one is claiming that <algorithm> is a complete set of all useful functio=
ns.  But no, I don=E2=80=99t see a need for rotate_right.  I find std::rota=
te easier to visualize when I call it swap_unequal_ranges.

Howard

On Jul 28, 2017, at 4:50 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>=20
> I see.
>=20
> Then, isn't there a need for, e.g., an std::rotate_right function to augm=
ent the existing rotate(_left) algorithm, since rotating right can only be =
achieved through using reverse iterators? Or is the existing std::rotate de=
signed so it can optimize for reverse iterators as well?
>=20
> Thanks,
> Dan
>=20
>> On 28 Jul 2017, at 22:19, Howard Hinnant <howard.hinnant@gmail.com> wrot=
e:
>>=20
>>> On Jul 28, 2017, at 2:43 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>>>=20
>>> Does anyone know if there was a specific motivation for adding std::mov=
e_backward() to <algorithm>? It seems that using std::move() with rbegin(),=
rend() iterators (for the basic use case) would have the same effect.
>>=20
>> See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html
>>=20
>> Section 25 - Algorithms library
>>=20
>> Howard
>>=20
>> --
>> You received this message because you are subscribed to the Google Group=
s "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/iso=
cpp.org/d/msgid/std-proposals/94CDFCD7-3F9D-4D7E-BDD7-58D27561C291%40gmail.=
com.
>=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.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/5894BCEB-596E-4B45-B47C-0D5011F51D87%40gmail.c=
om.

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/8E9545B5-E594-4268-B6AB-ABEA85F085B4%40gmail.com=
..

--Apple-Mail=_7F44FA8D-991D-4F46-A7E1-6A687C82E7B0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=signature.asc
Content-Type: application/pgp-signature;
 name=signature.asc
Content-Description: Message signed with OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIcBAEBCAAGBQJZe6j6AAoJEGbcHCxKqhWC3WIP/048v50CBs/lcfZZ14IgXcUv
vzVO/SDO/WcUyOBrwsYGXq5//eM+Se5BUwiTM9oV7d/bY47vLpeAzX0PScdbepBH
ZPbbJd8GR3uBVqFebfZvkOx+Pxfa47XTzrVDNaOeOEmgZFoiJjb2J1ntW8wZ7c8x
51YnDDJ+oefrQ2Yvx0gnbX9xdm1D+Y6yO/LdSM3cOnSiio2T5AO1V9xe7z2XbRx1
ANBjTBys9hSaeJysaRaSB9vMiBWxto2ffVgaxFE6xl1z5xWerEESoSgYA6D6pTR6
OMZGQPop0dQeCkD7SFzGDEhHw/8x/HbwIxg6VBMaGZ0i9cBPrFlXKGXQ5if2zFiu
lMimacjEGOwX9NVkD1I/Bo0hHDbgWZIxf1M0zRsgAewxKaEP7X6DWWrZKU67K15p
1cQbxD7m85dOqzrTEkdwfGWAF3y3FDCVV+FTsX46+lIc8qKd5Ci72ods6NhuRM7V
/iWFwed254B/phBpOrTegr3pqPGI6Kelf2QwhywJJQhZ0a+JenhwhwZKHcM5XIBw
Ds2jXMzhR1kw1Yliv8nnHVd9/fisZuE7VdUDAYO+jwYj3sbLg7XMK1mND1MVa9wv
7F7AhucOJ/af8miYXlRH0oyCsPK7ZHzTgG1hSUZkSchBQuvwM9NyBoCtqjaiWpwn
XK5zq6e0HCQCTcAdmqxX
=AijL
-----END PGP SIGNATURE-----

--Apple-Mail=_7F44FA8D-991D-4F46-A7E1-6A687C82E7B0--

.


Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Fri, 28 Jul 2017 17:15:58 -0400
Raw View
--Apple-Mail=_EF26E42D-57C7-4431-A0D3-E926ED4E8C95
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"

From the paper:

> move and move_backward are two new algorithms to augment copy and copy_ba=
ckward. They require only that the value_type be MoveAssignable (recall tha=
t CopyAssignable types are MoveAssignable). Strictly speaking the functiona=
lity could be obtained with the combination of copy (or copy_backward) and =
move_iterator, however the anticipated frequency of use of these functions =
indicates that the syntactic convenience of these functions is warranted.

The last sentence applies to both of the new algorithms.

Howard

On Jul 28, 2017, at 4:51 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>=20
> It looks like that section mentions the addition of std::move_backward, b=
ut not the rationale for adding it in addition to std::move. Or am I missin=
g something?
>=20
> Thanks,
> Dan
>=20
>> On 28 Jul 2017, at 22:19, Howard Hinnant <howard.hinnant@gmail.com> wrot=
e:
>>=20
>>> On Jul 28, 2017, at 2:43 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>>>=20
>>> Does anyone know if there was a specific motivation for adding std::mov=
e_backward() to <algorithm>? It seems that using std::move() with rbegin(),=
rend() iterators (for the basic use case) would have the same effect.
>>=20
>> See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html
>>=20
>> Section 25 - Algorithms library
>>=20
>> Howard
>>=20
>> --
>> You received this message because you are subscribed to the Google Group=
s "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/iso=
cpp.org/d/msgid/std-proposals/94CDFCD7-3F9D-4D7E-BDD7-58D27561C291%40gmail.=
com.
>=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.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/96DEA673-B79C-4D08-AE8E-EFFCA3C5A0E8%40gmail.c=
om.

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/C3F75EBD-7569-42EF-8F26-04CC0077238E%40gmail.com=
..

--Apple-Mail=_EF26E42D-57C7-4431-A0D3-E926ED4E8C95
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=signature.asc
Content-Type: application/pgp-signature;
 name=signature.asc
Content-Description: Message signed with OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIcBAEBCAAGBQJZe6mPAAoJEGbcHCxKqhWC2RkQAIgLN3phuRTs6B9V8Wls+oAE
8z2IIsuuZFwtQipOrsGoNx8DMbC3EkfhZfRFMLy6XmRz5+Am6xhMiuxLoIH4Xz6N
BeakQa32xOOEMx2js+BBOcTALXWh9ZoUrXPqWhDS7NJKIlcJYq/xsyNZOClVRihN
u0J2c9sngHPQ2F5tFOpwvQVgq3Zj3ELQiP2R2sF2oZQW8+4rEljOMCve52zFoOpc
yl2tSv1q9Iaxqrgyl89pUSrZ22cmcRvLJgyiAuPkQsqClRYygzc0gcoz+7FYt9K3
tuPYmm+oJde17OFI47HjliP1BsL3bzcnV42Fz2Bh9jYyyMCGT+i/MHqAeiG56rRX
4GkPqUtR3TBLa/p6tMRyHZehbx3xlpmCni5ziGcGpF2h97XGT6WU5t51AiEokJCh
HpJvN5gDzwToI3OI4vERPXXCXZnstBqDXKcHDS/qaPLyY7QhbkWJet/TE3agXo+2
+kAqHQ13d3UgFYNelE0Ye9PK4hRUQBX0/kPwo4oUVNP5AS9cdvVwtLyjPb4arekJ
Sr0MBEnyhOIUcxAd3Wa/X6yur+b9Meu1EMKRLOtj3Te6d6zYq54GIurH69utjB3J
vBPPjECVPCuw/U6ONsgeQ5rgFKCpyzxJ21AwcKv/CrLSzogOTZg7h6MYLW0s1R8S
faWSuPrN6aHkiEw1/FrV
=8V8X
-----END PGP SIGNATURE-----

--Apple-Mail=_EF26E42D-57C7-4431-A0D3-E926ED4E8C95--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Sat, 29 Jul 2017 00:45:39 +0300
Raw View
Ok, so why the need for copy_backward in addition to copy (since copy could=
 be used instead with reverse iterators/pointers)? Is this mostly an optimi=
zation issue, as Nicol says? (I guess so because it seems he is always corr=
ect) :) But it would be great to get your perspective on this too Howard.

Thanks!
Dan

> On 29 Jul 2017, at 0:15, Howard Hinnant <howard.hinnant@gmail.com> wrote:
>=20
> From the paper:
>=20
>> move and move_backward are two new algorithms to augment copy and copy_b=
ackward. They require only that the value_type be MoveAssignable (recall th=
at CopyAssignable types are MoveAssignable). Strictly speaking the function=
ality could be obtained with the combination of copy (or copy_backward) and=
 move_iterator, however the anticipated frequency of use of these functions=
 indicates that the syntactic convenience of these functions is warranted.
>=20
> The last sentence applies to both of the new algorithms.
>=20
> Howard
>=20
>> On Jul 28, 2017, at 4:51 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>>=20
>> It looks like that section mentions the addition of std::move_backward, =
but not the rationale for adding it in addition to std::move. Or am I missi=
ng something?
>>=20
>> Thanks,
>> Dan
>>=20
>>>> On 28 Jul 2017, at 22:19, Howard Hinnant <howard.hinnant@gmail.com> wr=
ote:
>>>>=20
>>>> On Jul 28, 2017, at 2:43 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>>>>=20
>>>> Does anyone know if there was a specific motivation for adding std::mo=
ve_backward() to <algorithm>? It seems that using std::move() with rbegin()=
,rend() iterators (for the basic use case) would have the same effect.
>>>=20
>>> See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1771.html
>>>=20
>>> Section 25 - Algorithms library
>>>=20
>>> Howard
>>>=20
>>> --
>>> You received this message because you are subscribed to the Google Grou=
ps "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.
>>> To view this discussion on the web visit https://groups.google.com/a/is=
ocpp.org/d/msgid/std-proposals/94CDFCD7-3F9D-4D7E-BDD7-58D27561C291%40gmail=
..com.
>>=20
>> --
>> You received this message because you are subscribed to the Google Group=
s "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/iso=
cpp.org/d/msgid/std-proposals/96DEA673-B79C-4D08-AE8E-EFFCA3C5A0E8%40gmail.=
com.
>=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.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/C3F75EBD-7569-42EF-8F26-04CC0077238E%40gmail.c=
om.

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/EE992B88-A216-40CF-9C22-D95FA2AE3A09%40gmail.com=
..

.


Author: Howard Hinnant <howard.hinnant@gmail.com>
Date: Fri, 28 Jul 2017 17:57:01 -0400
Raw View
--Apple-Mail=_970DBBD2-DC67-43C8-81F6-5053ADAE2002
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"

On Jul 28, 2017, at 5:45 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>=20
> Ok, so why the need for copy_backward in addition to copy (since copy cou=
ld be used instead with reverse iterators/pointers)? Is this mostly an opti=
mization issue, as Nicol says? (I guess so because it seems he is always co=
rrect) :) But it would be great to get your perspective on this too Howard.

copy_backward predates my participation in the standardization process, and=
 I would prefer not to speculate.

I do note that the code gen using the latest clang at -O3 is much worse for=
 copy+reverse_iterator than for copy_backward using int* as the base iterat=
or.

Howard

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/DBD8279E-AB79-41D0-89D9-0695AF7A5D7D%40gmail.com=
..

--Apple-Mail=_970DBBD2-DC67-43C8-81F6-5053ADAE2002
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=signature.asc
Content-Type: application/pgp-signature;
 name=signature.asc
Content-Description: Message signed with OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIcBAEBCAAGBQJZe7MuAAoJEGbcHCxKqhWCAk0QAKmOlUsBHRftMlu0u37pUCTT
gJWtkCLZzvwt7pdcxUf/ygmHxAbzzDocOw1ZlBb1Z+5om7ai49PLLb5sJ/QB8dSP
AM4BBwqaqUEiBr3RD6p9OsNT4AEbRmwqchgoA5m9kWlmT0xyFfLMk1PgmdWxzOyu
Sl/i1irDX+Ffc6Yk80VUpNssPu//jACIyCdNfxAoZ4dC79xpmbjsdQrwceTbt+uD
IhQeefOAq478mHUFPMPsXWXgIdVqEo6qQTF9GMobG/a+2uOYm2NBBJnXS7ZwcaPD
txvp7cVg+BSM+fW0CetQBjMKJwzZ3OBwpPg/2r9fkpeMhrzZJuO257WLFCDpD3OY
hngXGpF/PJGk5Ubvl8wTqHsZZAJppTcpqdW2JiTRkFAY5D9cmOf0z/a59Xs7/pEj
1ETizyxgvHlAVdPj++V1LTFtzqFK4+Ts35+msjSn61CK26dfr2UwRK9OYMXujitB
FX1eiQxwsKj+ylNic1S+CxOdZdlyJ6rRlC1JeO0LCWaFVZIi7zjGVNMN+oHbH815
9lHmI7hE3WpsUdiDqiSey88udWPa+YDa7a1Dtr+5FpLHjQ0Xl7kDGEtwGoM67s3B
BZSVnIUSGrodc7Yqc1Kgnth2ftbl7O5HXFDVS2OljeioQIHMVBDSfbYbQ7x3qnv7
5+fCzs8BUUJ1DPxs/dRt
=kJrx
-----END PGP SIGNATURE-----

--Apple-Mail=_970DBBD2-DC67-43C8-81F6-5053ADAE2002--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Sat, 29 Jul 2017 10:19:01 -0700 (PDT)
Raw View
------=_Part_2779_651351720.1501348741489
Content-Type: multipart/alternative;
 boundary="----=_Part_2780_1910464380.1501348741490"

------=_Part_2780_1910464380.1501348741490
Content-Type: text/plain; charset="UTF-8"

Hi,

Attached a proposal draft with reasoning and sample implementation (but
still no complete design and standard wording).
Would appreciate any feedback!

Thanks,
Dan

On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d...@soundradix.com wrote:
>
> Hi,
>
> Would anyone be interested in adding std::shift to <algorithm>?
>
> It would be similar to both:
> - std::rotate, but without moving the head elements back to the tail. This
> would allow a more efficient implementation and clearer semantics in case
> rotation is not needed as well as correctness in case rotation is undesired.
> - <algorithm>'s std::move/std::move_backward (depending on the shift
> direction).
>
> std::shift should probably accommodate both left and right shifts by one
> of:
> - giving it either begin() and end(), or rbegin() and rend(), similar to
> how std::rotate works for both left and right rotations. The advantage is
> compactness of the implementation.
> - allowing the shift count parameter to be either positive or negative.
> The advantage is compactness, though it might not be clear which direction
> is which - to be consistent with rotate, positive integers should shift to
> the left.
> - having std::shift_right and std::shift_left functions. The advantage is
> clarity when calling the methods, although the same argument could be made
> for having separate std::rotate_left and std::rotate_right instead of
> std::rotate, which we don't have.
>
> Here's a sample implementation of a shift to the right direction:
>
> template<class BidirIt>
> void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
> {
>     std::move_backward(first, last - n, last);
> }
>
> This demonstrates that while std::shift is implementable with
> std::move/std::move_backward,
> 1) It isn't immediately clear from the code (at least to my eyes) that
> this is a shift right, unless you are intimately familiar with
> std::move_backward.
> 2) Different calls, either to std::move or to std::move_backward, are
> required, depending on the shift direction.
>
> So, implementing std::shift would allow writing more readable code.
>
> Thanks,
> Dan
>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/e39d1d22-f797-4b05-a2ff-2f74767e5e6a%40isocpp.org.

------=_Part_2780_1910464380.1501348741490
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>Attached a proposal draft with reas=
oning and sample implementation (but still no complete design and standard =
wording).<div>Would appreciate any feedback!</div><div><br></div><div>Thank=
s,</div><div>Dan<br><br>On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d=
....@soundradix.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin:=
 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div =
dir=3D"ltr">Hi,<div><br></div><div>Would anyone be interested in adding std=
::shift to &lt;algorithm&gt;?=C2=A0</div><div><br></div><div>It would be si=
milar to both:</div><div>- std::rotate, but without moving the head element=
s back to the tail. This would allow a more efficient implementation and cl=
earer semantics in case rotation is not needed as well as correctness in ca=
se rotation is undesired.</div><div>- &lt;algorithm&gt;&#39;s std::move/std=
::move_backward (depending on the shift direction).</div><div><br></div><di=
v>std::shift should probably accommodate both left and right shifts by one =
of:</div><div>- giving it either begin() and end(), or rbegin() and rend(),=
 similar to how std::rotate works for both left and right rotations. The ad=
vantage is compactness of the implementation.</div><div>- allowing the shif=
t count parameter to be either positive or negative. The advantage is compa=
ctness, though it might not be clear which direction is which - to be consi=
stent with rotate, positive integers should shift to the left.<br></div><di=
v><div>- having std::shift_right and std::shift_left functions. The advanta=
ge is clarity when calling the methods, although the same argument could be=
 made for having separate std::rotate_left and std::rotate_right instead of=
 std::rotate, which we don&#39;t have.</div></div><div><br></div><div>Here&=
#39;s a sample implementation of a shift to the right direction:</div><br><=
div style=3D"background-color:rgb(250,250,250);border:1px solid rgb(187,187=
,187);word-wrap:break-word"><code><div><span style=3D"color:#008">template<=
/span><span style=3D"color:#660">&lt;</span><span style=3D"color:#008">clas=
s</span><span style=3D"color:#000"> </span><span style=3D"color:#606">Bidir=
It</span><span style=3D"color:#660">&gt;</span><span style=3D"color:#000"> =
<br></span><span style=3D"color:#008">void</span><span style=3D"color:#000"=
> shift_right</span><span style=3D"color:#660">(</span><span style=3D"color=
:#606">BidirIt</span><span style=3D"color:#000"> first</span><span style=3D=
"color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"colo=
r:#606">BidirIt</span><span style=3D"color:#000"> </span><span style=3D"col=
or:#008">last</span><span style=3D"color:#660">,</span><span style=3D"color=
:#000"> </span><span style=3D"color:#008">unsigned</span><span style=3D"col=
or:#000"> </span><span style=3D"color:#008">int</span><span style=3D"color:=
#000"> n </span><span style=3D"color:#660">=3D</span><span style=3D"color:#=
000"> </span><span style=3D"color:#066">1</span><span style=3D"color:#660">=
)</span><span style=3D"color:#000"> <br></span><span style=3D"color:#660">{=
</span><span style=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">move_backward</span><sp=
an style=3D"color:#660">(</span><span style=3D"color:#000">first</span><spa=
n style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#008">last</span><span style=3D"color:#000"> </span><span style=
=3D"color:#660">-</span><span style=3D"color:#000"> n</span><span style=3D"=
color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"color=
:#008">last</span><span style=3D"color:#660">);</span><span style=3D"color:=
#000"> <br></span><span style=3D"color:#660">}</span><span style=3D"color:#=
000"><br></span></div></code></div><div><br></div><div>This demonstrates th=
at while std::shift is implementable with std::move/std::move_backward,</di=
v><div>1) It isn&#39;t immediately clear from the code (at least to my eyes=
) that this is a shift right, unless you are intimately familiar with std::=
move_backward.</div><div>2) Different calls, either to std::move or to std:=
:move_backward, are required, depending on the shift direction.</div><div><=
br></div><div>So, implementing std::shift would allow writing more readable=
 code.</div><div><br></div><div>Thanks,</div><div>Dan</div></div></blockquo=
te></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/e39d1d22-f797-4b05-a2ff-2f74767e5e6a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/e39d1d22-f797-4b05-a2ff-2f74767e5e6a=
%40isocpp.org</a>.<br />

------=_Part_2780_1910464380.1501348741490--

------=_Part_2779_651351720.1501348741489
Content-Type: application/pdf; name="d????r0 - add shift algorithm.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="d????r0 - add shift algorithm.pdf"
X-Attachment-Id: 507cc668-2268-4cd3-9094-d9b661cb3b38
Content-ID: <507cc668-2268-4cd3-9094-d9b661cb3b38>

JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G
bGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtW21vHLcR/r6/gh/3EGu9XO6rk6Z13CBw0CKNLSBAq6Kw
dJbOiXUr30ly/EP7fzpc8nnIfbNkpHac21sOh/M+wyHvg/pZfVC5/K11oZquUIe36he1V09fHLW6
OCo9/D1eTGEuh4l1nXVtXjaqKVTZtFluOq3qSmdFlawhEtAmL5Wuqqw2sqCu7ZqXFkXdtvK1zeqq
Hb+XMZPrLK9lXm0xO/CqVrprs6ozdl5Ao6usK3SnCtNmuiqNKsosb1rhEFOrVjuQrsyaypSyXEu8
Ve3nl6bOai2LR8irsgNyk1WmFhLCyhVW1lWX6baUwYC27PzMUvCbvB3NLFvj0BqtM1O1XYy2rBu/
ZpeLaAs7SGpLU2Vto7UybZ0ZWVQGs7wSfsltqbusLXKjyqLI2lpbaUUgSSlC1FpeE1Dg8iLPLecR
4KDm3GRN3VWq0CLUegKRCF9ZaUTSJeB022S6zi23E1RGRgZUZVVm2lijCKI0jfbrmC4rq8LOJ8/G
+JlFXWZ1XoiVBm5NXmVV3onW21wGayutrBCoygnEWMurjQgMgFporfIyALqFdN4KDrt6W4noGrGF
UlaaslE0xoOIXptWvCFio6iarMybRhbrsrwsg3aiNUrtYLR4UNXJqjGCQoylEiZKgaoHc4vFaGnU
nSh+AMmF0ba1NFJUWoTgBsWYy6IeIdcivmGwLbOuyqNBGxJyJX7/IdHDo7bKb/JGXVyr706VNu6t
+zi9Vk9PT22sOL1U/1LpXzfqRCxVpf3FRg0Pd9fDQ5K+9S/2t/5B7f2YSs8xeHiGwY36tzr9UX1/
KvEmFyORP7lQhqeETwOtQoAle5VWK61crVCbpH/2q659vspH5AxrWRHNl01ERAPNo7FaouMXie/N
QFCSQlaQTySeE4kVhRV1kevmJG9Oii4mcrp+4tZfoK2pHkXbc6j27nYj0peFd32srpOyKyUrRDbg
mFDpXr3C4/07L+l79c0WTO6zw3z8LxZQq/TK2Y9KAQIM7z2mDJbWX3u6vl2XQ9U9ktfEmfHdFstB
A3sshxexSkxXtplR6d88bd8Pn0n6i//+A2So/vStEiAJICKwaDTYvOThwuZh54uxodWliZWJhB0c
dwQsIdJpvnAA/sO5ggTxxDnuc1C2nT2oI17t8AChXN6q215R3ImtKSJPrLl4nuV5LkHiQgUytAQt
bYrgmEbmCjXpN2/eX/WHd7e76283yemvS/5ExIM9f0ZWkvtg+ELd52VVSWb2XloNLq7dB2Xlg9zL
jbeOTL2ERPZ4uD1slJYkJSGQorzDIGznFgLs95sk6HwkvEDN3GdtzPeUxuE4mQa4U293O6xHVaob
+NMNDPmgbg79Te9BQsAOczBlS6/YXym8jMwEq1268JWkBILTWv162hDidnB0hTc9n3agUb346iv1
GvIHe+JJkuNalaqPkDQ5hsh3y/S5SBZYxEIgFN9BHL4zi4Wp65qsYISfT56X/cHTnzDaHbaqP6hz
CBnc/EZGMSKAkOie4lYSWB2H+ytQrvpLhecv5TJJMzq75OV1v6sM6gU46LCpCDEqLi4qiQmP8ztf
XLyEljP1d89fT5e6f8NH8S4/Q73hI71S7MiPQqr9DSxLBLTmliR2wS0ZbUaKnrklF6aVek9RKXV4
taKkJH2EKQZLCnlzZknOMB5rSZQRLR+W9w4mBqs6WJNlSo8sD8wFnwEOWHiScgzAWFj1IVJhGiIF
YPv9KAI4DoFgFxLVsIeNElXZwlxHigsFo8+SWC/EI6pyHovIya6/g6NtxTUdVXiDz54erQKfokdo
GyxKxIWcgYoLAQY4P22U1PlSYWTCumy1JCk9Hx4qCZVA7GSZBMtTd0SIlRRkCMHPIbD2ES70ZdLm
7ndcpSeyp4DQsQIIJ3EzYphbAOIhokS0ByeUFbFgHXmxEgPEXHwFFsyl1EVWlhLpxwyIoDcKNYzs
SkvZbhujPrpS5MVrlSc2KL5+wcrpxG1iXJihWApTZkVZqWvZqvuF8Oq9ej2z50bPCLTLTOuDqRCW
07IzWMpnwT7i3EM42Azk6ZSRpAwgGLjEA2Ywf+23ioPUGCtwBJ4pF5x+cwPtTlfAlGBbjsl+T/If
menKCtsnZrpkKNutvKd7xNIs1m0zvSCYSJxxdIXiBTIK0dAmdPARAlNcyyEJJCnkwVqB7FJoy8Xd
ui+YzptaqPGDV+hOekBaunSwPWmDDDX+8Xb77Nlx984mPrjHqPwVUc1MuGiqTBe1rcqnlqwu72gX
EAaULlkBW1YEBMQQGsjUIABIyX5mm1MWqO+WRBD8Drw/vL8JGIMoW+n2adPVC8wjvCdReKdiwdmM
ZbIIOUUQzuoAgQF8pwcD94LEmc6kxnHYYLm7hQBCainvYMlY9XdHZ1QiTJeV3Lhup3MlJUG4piqk
+SyNSFgWdDXY6XV/L0Qsm+mA1nZ9AjI2W4FMe6OPUsHY1klbjER2x7Y1m8/KR0hdouM6u2zYrdik
xzrj8z/nby5++/jmIGXyMsNEHGjVZS4dRulOz2mdVQ57xWafuuzvHuBhHgJ883kiWikTaDAH0dVa
4s7nibuw7VHbuJ6jfBKssb+72jFoOrtL0v+iqgrmy/2zmley54i+sGjWYL3Q7AM9xi6HNkKtUiZA
+A/cFZD0xmANUSNmVE6gdW9EiqZrSiknyD7fLdQTcroz00SIa968RQcgDQGD4RW0uoHQWyDtsOmp
S0cJmaYUl9NiTF5wWBOYtljzSUieoI+pAjC+pg4JEgPAiu8kOKgcC1q7G/qi6uoOpXnYBYExAOFz
SxvrI8/AsjbwOP62YWcDLoBSIqxb2OY590RnCDZha8R4120e2fclo+BzqsOlrd4Tte9BS2ALb5gb
nBAicyADBOkVm03BJSA8ityrRQr8IHF2PMjBqKQbReAgDFRxhaviphWcYQcZgJPGRtz/tMeLQ2Mj
8Z3E1YbitLHxEq2JTH3/+w2+QFyIBLeQQ+hp/OQN4BxzfgUMJ8FabO/RdbkpIHWWLjVKXgEZcHEC
SVtANgM+26wGZkpqaPYm640lI4d5rlf0GPnn8xoyhK3KZ2W9kunk4A5tKTZZm0zSXLeUlM824mon
ujbDqYWowYmWpwOv8Ybeyu4oFCLlC5QEX4uz5bbfQ6Tq/FNUREXzV3uQgZmleqDQclbYyU4GOVDK
AtvySB8qfwJaOYe2opUPnr4CWSVhxyITAS2WFBESCrqQY/HhrBZIXJKx/YAzppn9OLqNXI/KW+LX
3ikwlVR7kyoorswfpJUM2+Nsub1AbDCss40EnEWOCzmkjqx4FIrc2LiiNEtV/yvaFkqFXxD9YRHO
nJJ0Z/eIq84XqFmSlT0jL9rK1UeJnPbOSsYHmYwqRXtk3slhNiTva4fUtgwfxLNIntyMaOWwnRhn
5LGilaj1gDYCoUYuH8jFgKBUT6jYH6u20CeTxLZScQbZRrjlhkMnF0VIcoQ7FMcBO7x+q1jTsEW4
3/pYLKlvmYiyzFUh20Znb3LHxv4Rccnf0RfuqAfHXwuKhdxocJgCPyGkBkaiPXeoRZg2pjFQhMos
z5yOWOiqhtCg7PdPQi1ETIAOVTpXY8P0cOjt6VyXVUl6Ig0SxlM5yENtwj4IinWi6al4ROffnGai
HalsaQ4KM6E3YuCD3EfxrgpUPAyfbxLAWU/tf+0nM11EVTJcX4Bd4Sgcr9lmjbPhIZd+iONnwTHn
dIkc3QaNR/Fo5G5DQ+csvc/O316925+lZ5sn6j57u9+6R3O2+XrlRNf2NlcjIsfGFMw2xvcU8Hql
Z7epqwsVqBeWIs0a07Y7wBizxrw6USaSxWcEMaZvvRIqpJgEIw8ebcuVLgJPm8Vh7AHxvgwHi6FJ
CL+B3VnvpBowuH3mjREpixD0X56AzbzsU4iJ/kliHZbDRmllp6lSOBo3bnix9Qslqd19+50bHsJW
AwvBC/EdkMT73rP4iXuYHZx7vygRtyQkAkaGVpNsI5P0yUpAt9cS5bLfY6KwF3OInWsbX8XOMPgC
PfjOHRZVx0gZxGc3vo6tsA2DDQARPu3G10WotY2vw/TYja/DtZBsQNKUo6Wtotu3OlQP7lsj46LO
o32ri7vJPLbaWvEx2mNK9NaYpJcQHkVO81vihqpaD4dCi+/sYD+1cutIV6NkYW/62HuBct9TuJH/
7K3fZC8qM01dNnLrU3bO1lKNzqQeHq7u+WuYdmrdyXVW//9SasJKyXXJYRx3kNcPUbSm8bMEH675
lkIitgu+Brfl2iZx93FOJfXL9sRGBLc3u+B9pj1eiXf7MbEa9yTZfPSQpHKsKiTLYeoThA3/ydnE
Jy48tISOPbBcc3khbBi74FJHjh05Ee7DLT4CBj6vPeoktU1qRypmB9QzitggmE26Y1uAQ1wciGnm
ZBl0UqYONEmtqTqqAn2HwCkwzhBxmg0lFkG4DUlhHignLM+hGd5r9iokUjuCuERQCuUEhMBDJeHF
0XM6BFeHT/x00Oh0LokCgOBYqcm03OB1saHJ7J1XY48kcjX64ip17DLXKnWds2dLNwmVevAPCoGG
zjexWLzIwBoFD5bII+4wDYeOTi72MME9OY8Z9iqDpGiFvCKHBSBmKoQLjCEi8RMUc6kzssYHgAQP
EZNEOwyDnE/MZAQgM7N1AxFVlBSxkYgQFYCOQ9TBUea7OMFXLh1I/IHsScQFnwhM0p3YpKyYBK3g
ipwj1KyZp1zi9KmLRmXkACVvo25KsC0GA+gMn/TFI8LYU0+W+0zSK5jMgYqnjYTZmZ9FaALz4Qpq
ncsWsy8IfP00Zj3PqrIo27wK9zWG2xoL9zV0MSQlykJ+eFLqUn7NIhc27K8DbM7nu+GEJRntt+QH
MFO5LjkrbUjoHBzIK1y2oOThguLhAxglzIECAyJa9lNvbtfHGcwR6iPwCZcIauKrHpI/kmzq4Ih1
X3pGGui7xgOJvfavkrTF2HcGTyApxwsgLvCiwgODzQ+eRRoUF//JU0MinqO3xoz3/MfYREZHKlSi
BDu571zY+86hL2rkN0LyL5wxI4LL5UR7knv660KtSJQRHmlNNW30g4ZFf3MxA9KhTpb8be7r7tDQ
23SeyI9uYMxkgu/Gx4WjmbaJNlAK4ORamabImk7uL+OdGiNwt5+wtQ1cT73BdoJpoMH4qNLAMYyf
0DQs/xAFG9onYyFmj2PE4Hu0apic3HRwae7/5IxJCsx/1Bllkwsv+OPO6Jn8Emd8/Y/TafX9z8HV
kpSxhBQirT3/2XvjxOXiPlU4xGQ+kl9dySmNeB96zPAzUeW0/zsy11xVco8BURtY8C5xdvrz/wAA
V8tNCmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iagozOTcyCmVuZG9iagoyIDAgb2JqCjw8IC9UeXBl
IC9QYWdlIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyA2IDAgUiAvQ29udGVudHMgNCAwIFIgL01l
ZGlhQm94IFswIDAgNjEyIDc5Ml0KL0Fubm90cyAxNCAwIFIgPj4KZW5kb2JqCjYgMCBvYmoKPDwg
L1Byb2NTZXQgWyAvUERGIC9UZXh0IF0gL0NvbG9yU3BhY2UgPDwgL0NzMiA5IDAgUiAvQ3MxIDcg
MCBSID4+IC9Gb250IDw8Ci9UVDIgMTAgMCBSIC9UVDEgOCAwIFIgL1RUMyAxMSAwIFIgL1RUNCAx
MiAwIFIgL1RUNSAxMyAwIFIgPj4gPj4KZW5kb2JqCjE0IDAgb2JqClsgMTUgMCBSIDE2IDAgUiAx
NyAwIFIgMTggMCBSIDE5IDAgUiAyMCAwIFIgMjEgMCBSIDIyIDAgUiBdCmVuZG9iagoyNSAwIG9i
ago8PCAvTGVuZ3RoIDI2IDAgUiAvTiAxIC9BbHRlcm5hdGUgL0RldmljZUdyYXkgL0ZpbHRlciAv
RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBpVcHWJPXGj7/SMJK2FNG2MgyoOwZmQFkD0FUYhJIGCEG
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
v6Dep0HTsNII0uBrlGns1jij8VCT0DTXDNDkaX6muUfznGavFlXLWoujlalVqfWN1mWtQW0N7Wna
idqF2tXax7W7dQgdKx2OTrbOap3DOl06b3WNdNm6At0Vug2613Vf6U3S89cT6FXoHdTr1Hurz9QP
0s/SX6t/TP++AWlgaxBjsMBgh8E5g4FJWpO8JvEmVUw6POknQ9zQ1jDWcKHhbsMOwyEjY6MQI4nR
FqMzRgPGOsb+xpnGG4xPGPebaJr4mohMNpicNHnM1GaymdnMzcyzzEFTQ9NQU5npLtPLpsNm1mYJ
ZqVmB83umyuZu5unm28wbzMftDCxmGFRYnHA4idLRUt3S6HlJst2y1dW1lZJVsutjln1WetZc6yL
rQ9Y37Oh2/jZzLepsbk5mTrZfXLW5O2Tr9riti62Qttq2yt2uJ2rnchuu901e4q9h73Yvsb+loOK
A9uhwOGAQ4+jjmOEY6njMcenUyympExZO6V9ynuWCysbft3uOmk4hTmVOrU4/eFs68xzrna+OZU+
NXjqkqlNU59Ns5smmLZj2m0XTZcZLstd2lz+dHVzlbo2uPa7WbiluW1zu+Wu5R7tvtL9vAfFY7rH
Eo9Wjzeerp75noc9f/dy8Mry2u/V523tLfDe4/3Qx8yH67PLp9uX6Zvm+5Vvt5+pH9evxu9nf3N/
vn+t/yP2ZHYmu579dDprunT60emvAjwDFgWcCiQCQwIrAi8HaQQlBG0NehBsFpwRfCB4MMQlZGHI
qVBKaHjo2tBbHCMOj1PHGQxzC1sUdjZcJTwufGv4zxG2EdKIlhn4jLAZ62fci7SMFEceiwJRnKj1
UfejraPnR38fQ42JjqmO+TXWKbYktj1OM25u3P64l/HT41fH302wSZAltCWqJqYm1iW+SgpMWpfU
PXPKzEUzLyUbJIuSm1JoKYkptSlDs4JmbZzVm+qSWp7aNdt6duHsC3MM5mTPOT5XdS537pE0SlpS
2v60d9wobg13aB5n3rZ5g7wA3ibeE74/fwO/X+AjWCd4lO6Tvi69L8MnY31Gv9BPWCUcEAWItoqe
ZYZm7sx8lRWVtTfrQ3ZS9sEchZy0nGaxhjhLfDbXOLcw95rETlIu6Z7vOX/j/EFpuLQ2D8ubndeU
rwX/weyQ2cg+l/UU+BZUF7xekLjgSKF6obiwo8i2aEXRo+Lg4q8Xkgt5C9tKTEuWlfQsYi/atRhb
PG9x2xLzJWVLepeGLN23TGlZ1rIfS1ml60pffJb0WUuZUdnSsoefh3x+oJxRLi2/tdxr+c4vyC9E
X1xeMXXFlhXvK/gVFytZlVWV71byVl780unLzV9+WJW+6vJq19U71lDXiNd0rfVbu2+d+rridQ/X
z1jfuIG5oWLDi41zN16omla1c5PSJtmm7s0Rm5u2WGxZs+XdVuHWzurp1Qe3GW5bse3Vdv726zv8
dzTsNNpZufPtV6Kvbu8K2dVYY1VTtZu6u2D3r3sS97R/7f51Xa1BbWXtn3vFe7v3xe47W+dWV7ff
cP/qA/gB2YH++tT6q98EftPU4NCw66DOwcpD4JDs0ONv077tOhx+uO2I+5GG7yy/23ZU82hFI9ZY
1Dh4THisuym56VpzWHNbi1fL0e8dv9/batpafVz7+OoTSifKTnw4WXxy6JTk1MDpjNMP2+a23T0z
88zNszFnL58LP3f+h+AfzrSz20+e9znfesHzQvNF94vHLrleauxw6Tj6o8uPRy+7Xm684nal6arH
1ZZr3tdOXPe7fvpG4I0fbnJuXuqM7LzWldB1+1bqre7b/Nt9d7LvPPup4Kfhu0vhJb7ivtr9qgeG
D2r+NflfB7tdu4/3BPZ0/Bz3892HvIdPfsn75V1v2a/0X6semTyq63Pua+0P7r/6eNbj3ieSJ8MD
5b+p/7btqc3T7373/71jcOZg7zPpsw9/rHyu/3zvi2kv2oaihx68zHk5/Kritf7rfW/c37S/TXr7
aHjBO9q7zX9O/rPlffj7ex9yPnz4Ny1d8BwKZW5kc3RyZWFtCmVuZG9iagoyNiAwIG9iagozMzY3
CmVuZG9iago5IDAgb2JqClsgL0lDQ0Jhc2VkIDI1IDAgUiBdCmVuZG9iagoyNyAwIG9iago8PCAv
TGVuZ3RoIDI4IDAgUiAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURl
Y29kZSA+PgpzdHJlYW0KeAGdlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVG
FBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyC
BMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz
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
g1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh
9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe
0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fs
vlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I
91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1
Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3O
HS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnb
vfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+d
GwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hn
j4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTw
a9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm
3/eE8/sKZW5kc3RyZWFtCmVuZG9iagoyOCAwIG9iagoyNjEyCmVuZG9iago3IDAgb2JqClsgL0lD
Q0Jhc2VkIDI3IDAgUiBdCmVuZG9iagozMCAwIG9iago8PCAvTGVuZ3RoIDMxIDAgUiAvRmlsdGVy
IC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGVWdtu3DYQfddXzKMWsBVdSF2CokDSBkj70DbJogHa
9MG2vN5cLG3kdZr90PxPhyLPkFppHTd5WEkk53JmOHNIf6ZX9JlS/l9mOVVNTsM1vaWOnvx0l9HV
HWXj/7ur4zmbcWFZJ7mmKidV6URTqTN+j06J4HlVqqhQdVLUaUNZabRtzPqyrkmVOslUOflsRCsW
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
ez8Y4mNz9ZsUGjkHHMAxgvuql5jvAYdRTA1kFAZ2cvxi8modPKPfIAOzENYeYNBzeYR0cdGxjShm
dv0ao0cH4pBEFFJHxq6Uz6rZdPPELy9urz8FTT9NsoL/8S5Zejq+ZmBts65bmD/hofNN/4izeFMu
rgIyvhyZUCd4DbhkgWfkEkQZuxn6+914WINYYWaIw0DyCaJ3G7nwkSOFXCnjgCL7CZklSpOwDyyX
bh+fF+voFb36D0cLM90KZW5kc3RyZWFtCmVuZG9iagozMSAwIG9iagoyMTU2CmVuZG9iagoyOSAw
IG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJjZXMgMzIgMCBSIC9Db250
ZW50cyAzMCAwIFIgL01lZGlhQm94ClswIDAgNjEyIDc5Ml0gPj4KZW5kb2JqCjMyIDAgb2JqCjw8
IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczIgOSAwIFIgL0NzMSA3
IDAgUiA+PiAvRm9udCA8PAovVFQyIDEwIDAgUiAvVFQxIDggMCBSIC9UVDQgMTIgMCBSIC9UVDUg
MTMgMCBSID4+ID4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvTWVkaWFCb3ggWzAg
MCA2MTIgNzkyXSAvQ291bnQgMiAvS2lkcyBbIDIgMCBSIDI5IDAgUiBdID4+CmVuZG9iagozMyAw
IG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIgPj4KZW5kb2JqCjI0IDAgb2JqClsg
MiAwIFIgL1hZWiA3MiAxMjQgMCBdCmVuZG9iagoyMyAwIG9iagpbIDIgMCBSIC9YWVogNDM5LjU4
MjUgMzA1LjUwOTMgMCBdCmVuZG9iagoyMiAwIG9iago8PCAvQSAzNCAwIFIgL0JvcmRlciBbIDAg
MCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9SZWN0IFsyODYuMDYyNSA0MDMuNzgx
MiAzMDguNDM3NSA0MTkuODEyNV0KPj4KZW5kb2JqCjM0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24g
L1MgL1VSSSAvVVJJIDM1IDAgUiA+PgplbmRvYmoKMzUgMCBvYmoKKGh0dHBzOi8vZ2l0aHViLmNv
bS9kYW5yYS9zaGlmdF9wcm9wb3NhbCkKZW5kb2JqCjIxIDAgb2JqCjw8IC9BIDM2IDAgUiAvQm9y
ZGVyIFsgMCAwIDAgXSAvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzM4My4zNDM4
IDQ4My45MDYyIDQ4NC40Mzc1IDQ5OS45MDYyXQo+PgplbmRvYmoKMzYgMCBvYmoKPDwgL1R5cGUg
L0FjdGlvbiAvUyAvVVJJIC9VUkkgMzcgMCBSID4+CmVuZG9iagozNyAwIG9iagooaHR0cHM6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvVGltZV9zZXJpZXMpCmVuZG9iagoyMCAwIG9iago8PCAvRGVz
dCAyMyAwIFIgL0JvcmRlciBbIDAgMCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9S
ZWN0IFs3MiAxMTEgNzYuMDkzNzUgMTI0XQo+PgplbmRvYmoKMTkgMCBvYmoKPDwgL0Rlc3QgMjQg
MCBSIC9Cb3JkZXIgWyAwIDAgMCBdIC9UeXBlIC9Bbm5vdCAvU3VidHlwZSAvTGluayAvUmVjdCBb
NDM5LjU5MzggMjg5LjQ2ODggNDQzLjkwNjIgMzA1LjVdCj4+CmVuZG9iagoxOCAwIG9iago8PCAv
QSAzOCAwIFIgL0JvcmRlciBbIDAgMCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9S
ZWN0IFs3MiA3MiA0NzkuMjE4OCA4OF0KPj4KZW5kb2JqCjM4IDAgb2JqCjw8IC9UeXBlIC9BY3Rp
b24gL1MgL1VSSSAvVVJJIDM5IDAgUiA+PgplbmRvYmoKMzkgMCBvYmoKKGh0dHBzOi8vZ3JvdXBz
Lmdvb2dsZS5jb20vYS9pc29jcHAub3JnL2QvbXNnL3N0ZC1wcm9wb3NhbHMvSTc2b202OEIzdDAv
U1BUZVpkb2ZBUUFKKQplbmRvYmoKMTcgMCBvYmoKPDwgL0EgNDAgMCBSIC9Cb3JkZXIgWyAwIDAg
MCBdIC9UeXBlIC9Bbm5vdCAvU3VidHlwZSAvTGluayAvUmVjdCBbNDExLjc4MTIgODggNDQ0Ljgx
MjUgOThdCj4+CmVuZG9iago0MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSAz
OSAwIFIgPj4KZW5kb2JqCjE2IDAgb2JqCjw8IC9BIDQxIDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAv
VHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzcyIDg1IDM4Ny4zMTI1IDk4XQo+Pgpl
bmRvYmoKNDEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbiAvUyAvVVJJIC9VUkkgNDIgMCBSID4+CmVu
ZG9iago0MiAwIG9iagooaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2lzb2NwcC5vcmcvZC9t
c2cvc3RkLXByb3Bvc2Fscy9JNzZvbTY4QjN0MC8yNWJHdTdPNkF3QUopCmVuZG9iagoxNSAwIG9i
ago8PCAvQSA0MyAwIFIgL0JvcmRlciBbIDAgMCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9M
aW5rIC9SZWN0IFs0MDguMDkzOCA5OCA1MzcuNzE4OCAxMTFdCj4+CmVuZG9iago0MyAwIG9iago8
PCAvVHlwZSAvQWN0aW9uIC9TIC9VUkkgL1VSSSA0MiAwIFIgPj4KZW5kb2JqCjEzIDAgb2JqCjw8
IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0tPTlVXTytIZWx2ZXRp
Y2EgL0ZvbnREZXNjcmlwdG9yCjQ0IDAgUiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcgL0Zp
cnN0Q2hhciAzMiAvTGFzdENoYXIgMTIxIC9XaWR0aHMgWyAyNzgKMCAwIDAgMCAwIDAgMCAwIDMz
MyAwIDAgMjc4IDMzMyAyNzggMjc4IDU1NiA1NTYgNTU2IDU1NiAwIDU1NiA1NTYgNTU2IDU1Ngow
IDI3OCAwIDAgMCAwIDAgMCA2NjcgNjY3IDAgMCAwIDAgNzc4IDAgMjc4IDUwMCAwIDAgMCAwIDc3
OCA2NjcgNzc4IDAgNjY3CjYxMSAwIDAgMCAwIDAgNjExIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTAw
IDU1NiA1NTYgMjc4IDU1NiA1NTYgMjIyIDAgMCAyMjIKODMzIDU1NiA1NTYgNTU2IDAgMzMzIDUw
MCAyNzggNTU2IDUwMCA3MjIgMCA1MDAgXSA+PgplbmRvYmoKNDQgMCBvYmoKPDwgL1R5cGUgL0Zv
bnREZXNjcmlwdG9yIC9Gb250TmFtZSAvS09OVVdPK0hlbHZldGljYSAvRmxhZ3MgMzIgL0ZvbnRC
Qm94IFstOTUxIC00ODEgMTQ0NSAxMTIyXQovSXRhbGljQW5nbGUgMCAvQXNjZW50IDc3MCAvRGVz
Y2VudCAtMjMwIC9DYXBIZWlnaHQgNzE3IC9TdGVtViA5OCAvWEhlaWdodAo1MjMgL1N0ZW1IIDg1
IC9BdmdXaWR0aCA0NDEgL01heFdpZHRoIDE1MDAgL0ZvbnRGaWxlMiA0NSAwIFIgPj4KZW5kb2Jq
CjQ1IDAgb2JqCjw8IC9MZW5ndGggNDYgMCBSIC9MZW5ndGgxIDE2NjQ4IC9GaWx0ZXIgL0ZsYXRl
RGVjb2RlID4+CnN0cmVhbQp4Ab18d3yVRdb/zNNv773n5rb0QhoJ5CGkUYIBBBIUpCRAKFKEUAQM
So2IBSmCq2ChigkQJcDishoEXFfFLpZ1V3TZknXffdFVIE9+Z54bIuS3ux//2M97b87Up8x858yZ
c87MzcIFi+qRBjUhGlWPnzxvGpI/A0oRojumzpk8L543LYT4zamNC/3xPBuF+tnT5k2fE88LjyOk
9EyfvbTnfvNzCEV+mFE/uS5ej65DnDsDCuJ53A/ixBlzFi6J541tEJ+ePXdqT71ZhPyUOZOX9Lwf
fQZ5/92T59RDDJ8BfggS5829h7QLPkVPQrB63oL6nutxDbTvbYShNAM9hhRoFuIRhfTwnYAQf1np
QQzUknr4zBXVT92lK/oOGQQ5f1fVw3L83gNnZ/xQfz2ielT4EQoUN64nMReTYgipMdR3qh7trZHv
gyCjHY1ObkdDgIqBcoCSkwfZURPegx4B2gVEowb8IFoKtAHoCSCmN7Ufcsfxg0cYQTyBlyInHiqq
GN/tZofPrlT53m3HXNtTvk/sX53EDhi932PHEQ1SDFLiXfhpVId8+HkUwstQJYriHUdjs32ToGo/
mgfUBETLIcb7j3izfK/gFBRiMNwTRl4Gv+z7Y2aq7+vMdgof8b0aaWcg+rUXcqLOd9rzlO9Xnum+
V4AOxqsOxOCKl337PbN9m73teMcR32Oedgz3PBqPFnng1pd9c2JbfXWZcv3wre3UwSO+AqgfK6p8
ufkBX47nki890i5gyKd6hvuSMn/rS4Qb4TI/PDQkGnxuz2Zff6jyesoi/YFO4gN4J0rCO4+EhvpO
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
I7vsupUT6+AMUm8JcU7Nnz8fjCMXle0iWKrAhPnorQtvvPtpm3T+5MX3Tkq/AUjb6OHXj9MV1y7Q
A66/BoCCbLZIQ2TbgZzEe0O8u9my3r7XTvOcjcs3VhprjNP5xfRifqN5O9rGbrdss26z7UP7rPpK
NMxSYTtvYUrZ11lqHbsH7cF72X02NjHK2i02K+ijFrVK5xG0RFGwugBQwhM2i71F/bAV9IX34xwM
rFd1yX4LkPFpBxBnwZmr4qIiYMQCDNCJRgscG7TOMdpsdhZjwtx28M0RaEgkQAwoZGbMJ4cCcDYH
fj9KForysZPcPDiRBMjQdOBs+IEpJU82PRmOedOT9FnpenagVlr4JvZhJn269Kj01xelaW2c8JyG
C9iFxxOZEcCK9xOs5E93PfwO7F99MqCQBh1KB7/rNQDPkvOO5JwjQZZ4aDzEkocTi+S8YhaYM/3g
pGIeGoBKURkqR+RXaEPgh5fkt2a3yb+FGwW/bxuDxqJxqAbVwonMO+WXktmA5RQH70HDbhsxZtxt
yZX1sxvrFzZMnQw18VpyCTEX3ge6BHQFKhggOIMJv5pCuB9QKdDtQHVAC4FWAz0O9BxQG1AH0PtA
l4CuAAAMkBkoEagfUCnQ7UB1QAuBVgM9DvQcUBtQB9D7QJeArgA4DJAZKBGoH1Ap0O1AdUALgVYD
PQ70HFBbd88H2o560xj5++Thd8+31Kf0yROL7ub7yUnRm/MwCW7Jk1G8uR42/W/JZ/XJZ/fJ5/TJ
5/bJ5/XJ5/fJ9++TH9QnX9InX9EnDwr9Le0d2id/W598dZ/8yD750X3yMF63PH98nzzhwJvxm9In
P7VPHsb+luvluXXTeE/rUz+9T35Gn3xDn/zsPnn5fwTc9Py7+9TP7ZOf1ye/oE/+nj554ONb+rOo
T76xT35xn/xSkv9/Sk8SRgplbmRzdHJlYW0KZW5kb2JqCjQ2IDAgb2JqCjExMzQyCmVuZG9iagox
MCAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9NWUhX
SEkrVGltZXMtQm9sZCAvRm9udERlc2NyaXB0b3IKNDcgMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5F
bmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjAgL1dpZHRocyBbIDI1MAowIDAgMCAw
IDAgMCAwIDMzMyAzMzMgMCAwIDAgMCAyNTAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgNzIyCjAgMCA3MjIgNjY3IDAgMCAwIDM4OSAwIDAgMCA5NDQgMCA3NzggNjExIDAgNzIy
IDU1NiAwIDAgNzIyIDEwMDAgMCAwIDAgMCAwCjAgMCAwIDAgNTAwIDU1NiA0NDQgNTU2IDQ0NCAz
MzMgNTAwIDU1NiAyNzggMzMzIDU1NiAyNzggODMzIDU1NiA1MDAgNTU2IDAKNDQ0IDM4OSAzMzMg
NTU2IDUwMCA3MjIgNTAwIF0gPj4KZW5kb2JqCjQ3IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3Jp
cHRvciAvRm9udE5hbWUgL01ZSFdISStUaW1lcy1Cb2xkIC9GbGFncyAzMiAvRm9udEJCb3gKWy0y
MjggLTQwNyAxNzc4IDEyOTVdIC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgNzUwIC9EZXNjZW50IC0y
NTAgL0NhcEhlaWdodAo2OTMgL1N0ZW1WIDE2NSAvWEhlaWdodCA0NzQgL1N0ZW1IIDQ2IC9NYXhX
aWR0aCAxODAzIC9Gb250RmlsZTIgNDggMCBSID4+CmVuZG9iago0OCAwIG9iago8PCAvTGVuZ3Ro
IDQ5IDAgUiAvTGVuZ3RoMSAxNzUwMCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHN
ewl0FFW68L1VXV29p3pf093V1Xun00mn00knnaQSsrLJThIIhiUYQAaiGBSXYRwRCQ7oQ4VhfIob
T0XGEBCDOjPMDAIqbiPqjM/tH9FRx4wzPsSNdP7vVofFefPemf+cd975u7ruV3epuvd+99tv1Zor
rupBGrQe0UhcvHLhaiT9rG8DeH5x/xpvPq8uQYjxLV192cp8npuFkPzTyy6/Zmk+b/saoegrvT0L
l+Tz6CzAdC8U5PM4BdDfu3LN1fm8VQR49+WrFo/X2x6G/LSVC68e7x+R/r0/WLiyByD8Gish8a9e
deUaKYsmHAe4evUVPePtcTtCyte/n6dfRhhahdClSI42IAWiEAdHE0Lsx8rXkQxqST384nd+88Sl
BdkvsV4h5e+/6TkJvpJ96ee54rO/1FWr5kNb5bn2BMpRDtroLs8V54p11edrpPsgCQ2j6tgwKoUz
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
dm1bddI3VW3SzWilX65P0smzs9fvqBTK+PQ6SYYTWp8E+r4YPSxefYvtTQhuKhxBS5ElHvFEvKFA
JBgqCsXTgXQwXZSONweag81FzfGlgaXBnqKe+ICwyX9H0R3xY/Y/2V13Be8KUWFbOBSEN27UKoUJ
sW4F0pvcBnmRt5BGbnexyqa207ADBk3o8FY3dpeowpGoRN7gD53IgXPDvdEHLvVJInqAyIkvCBtc
IKCsGcV/CgBKgZ28HwiypQDnYxfS3gPIU5Y4i2aeT8ejGXh/TGY1VTTgJ+sCDbX34ls1FkPOVxTR
87+J+5pztlJtrFFmrA9rk2e3YMYa0XhM8kRCoXPU3jf6nl5Nl5ZSBqNKSGBj8uOmYiUhdklOUErA
XQGaJYblrAa+VlF4dBRRegVpP+H1tKCqcOsgldF0gQIV6FSEqw8oVcDThLI5ibJhnw32t/LxYqYL
1XAnj3AnIW58PmqVZ9r8RG4qqrx4uN81NUZ1Eu9J45HfSB9DE/Ai8VeH+EO+p5JPlcn28Ht8e5J7
ymTr+HW+dcl1ZZv5zb7Nyc1lO/mdvp3JnWWaiD7CR3yRZKSsub65YTm/3Lc8ubxMreSVPmVSWSZL
a9OWFm2zZUL1XP2zmmfNr2teN79ere7kO32dyc4yGaf0eCm+JBBPNqRrcX1ZiQ9eNAMkTKj2M4Jb
Cc6B4PamhWyt0RRP12bT8YBLzciUpgneKlzVVmBa6o3gSJvNVsAq5RMakqW8V9VE+MfudEWDrSjg
DVCDAZwIlATEwNbArgADr/j7RUdrUTxa0YrS3jQ1mMaJdElaTG9N70ozaag+2Kry1UZJZL4bNRIs
n+qHfYm+fpCd5y9OSVIUvOo6spfa9RE3ImnF/L4XES+Is2Zr8gKVOCfj9If7iIocj+oTQWOWHBPQ
aWXSheTTnQtIjxsiEiXmpW7eMsmTZqXZV1yPbyor6Vh5bWPQp6sqn7X48oeKq3KOyqJEQ/lVIKv4
dHFRU93lwcqcpZTVO9uoTrFYkdw2ITChip/U4q8euHN0tCUkLy1VhJrwX6e1LzTmxXEpG2rGf53a
eZl2XDxL+xyyRrBjwiiCnhHXGb1Ya9Fa6SAdsqtdFpeVKLS5ug5Lh3Wp7nLL5da7dESlPWZ5zPqM
5Rnrc5bnrDaNRWOliG6jQhbB8Z8UmyTfBR9oNRnNhsc1mgJsPdBpETYS0UPwc1yzxS5otlg0cQJs
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
E7NxWQVsA1FZtoaDDEOWou/8hhns9cAqEMz/3e7PRUsj0Pm9H/yxUCRX7lBv8Kq5wjh+r6icVfVq
ttGyslJsCcQsud8kXlZ+k8y9GvSTtaKtgsZiza3C09kVZpeOSSYpg6MgxOduxxtVBtgvkiWTbKDq
7Alq5eg2KndpOWz6SOsH74bS78L6VcP6Pakwqr1KvlIuk3llPK5q4lt8czRztJ2hzvASzRLtBt8j
9kccJ+wnHJxR7zOZWgxe3quHlxyMPO/1+fRyWp5MJWE5eJ8+lfQmE2wq1WKgaTkPL2/57kw8CJ/K
RA0+vS8JLdk79Q/pKX3UwCZYr4nVG3k6lfDJkxoVgt06WuV2OjRqOc6EA+CxBqurQqp8vTxQnW8u
d6qdwRp1dU0WWOIk94bkqo67q9JbdCABpKAlsAcsGLwwF+viFNksW8zEumzcxmwWinQxTnGSOckq
4C06RTafZlkF6CrYz1OMv1UHSpv8pT25cyt3nqPA4WXpixxe2DqCFYbSvNfrKmub5FnK577xBuH1
4BbbsvDSZGklbg/ai/lXcYnaac0ZY0mzxllQaa33Tigry+1OKJLzgrdE8bZSG6yjSmm03pta32pz
cxSsocoUyeVycb1emUhQnANkS9Q6XZgZX+D0wqdIZE3hxWPyG7sabc5f/V0agjwN9rMG3kP1I/K+
WhF8sZOEr67KUVqyH8j3a82oBbXCV0ET0ST40mgKfJF1CZoGXxbOQDMh8joHzUXt0hdu8+BpGN7h
xVIvcngmmtLROre1LTZr2cqeK+MNqy5fgv4vn3ljcAplbmRzdHJlYW0KZW5kb2JqCjQ5IDAgb2Jq
CjEyODAyCmVuZG9iago4IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAv
QmFzZUZvbnQgL1VIUktZTCtUaW1lcy1Sb21hbiAvRm9udERlc2NyaXB0b3IKNTAgMCBSIC9FbmNv
ZGluZyAvTWFjUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAyMTMgL1dpZHRo
cyBbIDI1MAowIDAgMCAwIDAgMCAwIDMzMyAzMzMgMCA1NjQgMjUwIDMzMyAyNTAgMCA1MDAgNTAw
IDUwMCA1MDAgMCAwIDAgNTAwIDAgNTAwCjI3OCAyNzggNTY0IDU2NCA1NjQgNDQ0IDkyMSA3MjIg
NjY3IDY2NyA3MjIgNjExIDAgNzIyIDcyMiAzMzMgMCAwIDYxMSAwIDcyMgo3MjIgMCAwIDY2NyA1
NTYgNjExIDAgMCA5NDQgMCAwIDYxMSAwIDAgMCAwIDAgMCA0NDQgNTAwIDQ0NCA1MDAgNDQ0IDMz
MyA1MDAKNTAwIDI3OCAyNzggNTAwIDI3OCA3NzggNTAwIDUwMCA1MDAgMCAzMzMgMzg5IDI3OCA1
MDAgNTAwIDcyMiA1MDAgNTAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAK
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMzMzIF0gPj4KZW5kb2JqCjUwIDAgb2JqCjw8
IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL1VIUktZTCtUaW1lcy1Sb21hbiAvRmxh
Z3MgMzIgL0ZvbnRCQm94ClstMjAzIC00MjggMTcwMCAxMjcyXSAvSXRhbGljQW5nbGUgMCAvQXNj
ZW50IDc1MCAvRGVzY2VudCAtMjUwIC9DYXBIZWlnaHQKNjc2IC9TdGVtViAxMDIgL1hIZWlnaHQg
NDYxIC9TdGVtSCA0NCAvTWF4V2lkdGggMTcyMSAvRm9udEZpbGUyIDUxIDAgUiA+PgplbmRvYmoK
NTEgMCBvYmoKPDwgL0xlbmd0aCA1MiAwIFIgL0xlbmd0aDEgMjIzOTYgL0ZpbHRlciAvRmxhdGVE
ZWNvZGUgPj4Kc3RyZWFtCngB1bwHdBzV2QB675Sd2d57ne2r7VpJq1UdVcuWe5UMcjfYBmNkjMCA
jak2xoQWig0BnFANxHJFJhQHbNOchCRACD3BEEJQSP4YJ8TW6H13VjYmL++d/7zzzjvn7e7ce+dO
u/e7X/++2TWrL12KNGgDopG4eOXCi5H8MT2HEL5+8cCaQHmf9yDE+M67+PyV5X1NA0LspvMvXHte
ed9yEKGWfy1bunBJeR+dgrpmGXSU93EV1OFlK9dcXt43HoL6XxeuWjx23CLC/vqVCy8fez76APYD
Fy1cuRRq+MzpgSJ88apL1si7aPYQ1A9dvHrp2PkYjite/v4+/SuE4awm1I8U6G6kRBQywLceIe4L
xcuIgaPkOHxeOG/un+frG77BRl7e/0njOXL9ZsMvn5IWnLpTu02Vgg7l6fNJrUASdGkPSwukBdpt
Z47I10HRNITyySEUS4p65a9mYv1M3PxmAj84E4stWnwSTs/JZUAuDXKJ8ElRjVEA38bh2xT4by1T
KDLGrykayoMUGe0gHkWD0HqR4mG9dkJrJ7Qo9CBFNtK6mkKwkZpHt0L7VmhvoFioecShVdCzCnpW
Qc8q6GHQfNibCk+YD3s0mgJ75KlT5L0c7DXDXk7ey8LTsrCXlff8FL8b8+Kz+DM8CU/fp/e/1K/z
P4e78SS0CPlxfveNU/wv4EdRAGnxrXJ5ragLaD8KaN8LaG8NaK8OaF/AN6OpcPhCucSibqr23ana
tqna5qnauqnan+F6FIfDtGiJa5+Pa4fi2sfi2qvi2oG4Nh2Hq3ehCXD4Mbn8oRiYoP3nBO2rE7T3
TtDeMEF7xQTteRO0wgTtIo827NG6PdohvH6//g79bXqkhObe27R33AZ93+zJZ/0tQ/gf+wr+ZKrG
P4Rv2j0zBdV1u2c+6W+x4mtQgsEwow0oAQDw46tQu1yvxTm5vhzn5OOX7c4m4LJLdjc9AFX/7qZj
AI4LUEY+uGJ34Rj01u6eOc/fosSFsXtWonae3DO9u+lOOFyxO/ULf4sRx1AGR6A7jAry4RAqyHcJ
jtWK3TOjcDq7FwY6mhjCeLdf2jRE4f3+k9np/hOZIQZ6vskM8VD9ITFEPbnb/2EWKtHufz87z//7
pgn+Q3CHl2ce87+YvdD/bEq+4In258hT0OM4h7eJav8j2Tv9D2dv8v+4ST78UEG+390z5equBHTu
998Et7kkM4Rn7/avLpAnqP0XwB1XpLr9i6F7m6j3Z1JF/4zsz/zTsqv9U8pPGt8u37Er+6w8rX+I
2havvyXr9Tc2/cJf3w4z2e0vkct3+6vKD6/MyNPLN030J2F6zH5/xcy8PwiPxGLaP+t8bj43iyty
1VyOi3IRzsd5OQtv4g28jtfwKp7nFTzDA97ylqHRT8Qk8DZkURhIpWBIychtA1AHBhoiJaIwTwFq
DeHRGwbxLbaBZkezqclY6mz/L8UCuXNBe/K/fbyDd3fP6Bnc4e0drCSNUW9v92D1jMC5PQfwn/Bn
He0H8Oek6oV9Af+pY7rcL7T39jq6BydO7RnCn3csH4IDyxcOiuTg59AxKC6EE7oHZ8v3QQnoaj+A
ZpIK7kPVoAS5D6BsjXzaTeXTsnAXOK2dVOS0Yygrn5aljsmn/YKctmtToqN9VwIKOIXNoE3yKZvY
DDkFAF4eeQ4ubd+VhQLOUg3inDzunGpQvpFXvlGhAKc0QdHbs6uyACfsKlTKh7PfHU6VD08vH54u
Hz7nu8OZ8uGHyocfgsP/DcT/T/qWtv7vrtpzzn3X3N+xNNSxINSxFLYFgzcPLHMMblgUCOy65j5y
IDBIRxcsWryM1AuXDt4XWto+eE2oPbDrHPm6/zh8Pzl8Tqh9F7q/Y2bPrvvFpe27zxHP6QjBgu65
8Zb+ju8966Yzz+q/5b886xZys37yrBvl6/7jWR3k8I3kWR3kWR3kWTeKN8rPIrPvWD6j9ZL/8llz
6aXzLrlkHmLXIIrtRl7YHPQ9yIzQ6KewDcP2pdQKGgAck54ffYf2Ac3sJRslNTegKPKgdehekCfr
0EeoGtmBj3+Km2B/L3oTfYwmornoENDWk3gc2owmoxJaiRtRGP8G1aAO9AB6Aa5Yi1bBuZ3odiTA
Vc+OvgR9NehJNIROgBz2okbUA3fZgraOHkIPoS/QN6PbR79EBXQDnPH26B9RFjSaLUDLLhSBe65A
F+M0tWZ0I2gDk2Fkz6KPsG20CVlRFWpA7eh8tAytRBeh6+HY8+ht9DsM+g5Koxw8pxPNQTejO9E9
aBAdwX58Jf4RoxxdNroCzYYRrIDr7oDZvIn+hP6OjfhF/MqoZ3Tv6Cg8O4RqUat8/H70I7Qd/ZjM
BL0C32NoGM/Ac+gQXTWqHa0cPQnn6wFqIupG58IVK9FVMJN70WH0Bnw/hqfGcQ2ehS/GG/Bm/ArV
SpsZjp08ei2Mkgd4N8J3Coz/EhjpbegugOHj6Gn4vox+C5BX4hDVQm2gjtNGWmSmsQOjV4/uHH1h
9FewIizSAfy74TsRrUGXo03oJpjPHWg/egm9C2v1NzSCOWzAdhjDXvwh/guFKCOVgLu9Tq+iN9M7
GcTcz3zINrEbpUelY6Pnj941+sbov2D2FOgbEVj5Inxr4RnNaBqagXrREoD1BTJ+bEU70S50AGD3
NnoPfYhGkIR9MM8ibsVz8RX4J/gQPor/SVGUgfLDMxPURupB+B6kjlJv0y7aS8fpPD2Pvpt+kH6c
uZNdwvazP2R3Kf7CbZIWS0ukAekq6bnR7tF7Rp8aPQijEWA0ZE270HiY7TQ0E1bwPHSFDOvNBJdg
PHvQPvjuh1H9DD2HjsLY/oCOA86dAjgoZTg4ABI5XMINuAnG2Ybb8XhQe6bgmbA+c3APXohX4HV4
Pb4e3w/fH+HtMI+98D2Af4bfwG/i38H3GP4Kvv+kWIqjHFSIilIi1Q3fOfBdSC2mllHLqZXULfB9
lNpJ7aWGaEQ30Z30QvgO0gfpt+nf0R/T3zIuZg1zJfNz5ijzHnOM+R/mBGtgc+wsdrbCoSgpBhQP
K/ZwF3BPc++h3QDjn8Kczv4sRmupu6l/o/XUOKCzV0HmvU51wUqsw3vwwwCpR9D9QB9VoIt/AJgp
ojx8VfC9FmBYAV8kxqKRcCgoBPw+r8ftcjrsNqvFbDIa9DqtRq1S8pyCZWhQk1Idoc4FgcHogkEm
GurqSpP90ELoWHhWx4LBAHR1fv+cwQC5biEc+t6ZIpx53n+cKZbPFM+ciQ2BBtSQTgU6QoHBX7SH
AkN47rQeaN/SHuoNDA7L7Uly+za5rYW2IMAFgQ7HsvbAIF4Q6BjsHFi2uWNBezqFD4gAPVU6BcgB
0FCTGw+itoXrQBygNnJGx6Ar1N4x6AxBG47RkY6FSwanTuvpaHcLQm86NYjbFocWDaJQ66A+OXY5
uQ7YdmR6Dzw7nVoOkn0Q3axZElpy85CIFi0grYXn9gzSC3sHqQXkGcbkoD3UPmi/4jPHd7unWx1b
zjo4SEU6Fy7d3DkoLrgZgE52F5C9hVtgr5tI2UHqht6eQXwDDI4MQh57eRZlwRZZsCIwqAy1hpZt
XrEAYI6m9+x2iS5ZggyiqT27naJT3kmnDjjW1wsAlAPplnQLqesFx/py/afryv2/OUhqx/pDn0Dd
Pf0MXDB5dmg8DHMwsFh+SAjGWkuKpbVo8+JaAB98ejHMcvmgsm3BZkMdrMcgGzGEApu/AbNoQWj4
q+/3LBzrUUQM3yBykCznGYwYBDItYwfYaKnuIaSc2rML4x/0En1vCLV7D4CUoefPSw+hOEGH5e1w
NewkUtBRIUCrIhXohFF3knULbA5sHr9kc6AzsAwWnInINRxYurk3C9OZ0bMcypk9wqDY6z7TXNrb
Wwf3SZL7wCVw+uZeuMOKsTtALXdlR+CkVKqbiPapPdN6Bje0uwfF9l4ACaDYwak9gwcBu3p74SyY
49hIoV633DE25gyMOV0Bx7Plu4AOugFu0bt5M7nnjJ6QMHhw82b3ZkIT5f0hjP6zQxzrGELkFIIq
Q3jDVLgWqpDgJh0hISTAsHrb4VE5QK/TywuW8P89hCvPjBuuLMBoK2UIV/2/BOHq/w2Ea/5XEC6e
Gen3IFwLYy4SCJf+v4Nw3VkQZl9BAgW8idqB5sFWw1yHGmH/d9CeCvUHYOOYYPsUtkbYemGLkzZV
Qo/AtoOcP7aZ6FvQRm4eGoJ7+tjZKARbgdyf+RTZoc7Lz9pxZp/0NcI5duYSNAvO8XC3ICXUOrhP
NzyDgzoLdR7qOIyHPLcGNhM8N06VRjdDm4F2RFGCeyJ5q4JaCecqaS9aBsec5HzYIvCsCqhDsHng
+Isw5dM+HA1S4AHYD4DsBuvtex8K9Bx4Cug6CtACiMakBCmmHjtHA7UWtCA9+IaMyARargX0Qhvo
mw7khGMu5AbNjHy8sPnAQiafAGgTQbkVksuwXJ4uIqCTxUDbSICUTKIUyNIMaKQ5kJ+VoKMSX1g1
aLNlvagOPFINpy/8/1ndKI+3BuayHh2FpejES/APKA21gvoX6IafMNczR9gwu4K9m/1IcREn8h7+
N8rzlH9T3avuVL+liWq2aE3aB3Tn6rv0zxpOGJeZppp+Y15giVqOWOtsPttL9pR9r2O14wXnDtdM
11H3VW7J87o35T3im+2vC/gCLwROwfMpWAnE3gO2CA2r27aXwuNZBbgkRA9iuPE0UrHMeJqmXEoF
Nx4jJ6/8i9A53ZFMTj7eMGmkYbLhRMMkw0gDam4YaTAchyKfKxgFYww2gR0YOvlvtvvf+4bo909F
4FkYzZPupFaxywBTOkSPRsvQWl5jZhiNljZqzWa73cX8lO8yOk3mIazeI1xXftCkkeOTO5a2f46a
m02lEjaaSlCh1wyv5XMmc03RruAURoPdZOeiMco4780NPzVv71ibmfaJ68pbh+l5mNu+SNiw9rfS
dunUE9K7dwr1T2EvuJbk8dTAeMbBeCxoghhQUlhv4BTwo9V6Tq8wGBVmG4zJ0qX+qd5ptcljmjRb
nvyk4yPfH5O9hAzykFAfojgYEherKdYYDTEqVrTZTUZq3OTuKdfPqTdvG7e+btpbrgc2/Rovlk4M
rF/Z5RUuveJdvBj792N8p9CzW/qr9BTACrCDGceogdKKogdvpVV5RrmVU2lhRPRWrMgjbqvSqZkE
MJpsOD6JwP40mOSdY/kchqWwCsaQUagW8MgW/ILUukUS8UFGLYlbpBb84hayJr+TPsAnQFM3Awyi
rzKYpniaohVaiuYNd3NqKzzvQQVWJM2HtE6L9ZBw+RgERq4aXu0YA8Kk4VKhACsjQwEe3MfA/Jtw
dVU0xAWj1VU1hUqbFZ+4Y6Z5wXiTqq2is661ecnUn0bjNesrdDxXrIpPXNwDY5kK+D+O0gEuBkQV
aqSxiwX+xQ7hnYAN8nOPGT5H2UnD+ZwZpjYV/1NSUroN8lp+MPoFfhHsPTWKima2Qq0mkOIrKKdG
+7Jw+Q/Ky3Z61cgdmNMDsyhC2Nfals22tuQcpGrNZtvgnhQyjQ7Tu9gFwN986A4x+BT+i+YzC30Y
vYM+Q3QeVbMlLT2RVzzkY3UP2bTUJtMQxe8JqDa5hihuV8CfPXp82HBiGDUPN8Pz2taKtciriToi
ligf8UQNESaqtauqEbJS1ZjzQovVQ0vt1FUjbIZC6VZUY9oIBfE3yAVpwOca3N+H+sImY1WMCgVp
hdVitxVMxIDgKCEYixoNxZoCte4ioWnHjmYhKA5+evXSpkulTw5fvemcK0cjYHrl/3E71klf/vB/
Pt0ksfV/f3nklUFp354XcRemnh0hePEpQnSEnQe8fJXoHLDcaKGilhoLpRlZxH8SpL9dxH0SsnwC
PuCLdpsXWcAnLBq1GppieCvLcxoHwJ6ih3Bun0ajddodz+HLkYAfwX1ojHcA0xjDnYZmQJtJ3wyf
wt8kk/kcgonZrEaLzW4VqgGFjIBDQQVXHSlQi/D0i0eOrp3giLtmhPEqDdvLKk9OnFTBeHyKmrn0
A7lKr8EDRppMO/Qb7BKQPUPixIgJnOQX4eVmegl1t/6E/oSFYfUKi1UfsTBJ3gL8DzucKjVWq2ga
uWiH0+h0qFWYVVgUF+hYq+Vhl4gEt4beZHzO+TNwg4Igg9X1erJHjxlOHIfVdTUedbiA/pqHCQWU
GRRpEYbAsQbXYXntPYyBj3BaWGWlSqNm9XQ1VmpgaRkDFIgsr6HB0HB6afuLvEw+QcJJmjChHwuF
hUrgd7TQiC/CiodW3TQrm0xWfn3TE7/+o3QjfmPB5Lxr1ak/2PFVeMkTP7xvSXG18vM9b297WHpT
ujLTq5H+DCgNsOkd/Ts9wK4AiXqX2DDeeQ5HcWFbOMGVuG5uBbeCX8tdyT/hPBJW2wWHw47oFA4a
tA47ZdZQ3yTEoFY4qMRKZdYMPPoSUe9ms5sSWsMFPvaCh6I4+jwoTHmIK9SgFKXclc8BBQCQ+j57
q0wEwLuzfY2uD9cBwAwjp6FVIrByOYCfA3701dgKlTXVVTF52ceYyNlQAIDYCKIjocxZ3tnXvGVT
se9DrcNAPTR0e99FMzPV/vh7t259rCM2fUHdSult6asrFwuRn65+ftUF027ClKvu7itXrp6WOpe7
d//jFy2cliklisu3vyB9NL7ClSvDKA50T2SiBq0WPVeqNvI/4ejl3Bp+M3e9kuGVvAYpeSUY54Dh
adFuoigMhjqtxDqEGfZhpIE9DSK4ogNVTLlLpyW4AgKsoZlIzTKK2EsbM8l1hsNoTKgBugD29+E+
bMUhLADOw+SL9D3S5OvxXdLEhbNaQi1+J9st/Ptl5hXxPMND3a0wWAo1jr5J72QXw6OS6IA49XPH
585vHN84mU7PbO9l7ss8G90bPdsMd7vv8uwwPJt4PfGe4b2ELsM7HQ5nPEBjmlU7Iw7S4CNT5uuw
brzOwT+UZB1adhMyYiPhaGn1pjjhaOlUmaP1wWo2D5tKA9k+xzAsHiyrzPyJXCazAE4XjFYoDNqo
GrC9AgpOz1ZjTQx4mirBV2OFAQpgY2S75hoyaVRTJPICmBnwMlvBhQHdz4hROFQkOyGy4qYC1Xa7
ilFs2bhobf8PD/5t9cqrX175qGpZx1XdK642hCYsqUrueGX4ANU40aW6Jv4mZnbvuuNfdFTa/u69
0pErf9ARs8Yd7vy4pd/OdNVaNX9/7G1skeH4yOjX+Cb6aZAfdlQteqgKnjNW2NVO4GSWCp26gmV1
TofzZeHUqtMsbNjwnTghDB6VBygLO+ps4XJ9RyrXJGZSHQ+0iNlsZ2uR1ja3pzItzdlTg63ZdFtL
JtUpj2EHyOLXYAxm0JPnirkjZ6SxrSyN/RVOjlN7Kmx+rXC2XA4Ih4QLl42JuDNyeZKBcKfmYcP3
pTP6r9L5ewN+7bbZZ0vq91uIRGzNTd4Z+57EpvaCtGwjG+G5o1+DvuIBK2GpWMMqFHkTTTMKCPVC
CwhEwdIKioUJQWCIVjB5drNiM8pjNXLxlJPjvxQ655DxA5k4UbMDdL7jI6aSsYQBvQCteKAVBogF
aofcyOciVlwNpMKMO3mCUY1QG+/FJ4v45L3SdYQm0N+ZcbRL1mkz+xR5PYe5IawRjXSeYhEosxRo
slsEojwRTRa0WJQdnjTSB4uIQeyQrXzfkyfwui1b8I+2gKoEczTBHFfKczxPLCpYBWLzJoahFUjB
orwJYwo8dphBMEeapRQ4j2CSbJ5RUy4e/fdJAhXBJIlOay8xMEkeJgm1Q26AlkOmWI1NzDknH6Gn
0NffK7FFib0X4qkyvmwEPjWNPR9wNo22icUo79RT5mDIF/MF0yjGUeZOUIDUDpvZLZocZoHn1ayM
yBXuep0rG35cqKpwZrJDWLdHuHxM2R4eBqV+EkiyUpYUjVmX41XXqy5oghN6xPVLAyAU2YHxyoTu
SqY8AY3WnxK8oNy4IziQ9HmxR+uLlIUa0Pc14bMIw0R0FAUXqgL1WCZ5wueB5K2ghZUZOjW9NZ0V
W5OZtqo3tj7mDdsMhhYhfdHAtFXT86G4uHt3WmzOZJrFNKt9auu1P//N85GNhcIPu+9pvuDxOTFb
X1yo7Gg7/1kZPkOjnyruAv1eDR76F8RLS6F25Q8D23Pb89srtxfeiL6WVTp0tmLEFimWVNXFznHt
XZtVNxa3qdS+Corng6mdMTwlhptjOFYdpIIuvYCFcUKsvk2sD5pRWzDQre5K1bIVSdqX9/ny6nxK
PS6cCtc21waRHdsnNVfpJ03MHnpn2PBRvwy07MAvHNmjMlgdRPpBi6gPf3Y0N/7ZBT0lmaUeGv5q
Xbavr89xCERkCcAsM0gQiyaiUAcpK1VW8IQAkYPAMmPRmA7L0EOgKNiLBcIsZZWQXBIOBWQLySZU
AsjtCiZEDbfVXnZ7XdXSwUs++eO/ToDI0T9/RPrxBYUgtt84sf8+zN0/boleeLgYdFXoHJULfylt
/Z30j3e+eGkI2+b3P31V9G7pxP1470R8TW9Vg3T0ppG/vvBzbMGlDz+456FvX5UGW1NVjedtu+YJ
7B5fvXTH8rl3RCzOCqw++Jd/H3hV+lj6xyP3eyrmlRZMhzWiQbNG7CMgvyjiFcAN4g5aTxuctJMx
6U0Gt98dSNJJJqEo0SWmpGjwNwRmqWbZt9BbmE38jcrrtNfprtNfZ9ji3xLYRm9j7tTeqbtTf6dh
m39bINyubddRHISvkd1mw5TDAZvTiRk3/ZjC4NZr3bq4SoAH6AM2J+WgkV2HL8e8MsArFCkTnKhU
qRImuFLhpG3gjhdYHXbaVArGEcCQLJKyO4bwLFGjFAUlTwf0OpoPtSgpFdLhwwjjLpgOTSlRMHvc
5RwZcRDp3wDyv8FFDOaRBiMsvqwsyvxtoy6TZIH0oXbIjSRZefjJSJGFgFeWOGIxaZHGRgO77lDD
RkMDZ2iASgd2N1gEWI0x6MxFXIBI0Jj+XBXNYkEH4tQOGjWm7xj+Ulo8ZcoC/GQcS4XGrpF/zq2y
mGaNfDHVX+HqwjFKR1WNHB35n4jyvD/SwycvW1NURSK8Pa2fWHH4tV5XlUWjiMBiwbqB54Z5XtaR
IuCXeVOceqP7Bh9VS3fR57in+fbjI/gd/G7yM/xFUpXhDYLWHUmHjYLbmg55YwmlQcN786wxlq7s
zq/4mMW/YjHLRqzpjM1KaTLhcISH1IyCaHL2UDPFwIbAiwE6UJVTJoyGIYreVVUARQSAaHirb5jI
uAbDcHODzLP6+keOGUuEsAB6hK+WiFEBCkmgIiWE7A6Ek9FgNGVPzMIoRM3CFY70LIwFzSxZA5fV
kbJCEgYdNBqqwDEwRQps2RCJVQuVjMy+fABQ0EcEVDytqlqNRUp6618Hs05Xw8qRl64aP/4qqukE
FpaWVt/y6keXPjmyhHqx/dq7Zzwh+l6ecMXTT63HElXtj3DNl9C39rcoog/8/PbupCf44K1/m5ul
vvY33PeMGLLlpUqa6HiF0Y8gNrUYYB5GT4mu33s+t3/qoHsdyx1UnLfZWbdivci7BQ6EXIsYhB1q
e9TG6cHxALAM0aaMWxkO+7mFD9pftP/KTtuHKMWeqH6mf4hid0UjslIn9R0Dlk9MVQBk2c2CXI1f
uBzHAeNcjcMOFwB6TLnzeIJaozciRI0efRFpg1AYfKYi0gU0RVDpZEN1TK0jynyxYA5FiT6PjAZg
UDITAuAFxrhYkF76pc5bpUqas4nW9W//Tvoa+z948MZJ50bblz71mrT/pT3Pv4KbOXZxayAoVd00
8wHpKekdcJIcmJicE53dctFvX8ZhnHzjbYAT8WWtA5zUAZy2ipWvuPHj/BA/5Nrn/pZna3iToHeH
42Gz4LbHQyYzpcqAhUNRmVAozCtmvujBHgDMvqhWlzCDJU+XQUPQTCIar4xkBgKcMZSKO4O00uf1
ewNewcsomIgrwkfpoKKIlU4oWC9VRJxbdQYkyYox1AKgyL6hKGj5VuN3yBWwM8ay2hsCYzk/6W/3
/fXQ49JfOvLSVRe3t66m4tj+c3zuuvVTZ//os5FXLgzMvwMCMfUPbvIVTn69VlNaQ996schHz31E
mrNV+mp+g7+O4I4d6PQVgAnxp74uXrA0NhC7IUbrXlW79Sqsukrnvdfl1juxM+2lBeSOx8OM4Obj
Icu9djdyYEfa4rXoaKc/rHREYio6HA0yZh2vj+4MZuL6DG8xp7w+XzzBAyImErTTsUbZrVqDolOj
VHSIUu1LmvwJhibATFaM0eyJvuPHjzfIyNZMKgJg0FEJ+YIyBBSLywRM+CMyfNOHh79KJsv12C4x
FInuAL4BIElzKINDMiSJeVwwyruEaskeLWB7f1vrakbkqlzL9kpfpq24/rouWy5n77pWOjzp4JtH
ppT6Tj5NnRuRAbiyjY9K722a6o1LxcmXSdHLJklso+2cndKjAEJZp8iPfspuB1okHukXRffnFI7z
oSvcvseCTsHtjYfOJkZOzJeJMRsJOWkTQCqmyeSyQJAxJbcw5HQkwrlcMvxg6FchKhuaEnoxRIeG
KGZPpX5mktBmZX7M4OojgAK5YThWplACNgCPodH1FSFMDI1hQqpjmOmJZ7TGRCQdNcYJgWYIgVYQ
Ak19n0DRfyFPWSsrQ9ZK1AijhTlDqiF65efGVESbNmSb29a+dFh6G1e8H1mSHh9u66dUE50V0oM/
kd765af7XsHjBSDYYECadtf4DWCCPyF9Jr2k0ztCQTxuoI6LRllLYIm0Mnz5zp/jDuw7+geALT7j
i04C9fZ2ujtjlFZwK+MEstZ4MDTB7Y8H6QnInTyNpQbBbYmHXILbFw9FBXcFlCEXzUSSToOWYXi9
LhWORHxWi5KnkhV+H28IJZzgnGP2pbXRMbyUjVqCg0QqnxbSMl6CqW4kOpodCL78Ie6p7xDPCmIV
HN0yEsrt75xWQtmBJVzeAIAp9bdTK4F8S/1tbf0jr6ytH7mzHeqItvkG+rKLWvlolG+9SOrHt55u
n+q/uBnErka8Af9AmnuxqIyUeRt1NSAhibD0iHECmHSQkKw5LZNsOqQT3CYowa3OmMmMzSbeYoPJ
ikodkDBwNYY+AMmq1iwRnUBohs+B3xOVBGY4iUwwn/uPyckTwsK6CRPWUfNIOfJjnI0oS5eVZVZU
0dJ/qv+ykjIiEweWec1r0HahfrFxqfNS543Ou5yPOPc5Fd8N13V67Zx2G62jbRZGyzt2WjIuGDGY
SY6AY6qDdhDe4ZGHTHiHx32Gd4BBCyEH4BYg5AmrkBfn+wzh9Fr4cCEgswCZA1Bt/ZPsMXuhExsP
zq1acnL3dwQfVTSddyoejLE0NfeA9KMyndtHv2Afh7mAVoruFVt/78A9zmXOD9Vf6r60fuZRqIly
6ASPgNrBOxkemQ0ggE0qyofcft6hFATa5rCrXGpjXKNO2e2muLwSmpDTH3elGGU8EJe5YigIM/vq
q4aRr8AK/UoOpnx1mhHC6jSfIusz0kCWi/DGxqyDM7BJAwMKH7EK5PWKZcA+ETD4ggk7lGcfwkZZ
4QPud3WXJ93cjOfT1kqhH//h0smhUwP5wCrJT/0you39Mb1RqHZS0VNR6uknCoIqGtXM3X7ydWbx
qT8+XhA08sLSYNt/yl4p21EkmveIWHXE9LrldRf9juk9y3su+g3dYcNh2xsO5n3d24a3be87mDae
z3j0NJWxKz0eNztzgRmbQbY+c4/6MTWlnukmzM3nJcyt70Qf2MBjioesqVUilzNijWqjxgh2qIuI
trEgUXXQgqkXMXKBWGUsUKg0fBErTFAQ5JUL0rgG94EbsQ+ZCpVE4QCDyUgVa4ixZITYjkDUDowj
0oF9GEundg+NfvHL58F4sT7/i7dekP4hffLCz6kH8SLpDZyWE5MqpDek53DXkX37D0tD0p7Dgy+/
gmupl8dwBPSNesARNUQq/yZe3uV6x03FPAdCh4NvBY8F/+U5HuSYoDVoDVV4IkHWw+/wPuul9BM0
wKjCZdalj4QrDJw6FAwmTF6vxxsOejxh8EVnQlPDC8IbwoNhJhzWmM1uLmOhApq4OxHkPd5gyINZ
IULPdK4UwSYlxJJSRRIGPSGWVPIMsRwHoWonSAN0DkjULAvZbN+hkXWHiGEBB6DcyBrAD9mAoAm/
ErhEUJ+8ECabg1HYI2xUYaNnYcbBzcJjHjs5+nC27gvZXGPSuJLYpAqubIBgrswHqTXzf3LH5Gvm
xKQNA3Utq6jiroFPXnkSPxqb3CjtlxyrO9aMvEIdjrYd2N0ScmYkbmSZunMDfdmFbcpoetaxrQ+7
Rr7NpRQRaoCVVq5uVEEwkUKzRj+jhwEnIRKMs2LUGFqrulK9Wb1Z86fwZxGum+9VzYpQahUXuUl1
k3Zj5H3VWxGuZghzorZ6vdibX56n8ttTGTfp8bvWi7Nt59ko2/aoOR7RqhjGnymaaSaTUYpV7uoh
vFzUI3eN1qCKBONuruh0u6Bvn8ftc/eAzl0Q9UW3IZf8OjkKxmqppic4hK96BhlyBspQqs0efatv
3fAxBxgrAN9J64Ydxx0uMFuysEeoumSAHdeY5k084Y1f9RFZfqbRv1pejqpAmjWFdcFZSJmApWDT
UARMsBvSR2ahcESn5StUs3AirlQpUswsJBj9YOSA6kTCCnJxRjGHuCaR/MTLnsWgmpcjdGOqOmhT
xCNjt/mx7Ggnfhno4UI0vr6q84p9i27tyt6zc0p2zi93dB7WRb18RTpf+eGFM9flckv3PtHR/o/n
5/9KH3Yy6UZ4veH+zdNvvWrVkgnZeSsrCwsvve+XHWFBmnj4/sU9U2pLTauWzem5fPu7XSkn3ksf
JTSFSbYAMwQ0ZYf4RJPiVdpN7cQ7KaBJeE1jPoY3LvzYT1HGCW5tOshDXCYdMr9qc1N2sxGSGHje
qFWYM5CHrtXwTqCL3VQ3HsK8qOP4hMlvnG980LjTyBihazfqth8AA92RBXW0D8jj+PEzHnpZssjk
gD5okPVP4Cl9fYbhr0jgkSicSWCwZ0JUMnTizA3qfHjV7tUgJZ+8Vly940p/JdstPfzw4pNfEBEZ
UbXewKBFj5A5Kke/4NbAHGshK+6eHGRGIgO2OAMogOMqyPjEtarayt7q853L3Zc5L3ffhe7CD+of
NDyCHsGPanfqnzY8Gnk0uhftxT/T/8zwTOSZ6JHIkSjJp8AQWTcxnJNzUVwO53L5tCqZSqcrVCpl
FvYyGXWhqrq6ErvRAG9yG593Rt2Rxyr0bkNcHXKHB9xFd228WkxFXClUOTR62R5lZT4AtTjTlUkH
cnlfPmVSKlUV6XTK5HK51ZlMAmpndWVlAvr56so8z9TmMmmnWqVQuisirupcBSQ2klxGVWVtJAzc
mKrMZ9LKOnBeR4Zw594AcmHXz8BZsgEp8UuiKoBqN9RStc5S3RD+4x7h4nNlB22fyzlpxOUYgXrk
dMi57EyBEhicbOdDDcrAxkmZpA4cKSzxof6fGyTgAvwNKI9c43LITpX/q4IDvwo4WPgGXQMPNexs
5Imjpa+fCBgsa8eABNgMcleWvLLXzWZXYvBtEtoi0hj6OJqjQzEah9SYgj482ujKqNU4/t5Cd02g
hQpP8oKDBHKUkQ2MVF8DvrvorXK9N+tK/4zj0mH/nYMrZ81lu6OU0pi2RH2nJKr1n+3gqopGscpY
bXJXjCDqmfqMy1CCCDSokkbvuJEH/yJtGaYGTv0I78Af4/hGNlqWV7oxW5DokLeLTZehG3V362gH
CfqqwWeVMKlUanXCRBAJmUHDwUoOpyxKyqhOmXl4u0plsSAsGtyCytQDkSGVqLKJCrfA93A9aAgC
XTZr9tA3x4+BuwBAO3LskNwAQBNWB57O4aPgXCi7P6GjMQterORGQ3KjDFTUV8QCCfSFILQPkU5w
ExDrTUdfK8V3d6dd1QmmdGojpdszvZDIVZ5cSy21M5/3Vl+L59lPumbV3CrdCwQFfqluiG/eRO8F
mSyiFvD5n/dl9GSU4mKdCkoT2qbaVnpC9YT6ce1zyteVb2TfyH2g/CD3Xv4r5XBOP4dP5SvsHr/F
jwp6PdaPr8zUlPIpvQopLLylEOEyTTVqvqlR3cK1lGIGdbalQsyvTWQrdlZQFUMUElVtjpi7PdjK
tIvwqseutlai4BwfIRHQhs9hxiMNx4hOB9kA5VAxdMkhNAISGSFlPl/f1ByKa+yYoyLaqCJqimId
E0VcE+ND1rDdh2x2c9Tgw7E4rUFRjJFOzzbzPmSMWXxn2D2WWT7RhuADHngSYwP/oIygZdYfLtZE
ylFWrux+Hwuv1RSIBCfaIxEHBH2B/cfKVTWmui/pvq0hlmtdK6Hbz8VmS/CCQiajili96dzTj73U
EeG1CbsvEojU1rU30hNrzpk+ez1eR1VEM7395yQ9E0oXLGw4f9Z58TaXO6sp8bU2bX24c+v6juul
VXW2mM5dFXNGexpbAzVr+yh4UYLIeQ5iHM/DuxQOyIe/Raz4RoMVGrxNi0M8fs86FXnwbSFFhIMs
SoVVTSOhSc25FxvVvnbdEEWJqlgkpshaDlqxFXJTd4G4O0p4PawIOHTIOhABPAZ8JOcgyEvggJCG
IaDxRbHHAAVE26LYq3cDFcl65hg4zeBrLQCsgNrl+DyomlE5X0E2q2VfPZjP3Or9HOWqOvfyO9+U
/ueDVe8E6rByc9WWjetvGbeJ+VfQJSoUIw/mkt3/OvKW9JueFCPU5U8uTP/mrrtG5rRJVBkGWYBB
N70TcuZC6Alx/M32h/lDxneM7zj+aPzcx1WrO9Sz1SuUK1TLrcttVyjXqq6wXmFTx3m7g1MZ7A7K
7jBD4hCrLYSC3J2gibd41CGqNeQHK4vaEzG0gx8Q74qECbYaTphKBEmH+0BjPHrayJIVlTHnn9sL
1I+wyWuIIp0AhcroM0eRPqCNyhEfg4xwJJIPeRxyUEdWMWSdAnDqtPePxHpQIURdsS+TC1VDlkhA
qFn9o6fvXDYtU+cpNa998P6/YcWrKXrnNZOEUi6Tq7ZZX3nknr+1x2YZL++88cRvf4UhhZ7gRx5g
M8wOQASsDr0vrrw3/kT8jfhrqU9Tx1MKtDJzVebmzH2ZJ5NPZZ5N/izzi+TRzJHaD5LvZ96u1dHJ
iQkqxKvfY6aqPOrbjL6AfarX47tDqITEBcbOBGOV2ZCdZqvqGFPaiKsKaa6uKRYT1EEma4qJEOEB
ot/fUGx/oAID/eNdDfUEvQCGfcdlVwJ4pccwjDj5QeLIDi2S6QKOLFKVka26FE9Vp4pRVIpDUZOs
iuLaRN1ZyAaUC1kx4MA/nQwDZh+BIwcOCLrs6LIq9GAEymRKkRi5qWYsc4ZE06lMYzziLmhM/unp
uUFDREFhigp0qG1qxc0/4moT4xfs+O3IM5csuLl1/Za7fkjvClgjuKkxQ9GCVePSsDpqeWlt/alf
tVRhSqBy9corG11pzD39e1w89fi5Cfz0tRd8/JPtp4D3xke/gDdKdoCPwgNpMr8X+5bzKzSrTBda
r+TW8ldo1hmvNq2zrLOe0p3Qa2fx5/ELjIeYV0xvMZ8r/6jnG3mlyu6glSpKqaIVoAhDTsI4WuHx
LPaauTsUP1ZQihat2usAAeg1/Ap8lwR7/fT7EBHAu/y+Mvb2mUqgWZfxl3gUCX+Vo2hE3sNvDIkr
dG7EWiOuqMUkc1Rwdfqw08Hq6CiyGT3QxlAweoW8CmD1nOanp93aVgG8C8AgQRCDgUkgDrDnBOLm
LlKL3hq5QfXCtctvawwl/vCT537x1xefagjo8KNqd/6SNL3j5T1fvHXRUs3V72LPgddwePzSmulL
8j3jQejGQYAZAJej6DKxWFRBMMqpSgAwonQz8kQ/CgvNnshHIVpgo2abw3iXo6DGfrbk83IKRTSi
on2BOIZEDeLw8QpZLgsAPADvPMeysn579Ju+kqHs8AFtl9iCZd4HLM1hOOQgig3IYGLIhaoLVWM8
jXD/LCYmAafw4oI1VFZ74yvannwyOf39nptzQW+F16iLBie69Se/bbxm5C8etmMVdW3bAyt/3Vkv
VIVSLqu3O94y3Dayvr9ZSXKBGVQjtdIvAT8zoy54i2gORI8Wjm/taru59aa2HW6WjbNFZZurrdS2
gr6w9lHLow5li9mQ6UolXYwtGnRT0YmGlkol7NOJ2cppoH1Sswtd/sSUxIsJOjFuSmGOK+DkqKaS
bs6cqG3itNuiD8neaCRqetlCTaA309gRs0H+0m9EXcOBGe0GW852m+0hGwMpnqO7enuyRyETAFgh
/I6+NQLULEeWiLw4Cr6YgQ/6BghGZaGQI7hlwpZ3gMrLYDQR6SmrgOCbgR9Az2r6zsyqx9bQadsq
Vja2CnIwlyEipKqmGfREUgORw13A+pJldIF+7fkrHn1zZtXtkelB2yKHJpuLLX12x/jBadZZZs3T
JpXx+YecLd75nZlajM+9R3pw78MHC92tmow93tH/TaRhYf+iiHlgHi/9Q7xkZhtoi5DriXVss1hD
xbYtuPQ3HfS0Cn9d1eoXlYv8Ab3Km73vgeduGB/uaK/XmIz+eKR3icWXu2z+X/vyXVe8RHUDvoKm
SH8GsjmH9ou2Dhv+1o6Vdpcd/HiGrD9HhZo98Kb1SYiWE/zNBcKuZo8vEEo2e7KB0Gm2mwglk4mQ
y0grYjnGYNWjWJOVy2X9PlU4BME0wmIrDbFkFqIIsDqyR1wW4IDDZW/tGRZLSLwsxInWA9gss1dD
JGpzRG1hiIg6IvaYD0w3IGagY8JVx/ydxIADYd6M7WVhLmtAZ8w7OQNxLCXRNL3grVVbtalrnAuo
5nzPeT+uD+QnSlPmVLbMnXxH1SxpnEddfxF9sLaapsLaCO/jRrZ1BRs2dV0qLVshqjweTd1F+C74
pwajZL64VkPIAWQY0D2lAziqQcfpE6Mhjb5Z44kEIHIfcAQMU+0exx2egN+gZzwR/i4KXhOIhFUx
WeMMqO9iY/7AhwY9ofSo7NoFvJUt2eZJsvunLGoM3wAPg4zpsqpCyLqalp02JDAHsyeoRpQZ2ap9
vCGVbGxMpho2XFCr1OfU1srkzg4PTxUXSi62pqlRPnrSqKq+FH/Y4kwwOr+u5NVw/Ejl6jryZxcw
ndHNkGq8S55TBt0oRlO8J2Cd6vZ47hA0WnXWGhIyUpxMRuB0i+O6pIVMJAdz2hsKZy1W4qjOyrP5
nJAhIT6SyDRmmJO40Bn56YtU6I2wypBQq0+YfEgfM/mwsUIHKnEEitOBXVjysydPlXWR02ISAEDW
nwDgjCL8h9NQ+PXiaLNNi7Erq0s7ZvkXpxuY1NQ/TrgkEwZgNCUJqL795/rxqfMjt1N3tLeoOL9H
FTJaFfypJU8v3N1QKRSAVuC1C3qU7Ue16DfiQGe4JzBgvdH6qPXL8L/DHBOIBqJCTaAo9Fp6c+cH
VuS2WlVCMFgyWYIhqyUUFIMzTELeYs3nrDlLPp+D1wYhAB31lTUXPfIBYBWoJkFHPbXFmMqah+O0
N5SjYpXeBbENsYMxOlZXJLSotuSztQH1ewdBOBCCqisRneXYMbBNwEF1iLAx+DVmZZ9hw4i9oRlk
xfHhU+QA9EI/xxtcSRekHvAGGaXOiA2ZTsYwCfJVjRHAr9PBET22l1MSCMVB52n/NLOgMZc2e4xz
z+9KQeI9tvqs6Tq8/eJNP68/8IPbpkltIaNHpZReL/jGS4KHq5xBfzkuSlEeh9uhZ5WnnjnuDmjs
Gtrj4bp31fxtaC3n8lBYo1ObNfhe6QcdIJ59AHviMNSxV4FPCfL8rYhuQx57IGwLmDTvMXVqj+Y2
kxGCJnCy3aYCrxHaazRlaYZQFHiHgNHI5AQAKKcpj5FSmXeMkU9NkcxYJp6Kvla1pVEnODe+wNEN
8ySPR1maQf+61VmhUAjhBo3l5LQ5BQ6oRI53Karox+Gt6n+LnhpnVYAyBh7TUVMSUxooQ71hkn8y
3VxMt3kSL8B/nASRCNaeBzXAKk4MMnXIMzkQDtd54oFQsdlTHwiNr/NMCoQ0AXYqTOkOfdt4d1Ec
39UmFmvSYbeFZTQdk836yo4me2WT32/Xc5MnNdQn4qqphJGogeoyt6bfTFNd6SE8TtR2ijXFbMut
4psi1SVCzzOdjDk2PsvKUJlCoHLMMHB8oM8B4DnTIHAiHyghRgPkSnSu0ynRYzRLeHMyacyAR20s
hkGE3FmaLdhSXvAnEzvUTphS2R79jhsTiIOudZb/bSxZuNwjTHbFY2mrVdcV282y1OLbJp7fGLBO
KM5fvL3G3zxdapxTtEYubBEjNaVzper5VRbhgsaBdHWvVHJxZu8cip2QYdiQQ9uu0m2c29EZbekO
N1034SFp4bgC7/LwNTPwzoWZ6UlnUULTZtIul6b9BuzYVreorWbkw4l12EX4uQC0/in9U/ltpWfE
Xqdrkou6W/eoDgSjXzBU+gtZoVlgI80eIRAkyFgIhD11nkAgBLZPJVnCMlbqM+mIx8zQXMGkTzTZ
Y3quUCkEVFVcFSRtVDFuSFdAz9SYYpkspFoSYq6pBmKGSCbYtxDBHGkg3gayHBAHIM6xMtMk4Gf7
mLJwjMUdrrgjCgqvK+ZMfCcc+8ZE42n0bsZkVf7bcpy9GjgyrqQx1yvNusTWeRx9btXkme21F9a1
S7PG14mz6xuDNWKH1I0/8CirzwUsdgElhzSVfpXyztmBfGziy1K6S8Qej6rxPPzk7P64vXrkza48
5QFI0qhq9A+gM+4AGUneLLtDTB1Rfqak7jZstT1keNL2jYq1IQtjt89SzTSwdbyj4KQ4U4FXO63t
TjULpsJ+t75dD5EVYi24XWOGmqkkGwvglpLBkUJ2bUSD9VFkp61RbFRCy8xBS4ccUWxjoDCoTFH4
+xMoCBzLQSdZl+hzAcoiOR8P3k8jChsEoEB7o0LFqpFXjmDm1KsHpRO4t27J9lsvXrvtjgh1DzZL
p959RXoPu97GD1Sd8/Fu6egvH3saVzYQHFLKOvIuyEEvoENib42yRrjbuTWyI/JI7FjsmxivirCx
CRH60TDuCOMgb2jTegrvhTNtnsqPQo6AUVYa3PAeOc1mDJlEIe03alQs5XPzTSHOzVGLE+pCpY5t
hywNcJNU+wCJjAcN2EDQqLqKgOe0mwRMBZLzSRAI6Pl7ZuxYuoEjHAcXZ5yNYi4MBROjokgBuTAA
HfhdI7+s0t8XLuvERN2wGscCRqdVjzPIdSahsUzMeOH5nRdufXD5hCukl+YVIgW12TSfPcSyrZVz
529+5et9tQmxpnWVZFzT9ruDQ/vPSUnKkScV7ePpgxOTYL36cbtSsbE1UPuXo69Kz+qstdKBpRke
EtdkHzwAeRfYIAm0SZx4yIeLQexPYEKNCWCrbYStqgNMM3gG7jAE/T46GQ4HQUgkLF5zYIMXB7w5
L+W9y2uI2TlgohvAj500x8JlNXXvTpg45Lv0yWzyUB+xuiYdOzrcD+apkcjXs30BRFU9K5o7JkVl
C/80JxxzpMiQs9iKVkF5bkMkrxJMpcvtldUcLV4mFsR8JDrJFjpvap8Emb75qfjlxbNYRrBUKM0O
leHh3iWNmURtZ3+D1Di7jQIGRXBs2egw9Rq9i7xZiWlRMCMztlEJbUm7TLNcu1a9VrNJA/n6OU/+
10CWcM0Qvn0PtEFCCKI+WOHwOH8tuj2Cyw+zJ8dgF/xsgpgUTFqk4iFuBLE01g+ZqxxbqFBX6l34
a9eoi3J18i2VKAd5tVUQKvuHaECxi/UP6Q/qaX0nqgJPC4Bu4C1H37Fh0EmARgcO9fU7iFVPktO+
kyfl7JfP+uT0l3KCGnRB7OwzOWWNBNFksvbEEwEBXufjFAnehwPGoA9xcdaHBINfdpnKSEose3Ph
dGBMNnq/FxYjpj0x1SAqVnZrEdwN4RWCPda5sXtOZfPFV655aG311bzJoHBwfkuw6dLOqZuvf3vX
rQ336jQm1oUjuH5148UzWismR8TWG8+5+La4Si39eWHNktl153aNW7Nt4O64UUMfAL3ACetSz2wH
kT9HrFAasTtIWaiSL6gQ1YJqHNekV4sqQR0WffAaLZW1uB2iMWUBc+noB5Cq/UHjIXC+HzoKTcM7
UEDa9sBbJIu7+aic9gEWKolehOgxHy9xI5EcYrD7M6CbkfwfUGa8mFIepbSOznB10GWrWlMzUGFf
ybJKR0djv5alt3WNHJwY6whGbL7OuuWlpdQ8WsGq1JbSuHsZ7QmCW+TdubeBX5M3eB8XJ3dz3f65
3Fz/Sm6lfy13H3efX+nX+nWUl1fVeXSBULTOkwyELGDtmD2W25weZ9RrUCnZpA4pgH83CeoU54mp
svpUKmLQg8sH7csgyEWJEn6VSROxB3rICZInAXlSkCVFmFZDA7CsM1JPRgVTMEwxdJQJgl4YClMh
wALZHiRcigR1yo5vMIbKaT3AhYqQUAHqRjDaSNznZUDJsZ0IbjRHFre3RKINc3FbfkqxqtHVw1Lt
tbPmz5k0OWjrwl/TD4xsaE9MTDtTEOXJscKI2F6gPXq9RRlUKrZPizU0Nd5GcVPdRs4DL1KDngow
e5PejkKQYzEvpo5Zi+qitYefY5hjnGPv9fb6lvHnG843nm9f5r1MeZntct9G5UbbJt9WtBXbeY5X
KksmQGDebuO4GSafz+vjlBBTcgaDBjONPRAgdaojPKdU2ijTED61f5zdx4UoLzT3jbsthEEFPNI3
cMphN5Y+HBhxyOz+CNEgwAogahy8y5aEaNhYRRwdmCSbgNLrJux8LOAF0MIEoUDHB5KBcNdQVVKp
fnOv1h6xgT89n0xIH/MqpUrHS7+MVDhz9Ha/whI0eD0jJ/HrQpc5ZlTSfj9TOn8kZ9bZjdQHvQGT
Qn5tHKOK0a/YHwB86iCie2OUi+ZK1pK7JNQFFUoO/q1Mz1uUOUcwEbzMstGihFdv6RhTpIp0kVFU
VrtyuZIpnXN73J5ql8UKS8rzYF+RlmKGqdJdDWek0zNMwaAQTOeqK91wgkXwWLUOYyRei3Ss0VMX
Myj8DnWDhaesENzHELUFeTkiasdZFXABU3LlZEZIegIlXIp6gmlKiMK/PIzsGxeA1+Pqs0f6AcAE
mB8aiB+pv9weOAX8jfS+U/bPnQ1wiDweOpQ0HOII8A+B0QWGF2kB/Mk7oADr71YAwF0g6EoWIAoR
R7kC791YWhBJCXLjIphfchc91FCnVe/frfFkUpIz4JUOMgqFhvqj9C3FsRpKejsfyOLVmXzCEVm9
l0paLIUM3k5fy7li1rRPiuDdnnPsEZfC62Wj4079RckrGCo78luWg/oPa5McLKIz4e1v6ZOO4Ws1
lpXJdIgZW0cQwcAb7kH12CAe+BMHr8zAf9nB3wbgBJWlct6aHqEn2BMasG1kNrL7Pfu9hxWfx0yd
XJe+yzDOztRUF0PVKl6hqlbYeZUKIgPWhAKmprAnrPFEMQQlbDXFalUxZC2ZVImSqRpOu1vxiGK/
4h0FY8+aQgrYiqFisToRsltVCr6yDutNdJ3HYKynkcKbraRdHk8uT0P6rkJlZeqNxvH15Nx6o8Kd
F93Y3ZhvyB754AikdNhL2QGSSAPO/WZ7wymwmOWSdGQyHCRrJfughoqsnbx8hkM85O3DBos6tqLE
N1NeT5mkyqbPWdbzWEK/bD0DVcH6Eee/bG+SjH8zTVYUvxetrvYk6735iihuLfS4n8R8YVxGWuy1
+6OmsLHNvt2r81dJ79ZUJf98sC41gb7Hg80+c0+mbVpmgs1lAjuaycb+KV08OUN5PBTlMJlbAkX3
guDJtE9l1nAejzrYBP+9FZoTAAMWHFGSSL8BPJ7kwv5YvGiuE3Pgwo9XJFITlO3uCanZ7mWpTapN
qXtTB1K/S+m6UjiWVKWSQP1qdcnkcDpUSuUMUyqVTCnVDicc47MRymSlsx4zUgQj7R5djsudPpZT
WtAGC7ZU+jcAqySOwHf6DhnGVgDY1Mih73MqIBzCrnggnzHYQmAZWPhZ5JLFcr7cGMM6Le7JazYx
QjURD3600pFRab98job/wfRjcyKhlw5Pv/uS2kX1adf5ttqrFIx0MFioxB/Q9/gxr43qvN6Rbyk1
X6tyOSBVxc9mEqdeePel2sZ4ARTjlNKlovZOANd8WQd9kV6DP4YcJgu8cegSaYGiLlJXGOG9EUqn
sMlv3VvW6VzWrHSKvNQHYWKCY8dHINv39w4XTAqdec0eBNOYe9mKP759trlzsUFdr4p11bV2zGe6
4E37+KWNOg1XUx2btHyyrPuREaDRpWip3PjPogk6aLC1NJBLX/5vj9P/7OGSYzvknzxIZiSJSIbB
v1L+x47y/3Vk5X/qKP9HRx28i9cO/yHXicaBr388mgBvYk1Ek8DjMQX+uHQamg7/ajZLjgH0wL+b
zUXnwD+4PSMPhniXsdxSED/zrK7p3b0TkzOXr1x6SXr6qpULL/o/AEYoa80KZW5kc3RyZWFtCmVu
ZG9iago1MiAwIG9iagoxNjcyOQplbmRvYmoKMTEgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5
cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvSEdQSFpDK0NvdXJpZXItQm9sZCAvRm9udERlc2NyaXB0
b3IKNTMgMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDYwIC9MYXN0
Q2hhciAxMTYgL1dpZHRocyBbIDYwMAowIDYwMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjYwMCAwIDAgMCAwIDAgNjAw
IDYwMCA2MDAgMCAwIDYwMCA2MDAgMCA2MDAgMCAwIDYwMCAwIDYwMCBdID4+CmVuZG9iago1MyAw
IG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9IR1BIWkMrQ291cmllci1C
b2xkIC9GbGFncyAzMiAvRm9udEJCb3gKWy02NTYgLTQwMyAxMDc0IDExMTldIC9JdGFsaWNBbmds
ZSAwIC9Bc2NlbnQgNzU0IC9EZXNjZW50IC0yNDYgL0NhcEhlaWdodAo1OTUgL1N0ZW1WIDEyNiAv
WEhlaWdodCA0NjIgL1N0ZW1IIDEwOCAvTWF4V2lkdGggODIzIC9Gb250RmlsZTIgNTQgMCBSID4+
CmVuZG9iago1NCAwIG9iago8PCAvTGVuZ3RoIDU1IDAgUiAvTGVuZ3RoMSA0NzEyIC9GaWx0ZXIg
L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa1Ye2yb1RU/159faVzHThMnjZPUbmLn4TiO36+0zcNO
06aU0PCwoz5Im6QpJE1JW9ptVEuBiiqFDm1QqATTeKiaYH8ExCYnAQESoG3AFhhtN5VpQtuYOrGO
td1UWOvsdz47qUkr/tonHd9zz73fveec3znn3s/7xvYP0FIaJ4m6e/v2DJL8GPehubxjpG9Ppi89
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
ZG9iagoxMiAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250
IC9PSkFXVEorQ291cmllciAvRm9udERlc2NyaXB0b3IKNTYgMCBSIC9FbmNvZGluZyAvTWFjUm9t
YW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMTkgL1dpZHRocyBbIDYwMAowIDAg
MCAwIDAgMCAwIDYwMCA2MDAgMCAwIDYwMCA2MDAgNjAwIDAgMCAwIDAgNjAwIDAgMCAwIDAgMCAw
IDYwMCA2MDAgNjAwCjAgNjAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2MDAKMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2
MDAgNjAwIDYwMCAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMCAwIDYwMCA2MDAgNjAwCjAgNjAwIDYw
MCBdID4+CmVuZG9iago1NiAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1l
IC9PSkFXVEorQ291cmllciAvRmxhZ3MgMzIgL0ZvbnRCQm94IFstNjU1IC00MDkgMTA2MyAxMDkw
XQovSXRhbGljQW5nbGUgMCAvQXNjZW50IDc1NCAvRGVzY2VudCAtMjQ2IC9DYXBIZWlnaHQgNTk1
IC9TdGVtViA3NiAvWEhlaWdodAo0NjIgL1N0ZW1IIDY3IC9NYXhXaWR0aCA4MjMgL0ZvbnRGaWxl
MiA1NyAwIFIgPj4KZW5kb2JqCjU3IDAgb2JqCjw8IC9MZW5ndGggNTggMCBSIC9MZW5ndGgxIDEy
MzkyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa2aCXBc1Znvz+l7tbSWlnqRWnK7
N/Vyu6W2WnvLlu2xjLxggzFLbMkJ4H0DG7zbYfKMHwEbgzPJkGDjMZmU4xhIJYwwHiPLMJBhCTMT
Jk69xIE3ppipYp1KKCYDhDB2+/3Ovd2tlpj3aupl7PrrnnP69rnnfN//287t7Vt3rBHV4m6hicXL
Vty5Vpj/prwthO3rqzatuNPq6zrXV1ft3B6y+vIjroG1d67bZPVttULIbetu35P7fgn9xOL1a1as
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
CKJGd64Uzh3V2IsrDlV1Wb/UMY7NbqcIbpga77gqJnUZnn5tT3yq7E4k2me7smca29Mt6UbNoRLK
oJEIXd5j2x9MGkF1UnPZyIRDvayHGuQ36O0X6G2axBX1scsk6GOn6jSmyqpUk8g4mZdxEhknkXES
GSeRcRIZJ5FxEhknkXESGSeRcRIZJ5Fx0pSxeo/XhozVj/Ss7FNVX26LE2444YYTbjjhhhNuOOGG
E2444YYTbjjhhhNuOOGGE+48J9xwwm1yYhLzuk3d+QqtCM9Wz1IVv9ViDTx1ekGHX3hzmDPkMaV+
oWjOKFPPqIigNqOLGlOF6kycolElSYhtEurlyMT8bFQdXeXuivJZDChCdSp71UwPZ2hFJaV5htci
fVZy6vXJvL+0wn5Z7iu25fsqEoloovYde3PMiMvKnni90zklNO1H+yoTRjRZ+7UfNLTMaYt2yapg
MNrxL9WGEW12yEvZWDwQ77C9ETaaokGjIaKX6Jcfl6fjAaM9u9w2yCFRgHcIIdtltxoiRzX/8fsA
fgTwn/wLMcaZLSK3fulYz2GE+jVjmN80DIg56HUe0eJqfvy7UFwjFonr+CHw9eIG8SW0vRQSLTPn
lJzDqoJbvZygPLluQf/Smxa0XHXHjq0b1mzNfaI+PQC+DU6A0+Al8EvwNvgYMlMsk+QJGQVdYADc
BFaD7eDr4NvgBDgNXgK/BG+Dj3nppQMPiIIuMABuAqvB9iu5fzxLFNqS4mt8n0PacZ+br9OK7k9N
+HzKhH7rhH7nhP60Cf2+Cf3pE/ozJ/RvndBfMaGvfg1TvL9VE/rIYtzn5m/ai/a3dsLnKvUvno8z
uXH9DRP6t03o3z6hTx4+7vubJ/TvmNDfOqG/bUJ/+4S+yfOi/aiyRfwftAOWlwplbmRzdHJlYW0K
ZW5kb2JqCjU4IDAgb2JqCjcyNTAKZW5kb2JqCjU5IDAgb2JqCihkPz8/P3IwIC0gYWRkIHNoaWZ0
IGFsZ29yaXRobS5wYWdlcykKZW5kb2JqCjYwIDAgb2JqCihNYWMgT1MgWCAxMC4xMi42IFF1YXJ0
eiBQREZDb250ZXh0KQplbmRvYmoKNjEgMCBvYmoKKFBhZ2VzKQplbmRvYmoKNjIgMCBvYmoKKEQ6
MjAxNzA3MjkxNzE4MzFaMDAnMDAnKQplbmRvYmoKMSAwIG9iago8PCAvVGl0bGUgNTkgMCBSIC9Q
cm9kdWNlciA2MCAwIFIgL0NyZWF0b3IgNjEgMCBSIC9DcmVhdGlvbkRhdGUgNjIgMCBSIC9Nb2RE
YXRlCjYyIDAgUiA+PgplbmRvYmoKeHJlZgowIDYzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDA3
MDE5NyAwMDAwMCBuIAowMDAwMDA0MDg4IDAwMDAwIG4gCjAwMDAwMTMyNDQgMDAwMDAgbiAKMDAw
MDAwMDAyMiAwMDAwMCBuIAowMDAwMDA0MDY4IDAwMDAwIG4gCjAwMDAwMDQyMDcgMDAwMDAgbiAK
MDAwMDAxMDcwMyAwMDAwMCBuIAowMDAwMDQwNzY5IDAwMDAwIG4gCjAwMDAwMDc5MzEgMDAwMDAg
biAKMDAwMDAyNzE4OCAwMDAwMCBuIAowMDAwMDU4NTA5IDAwMDAwIG4gCjAwMDAwNjIwMjEgMDAw
MDAgbiAKMDAwMDAxNTAzNyAwMDAwMCBuIAowMDAwMDA0MzYzIDAwMDAwIG4gCjAwMDAwMTQ4NzAg
MDAwMDAgbiAKMDAwMDAxNDYwOCAwMDAwMCBuIAowMDAwMDE0NDQyIDAwMDAwIG4gCjAwMDAwMTQx
ODAgMDAwMDAgbiAKMDAwMDAxNDA1OCAwMDAwMCBuIAowMDAwMDEzOTQ5IDAwMDAwIG4gCjAwMDAw
MTM3MTEgMDAwMDAgbiAKMDAwMDAxMzQ3NSAwMDAwMCBuIAowMDAwMDEzNDI0IDAwMDAwIG4gCjAw
MDAwMTMzODQgMDAwMDAgbiAKMDAwMDAwNDQzOSAwMDAwMCBuIAowMDAwMDA3OTEwIDAwMDAwIG4g
CjAwMDAwMDc5NjcgMDAwMDAgbiAKMDAwMDAxMDY4MiAwMDAwMCBuIAowMDAwMDEyOTkyIDAwMDAw
IG4gCjAwMDAwMTA3MzkgMDAwMDAgbiAKMDAwMDAxMjk3MSAwMDAwMCBuIAowMDAwMDEzMDk5IDAw
MDAwIG4gCjAwMDAwMTMzMzQgMDAwMDAgbiAKMDAwMDAxMzU5NyAwMDAwMCBuIAowMDAwMDEzNjUz
IDAwMDAwIG4gCjAwMDAwMTM4MzMgMDAwMDAgbiAKMDAwMDAxMzg4OSAwMDAwMCBuIAowMDAwMDE0
Mjg0IDAwMDAwIG4gCjAwMDAwMTQzNDAgMDAwMDAgbiAKMDAwMDAxNDU1MiAwMDAwMCBuIAowMDAw
MDE0NzEyIDAwMDAwIG4gCjAwMDAwMTQ3NjggMDAwMDAgbiAKMDAwMDAxNDk4MSAwMDAwMCBuIAow
MDAwMDE1NDgzIDAwMDAwIG4gCjAwMDAwMTU3MzMgMDAwMDAgbiAKMDAwMDAyNzE2NiAwMDAwMCBu
IAowMDAwMDI3NjE2IDAwMDAwIG4gCjAwMDAwMjc4NTQgMDAwMDAgbiAKMDAwMDA0MDc0NyAwMDAw
MCBuIAowMDAwMDQxNDI4IDAwMDAwIG4gCjAwMDAwNDE2NjcgMDAwMDAgbiAKMDAwMDA1ODQ4NyAw
MDAwMCBuIAowMDAwMDU4ODIwIDAwMDAwIG4gCjAwMDAwNTkwNjAgMDAwMDAgbiAKMDAwMDA2MjAw
MCAwMDAwMCBuIAowMDAwMDYyNDI5IDAwMDAwIG4gCjAwMDAwNjI2NjIgMDAwMDAgbiAKMDAwMDA3
MDAwMyAwMDAwMCBuIAowMDAwMDcwMDI0IDAwMDAwIG4gCjAwMDAwNzAwNzggMDAwMDAgbiAKMDAw
MDA3MDEzMSAwMDAwMCBuIAowMDAwMDcwMTU1IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNjMg
L1Jvb3QgMzMgMCBSIC9JbmZvIDEgMCBSIC9JRCBbIDw2YzBhMDU1MzQ0MTAzYzFkOWE2ZWZjYWJm
M2RkYjU1ZT4KPDZjMGEwNTUzNDQxMDNjMWQ5YTZlZmNhYmYzZGRiNTVlPiBdID4+CnN0YXJ0eHJl
Zgo3MDMwMgolJUVPRgo=
------=_Part_2779_651351720.1501348741489--

.


Author: Bryce Glover <randomdsdevel@gmail.com>
Date: Sat, 29 Jul 2017 22:56:39 -0400
Raw View
--Apple-Mail=_81AC97CD-9950-4988-9B14-10761E02E597
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"

Dear Mr. Raviv,=20

     Here are a thread lurker=E2=80=99s comments on your proposal.  First, =
your first footnote reads: =20

> =C2=B9 Technically, in some cases std::move can be used with reverse iter=
ators to implement a shift of elements forward, but not in all cases and it=
 is also less efficient, see https://groups.google.com/a/isocpp.org/d/msg/s=
td-proposals/I76om68B3t0/25bGu7O6AwAj <https://groups.google.com/a/isocpp.o=
rg/d/msg/std-proposals/I76om68B3t0/25bGu7O6AwAj> and https://groups.google.=
com/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ <https://grou=
ps.google.com/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ>. =
=20

Within this statement, the part saying, =E2=80=9Cstd::move can be used with=
 reverse iterators to implement a shift of elements forward,=E2=80=9D shoul=
d either read, =E2=80=9Cstd::move can be used with reverse iterators to imp=
lement a shift of elements backward,=E2=80=9D (emphasis added by me) or, =
=E2=80=9Cstd::move_backwards can be used with reverse iterators to implemen=
t a shift of elements forward,=E2=80=9D (emphasis here also added by me,) a=
s only one of these alternatives could render the sentence self-consistent =
with both itself and the rest of your document.  Also, your use of =E2=80=
=98in some cases=E2=80=99 should be followed by a comma, though I acknowled=
ge that two comma-suffixed dependent <https://en.wikipedia.org/wiki/Depende=
nt_clause> relative clauses <https://en.wikipedia.org/wiki/Relative_clause>=
 (at least, I think that=E2=80=99s what they=E2=80=99re called; you can cor=
rect me if my grammar=E2=80=99s off) coming one after another at the beginn=
ing of a sentence can read somewhat awkwardly.  A reasonable way around tha=
t stylistic issue would be to keep =E2=80=99Technically, =E2=80=A6=E2=80=99=
 at the beginning of the sentence, but move =E2=80=98in some cases=E2=80=99=
 later on within it=E2=80=89=E2=80=94=E2=80=89specifically, between =E2=80=
=98can=E2=80=99 and =E2=80=98be=E2=80=99 such that the resulting sentence f=
ragment would, properly using commas as delimiters, read as, =E2=80=9C=E2=
=80=A6, std::move can, in some cases, be used=E2=80=A6.=E2=80=9D  (If the t=
hought of splitting infinitives brings you distaste, I can explain myself: =
 it turns out that the validity of the rule against doing so is actually a =
matter of dispute <https://en.wikipedia.org/wiki/West_Germanic_languages>.)=
 =20
     Second, you might wish to reevaluate your use of fonts:  some function=
 names referenced within particular sentences are not in code font when the=
y should be.  Other than these concerns and those parts of your proposal wh=
ich you have yet to fill in, the document hosting it looks good so far. =20

Regards,=20
     Bryce Glover
     RandomDSdevel@gmail.com

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/344B1400-86F7-4D11-A7B0-ABB44D5AF397%40gmail.com=
..

--Apple-Mail=_81AC97CD-9950-4988-9B14-10761E02E597
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="UTF-8"

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div class=3D"">De=
ar Mr. Raviv,&nbsp;</div><div class=3D""><br class=3D""></div><div class=3D=
"">&nbsp; &nbsp; &nbsp;Here are a thread lurker=E2=80=99s comments on your =
proposal. &nbsp;First, your first footnote reads: &nbsp;</div><div class=3D=
""><br class=3D""></div><div class=3D""><blockquote type=3D"cite" class=3D"=
">=C2=B9 Technically, in some cases std::move can be used with reverse iter=
ators to implement a shift of elements forward, but not in all cases and it=
 is also less efficient, see <a href=3D"https://groups.google.com/a/isocpp.=
org/d/msg/std-proposals/I76om68B3t0/25bGu7O6AwAj" class=3D"">https://groups=
..google.com/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/25bGu7O6AwAj</a>&n=
bsp;and <a href=3D"https://groups.google.com/a/isocpp.org/d/msg/std-proposa=
ls/I76om68B3t0/SPTeZdofAQAJ" class=3D"">https://groups.google.com/a/isocpp.=
org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ</a>. &nbsp;</blockquote></=
div><br class=3D""><div class=3D"">Within this statement, the part saying, =
=E2=80=9Cstd::move can be used with reverse iterators to implement a shift =
of elements forward,=E2=80=9D should either read, =E2=80=9Cstd::move can be=
 used with reverse iterators to implement a shift of elements <i class=3D""=
>backward</i>,=E2=80=9D (emphasis added by me) or, =E2=80=9Cstd::move<i cla=
ss=3D"">_backwards</i>&nbsp;can be used with reverse iterators to implement=
 a shift of elements forward,=E2=80=9D (emphasis here also added by me,) as=
 only one of these alternatives could render the sentence self-consistent w=
ith both itself and the rest of your document. &nbsp;Also, your use of =E2=
=80=98in some cases=E2=80=99 should be followed by a comma, though I acknow=
ledge that two comma-suffixed&nbsp;<a href=3D"https://en.wikipedia.org/wiki=
/Dependent_clause" class=3D"">dependent</a>&nbsp;<a href=3D"https://en.wiki=
pedia.org/wiki/Relative_clause" class=3D"">relative clauses</a>&nbsp;(at le=
ast, I <i class=3D"">think</i>&nbsp;that=E2=80=99s what they=E2=80=99re cal=
led; you can correct me if my grammar=E2=80=99s off) coming one after anoth=
er at the beginning of a sentence can read somewhat awkwardly. &nbsp;A reas=
onable way around that stylistic issue would be to keep =E2=80=99Technicall=
y, =E2=80=A6=E2=80=99 at the beginning of the sentence, but move =E2=80=98i=
n some cases=E2=80=99 later on within it=E2=80=89=E2=80=94=E2=80=89specific=
ally, between =E2=80=98can=E2=80=99 and =E2=80=98be=E2=80=99 such that the =
resulting sentence fragment would, properly using commas as delimiters, rea=
d as, =E2=80=9C=E2=80=A6, std::move can, in some cases, be used=E2=80=A6.=
=E2=80=9D &nbsp;(If the thought of splitting infinitives brings you distast=
e, I can explain myself: &nbsp;it turns out that the validity of the rule a=
gainst doing so is actually&nbsp;<a href=3D"https://en.wikipedia.org/wiki/W=
est_Germanic_languages" class=3D"">a matter of dispute</a>.) &nbsp;</div><d=
iv class=3D"">&nbsp; &nbsp; &nbsp;Second, you might wish to reevaluate your=
 use of fonts: &nbsp;some function names referenced within particular sente=
nces are not in code font when they should be. &nbsp;Other than these conce=
rns and those parts of your proposal which you have yet to fill in, the doc=
ument hosting it looks good so far. &nbsp;</div><div class=3D""><br class=
=3D""></div><div class=3D"">
<div style=3D"color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; t=
ext-align: start; text-indent: 0px; text-transform: none; white-space: norm=
al; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-w=
rap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-=
space;" class=3D""><div style=3D"color: rgb(0, 0, 0); letter-spacing: norma=
l; orphans: auto; text-align: start; text-indent: 0px; text-transform: none=
; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke=
-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-=
break: after-white-space;" class=3D""><div style=3D"color: rgb(0, 0, 0); le=
tter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; t=
ext-transform: none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div class=3D"">Re=
gards,&nbsp;</div><div class=3D"">&nbsp; &nbsp; &nbsp;Bryce Glover</div><di=
v class=3D"">&nbsp; &nbsp; &nbsp;<a href=3D"mailto:RandomDSdevel@gmail.com"=
 class=3D"">RandomDSdevel@gmail.com</a></div></div></div></div></div></body=
></html>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/344B1400-86F7-4D11-A7B0-ABB44D5AF397%=
40gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/344B1400-86F7-4D11-A7B0-ABB44D5AF397%=
40gmail.com</a>.<br />

--Apple-Mail=_81AC97CD-9950-4988-9B14-10761E02E597--

.


Author: Bryce Glover <randomdsdevel@gmail.com>
Date: Sun, 30 Jul 2017 18:20:01 -0400
Raw View
--Apple-Mail=_1A90F565-34E7-4C36-B3D6-7A0E138EE4B8
Content-Type: text/plain; charset="UTF-8"

     Whoops, I forgot to mention one last thing about the sentence I had the most comments on in my last e-mail that it starts to turn into a run-on sentence at its end.  I can comment exactly on how you might fix that, too, if you like.

Cheers,
     Bryce Glover
     RandomDSdevel@gmail.com

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/0053987C-AFAE-45BB-A947-94CF53045FA8%40gmail.com.

--Apple-Mail=_1A90F565-34E7-4C36-B3D6-7A0E138EE4B8
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="UTF-8"

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dus-ascii"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode=
: space; -webkit-line-break: after-white-space;" class=3D""><div class=3D""=
>&nbsp; &nbsp; &nbsp;<i class=3D"">Whoops</i>, I forgot to mention one last=
 thing about the sentence I had the most comments on in my last e-mail that=
 it starts to turn into a run-on sentence at its end. &nbsp;I can comment e=
xactly on how you might fix that, too, if you like. &nbsp;</div><br class=
=3D""><div class=3D"">
<div style=3D"color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; t=
ext-align: start; text-indent: 0px; text-transform: none; white-space: norm=
al; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-w=
rap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-=
space;" class=3D""><div style=3D"color: rgb(0, 0, 0); letter-spacing: norma=
l; orphans: auto; text-align: start; text-indent: 0px; text-transform: none=
; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke=
-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-=
break: after-white-space;" class=3D""><div style=3D"color: rgb(0, 0, 0); le=
tter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; t=
ext-transform: none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div class=3D"">Ch=
eers,&nbsp;</div><div class=3D"">&nbsp; &nbsp; &nbsp;Bryce Glover</div><div=
 class=3D"">&nbsp; &nbsp; &nbsp;<a href=3D"mailto:RandomDSdevel@gmail.com" =
class=3D"">RandomDSdevel@gmail.com</a></div></div></div></div></div></body>=
</html>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/0053987C-AFAE-45BB-A947-94CF53045FA8%=
40gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/0053987C-AFAE-45BB-A947-94CF53045FA8%=
40gmail.com</a>.<br />

--Apple-Mail=_1A90F565-34E7-4C36-B3D6-7A0E138EE4B8--

.


Author: Bryce Glover <randomdsdevel@gmail.com>
Date: Thu, 10 Aug 2017 21:08:11 -0400
Raw View
--Apple-Mail=_043565F1-B467-4D2E-807F-427BCB55FD96
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"


> On Aug 10, 2017, at 4:04 AM, Dan Raviv <dan@soundradix.com> wrote:
>=20
> Hi Bryce,
>=20
> Thanks for the feedback! =E2=80=A6

     You=E2=80=99re welcome! =20

> =E2=80=A6Comments inline.
>=20
> =E2=8B=AE

     Mine will be, too, then. =20

> =E2=8B=AE
>=20
> On Sun, Jul 30, 2017 at 5:56 AM, Bryce Glover <randomdsdevel@gmail.com <m=
ailto:randomdsdevel@gmail.com>> wrote:
> Dear Mr. Raviv,=20
>=20
>      Here are a thread lurker=E2=80=99s comments on your proposal.  First=
, your first footnote reads: =20
>=20
>> =C2=B9 Technically, in some cases std::move can be used with reverse ite=
rators to implement a shift of elements forward, but not in all cases and i=
t is also less efficient, see https://groups.google.com/a/isocpp.org/d/msg/=
std-proposals/I76om68B3t0/25bGu7O6AwAj <https://groups.google.com/a/isocpp.=
org/d/msg/std-proposals/I76om68B3t0/25bGu7O6AwAj> and https://groups.google=
..com/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ <https://gro=
ups.google.com/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ>. =
=20
>=20
> Within this statement, the part saying, =E2=80=9Cstd::move can be used wi=
th reverse iterators to implement a shift of elements forward,=E2=80=9D sho=
uld either read, =E2=80=9Cstd::move can be used with reverse iterators to i=
mplement a shift of elements backward,=E2=80=9D (emphasis added by me) or, =
=E2=80=9Cstd::move_backwards can be used with reverse iterators to implemen=
t a shift of elements forward,=E2=80=9D (emphasis here also added by me,) a=
s only one of these alternatives could render the sentence self-consistent =
with both itself and the rest of your document.
>=20
> Either you got it backwards (no pun intended), =E2=80=A6

     No worries!  I often appreciate a good pun. =20

> =E2=80=A6or I did - in any case, this proves the proposal point of std::m=
ove[_backwards] being too confusing for implementing shift, which is great =
:)
>=20
> =E2=80=A6


     Glad to be of assistance, then. =20

> =E2=80=A6
>=20
> Take a look at my sample implementation <https://github.com/danra/shift_p=
roposal> - you'll see that, assuming non-reverse iterators are passed to sh=
ift(), std::move_backward is used for implementing a right (forward) shift =
of elements, and std::move is used for implementing a left (backward) shift=
 of elements.
>=20
> It can=E2=80=99t work correctly the other way around - if you try using s=
td::move for implementing a right (forward) shift (with regular iterators) =
then the first moved element is going to overwrite an element which still h=
asn't been shifted.
>=20
> =E2=8B=AE


     Oooo-h:  whoops, I tend to think of moving elements within data struct=
ures in terms of a circular or non-circular shifting operation, depending o=
n which kind of wrapping behavior I want.  This probably comes from how I m=
ost likely haven=E2=80=99t written nearly as much code as most of the peopl=
e participating in discussion threads here on std-proposals and was conside=
ring things based on a mental model of a diagram of a contiguous data struc=
ture, such as a simple array or multiset, drawn/written down on paper.  Now=
 that it=E2=80=99s clicked that the directionality of the move operations i=
nvolved in shifting elements around a data structure like this depends, at =
least in name, on how one iterates through it, things make more of a certai=
n kind of sense.  I=E2=80=99m still processing this miniature revelation, t=
hough, so the logic behind this still seems=E2=80=A6a bit mind-bending to m=
e, to be frank. =20

> =E2=8B=AE
> =20
>  Also, your use of =E2=80=98in some cases=E2=80=99 should be followed by =
a comma, though I acknowledge that two comma-suffixed dependent <https://en=
..wikipedia.org/wiki/Dependent_clause> relative clauses <https://en.wikipedi=
a.org/wiki/Relative_clause> (at least, I think that=E2=80=99s what they=E2=
=80=99re called; you can correct me if my grammar=E2=80=99s off) coming one=
 after another at the beginning of a sentence can read somewhat awkwardly. =
 A reasonable way around that stylistic issue would be to keep =E2=80=99Tec=
hnically, =E2=80=A6=E2=80=99 at the beginning of the sentence, but move =E2=
=80=98in some cases=E2=80=99 later on within it=E2=80=89=E2=80=94=E2=80=89s=
pecifically, between =E2=80=98can=E2=80=99 and =E2=80=98be=E2=80=99 such th=
at the resulting sentence fragment would, properly using commas as delimite=
rs, read as, =E2=80=9C=E2=80=A6, std::move can, in some cases, be used=E2=
=80=A6.=E2=80=9D  (If the thought of splitting infinitives brings you dista=
ste, I can explain myself:  it turns out that the validity of the rule agai=
nst doing so is actually a matter of dispute <https://en.wikipedia.org/wiki=
/West_Germanic_languages>.) =20
>=20
> How about this instead?
> Technically, std::move can, in some cases, be used with reverse iterators=
 to implement a shift of elements forward, but not in all cases. It is also=
 less efficient; see https://groups.google.com/a/isocpp.org/d/msg/std-propo=
sals/I76om68B3t0/25bGu7O6AwAJ <https://groups.google.com/a/isocpp.org/d/msg=
/std-proposals/I76om68B3t0/25bGu7O6AwAJ> and https://groups.google.com/a/is=
ocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ <https://groups.googl=
e.com/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ>.
> =20
> =E2=8B=AE


     =E2=80=98In some cases=E2=80=99 usually implies =E2=80=98but not in al=
l cases,=E2=80=99 but, yeah, that reads well enough to me. =20

> =E2=8B=AE
>=20
>      Second, you might wish to reevaluate your use of fonts:  some functi=
on names referenced within particular sentences are not in code font when t=
hey should be. =20
>=20
> Done.
>=20
> =E2=8B=AE

     Again, glad to be of service. =20

> =E2=8B=AE
> =20
> Other than these concerns and those parts of your proposal which you have=
 yet to fill in, the document hosting it looks good so far. =20
>=20
> Regards,=20
>      Bryce Glover
>      RandomDSdevel@gmail.com <mailto:RandomDSdevel@gmail.com>
>=20
> Thanks!
> Dan=20
>=20
> --=20
> You received this message because you are subscribed to a topic in the Go=
ogle Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/isocpp.=
org/d/topic/std-proposals/I76om68B3t0/unsubscribe <https://groups.google.co=
m/a/isocpp.org/d/topic/std-proposals/I76om68B3t0/unsubscribe>.
> To unsubscribe from this group and all its topics, send an email to std-p=
roposals+unsubscribe@isocpp.org <mailto:std-proposals+unsubscribe@isocpp.or=
g>.
> To post to this group, send email to std-proposals@isocpp.org <mailto:std=
-proposals@isocpp.org>.
> To view this discussion on the web visit https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/344B1400-86F7-4D11-A7B0-ABB44D5AF397%40gmail.c=
om <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/344B1400-8=
6F7-4D11-A7B0-ABB44D5AF397%40gmail.com?utm_medium=3Demail&utm_source=3Dfoot=
er>.

     Again, you=E2=80=99re very welcome. =20

Regards,=20
     Bryce Glover
     RandomDSdevel@gmail.com

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/B003EA60-F9B0-480A-9C1B-F40F2881621B%40gmail.com=
..

--Apple-Mail=_043565F1-B467-4D2E-807F-427BCB55FD96
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="UTF-8"

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><br class=3D""><di=
v><blockquote type=3D"cite" class=3D""><div class=3D"">On Aug 10, 2017, at =
4:04 AM, Dan Raviv &lt;<a href=3D"mailto:dan@soundradix.com" class=3D"">dan=
@soundradix.com</a>&gt; wrote:</div><br class=3D"Apple-interchange-newline"=
><div class=3D""><div dir=3D"ltr" style=3D"font-family: Helvetica; font-siz=
e: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal=
; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0p=
x; text-transform: none; white-space: normal; widows: auto; word-spacing: 0=
px; -webkit-text-stroke-width: 0px;" class=3D"">Hi Bryce,<div class=3D""><b=
r class=3D""></div><div class=3D"">Thanks for the feedback! =E2=80=A6</div>=
</div></div></blockquote><div><br class=3D""></div><div>&nbsp; &nbsp; &nbsp=
;You=E2=80=99re welcome! &nbsp;</div><br class=3D""><blockquote type=3D"cit=
e" class=3D""><div class=3D""><div dir=3D"ltr" style=3D"font-family: Helvet=
ica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-w=
eight: normal; letter-spacing: normal; orphans: auto; text-align: start; te=
xt-indent: 0px; text-transform: none; white-space: normal; widows: auto; wo=
rd-spacing: 0px; -webkit-text-stroke-width: 0px;" class=3D""><div class=3D"=
">=E2=80=A6Comments inline.</div></div></div></blockquote><div><blockquote =
type=3D"cite" class=3D""><br class=3D""></blockquote><blockquote type=3D"ci=
te" class=3D"">=E2=8B=AE</blockquote><br class=3D""></div><div>&nbsp; &nbsp=
; &nbsp;Mine will be, too, then. &nbsp;</div><div><br class=3D""></div><blo=
ckquote type=3D"cite" class=3D"">=E2=8B=AE</blockquote><blockquote type=3D"=
cite" class=3D""><div class=3D""><div dir=3D"ltr" style=3D"font-family: Hel=
vetica; font-size: 14px; font-style: normal; font-variant-caps: normal; fon=
t-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;" class=3D""><div class=
=3D"gmail_extra"><br class=3D""><div class=3D"gmail_quote">On Sun, Jul 30, =
2017 at 5:56 AM, Bryce Glover<span class=3D"Apple-converted-space">&nbsp;</=
span><span dir=3D"ltr" class=3D"">&lt;<a href=3D"mailto:randomdsdevel@gmail=
..com" target=3D"_blank" class=3D"">randomdsdevel@gmail.com</a>&gt;</span><s=
pan class=3D"Apple-converted-space">&nbsp;</span>wrote:<br class=3D""><bloc=
kquote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-lef=
t-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 20=
4); padding-left: 1ex;"><div style=3D"word-wrap: break-word;" class=3D""><d=
iv class=3D"">Dear Mr. Raviv,&nbsp;</div><div class=3D""><br class=3D""></d=
iv><div class=3D"">&nbsp; &nbsp; &nbsp;Here are a thread lurker=E2=80=99s c=
omments on your proposal.&nbsp; First, your first footnote reads: &nbsp;</d=
iv><div class=3D""><br class=3D""></div><div class=3D""><blockquote type=3D=
"cite" class=3D"">=C2=B9 Technically, in some cases std::move can be used w=
ith reverse iterators to implement a shift of elements forward, but not in =
all cases and it is also less efficient, see<span class=3D"Apple-converted-=
space">&nbsp;</span><a href=3D"https://groups.google.com/a/isocpp.org/d/msg=
/std-proposals/I76om68B3t0/25bGu7O6AwAj" target=3D"_blank" class=3D"">https=
://groups.google.com/a/<wbr class=3D"">isocpp.org/d/msg/std-<wbr class=3D""=
>proposals/I76om68B3t0/<wbr class=3D"">25bGu7O6AwAj</a>&nbsp;and<span class=
=3D"Apple-converted-space">&nbsp;</span><a href=3D"https://groups.google.co=
m/a/isocpp.org/d/msg/std-proposals/I76om68B3t0/SPTeZdofAQAJ" target=3D"_bla=
nk" class=3D"">https://groups.google.com/a/<wbr class=3D"">isocpp.org/d/msg=
/std-<wbr class=3D"">proposals/I76om68B3t0/<wbr class=3D"">SPTeZdofAQAJ</a>=
.. &nbsp;</blockquote></div><br class=3D""><div class=3D"">Within this state=
ment, the part saying, =E2=80=9Cstd::move can be used with reverse iterator=
s to implement a shift of elements forward,=E2=80=9D should either read, =
=E2=80=9Cstd::move can be used with reverse iterators to implement a shift =
of elements<span class=3D"Apple-converted-space">&nbsp;</span><i class=3D""=
>backward</i>,=E2=80=9D (emphasis added by me) or, =E2=80=9Cstd::move<i cla=
ss=3D"">_backwards</i>&nbsp;can be used with reverse iterators to implement=
 a shift of elements forward,=E2=80=9D (emphasis here also added by me,) as=
 only one of these alternatives could render the sentence self-consistent w=
ith both itself and the rest of your document.</div></div></blockquote><div=
 class=3D""><br class=3D""></div><div class=3D"">Either you got it backward=
s (no pun intended), =E2=80=A6</div></div></div></div></div></blockquote><d=
iv><br class=3D""></div><div>&nbsp; &nbsp; &nbsp;No worries! &nbsp;I often =
appreciate a good pun. &nbsp;</div><br class=3D""><blockquote type=3D"cite"=
 class=3D""><div class=3D""><div dir=3D"ltr" style=3D"font-family: Helvetic=
a; font-size: 14px; font-style: normal; font-variant-caps: normal; font-wei=
ght: 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;" class=3D""><div class=3D"gm=
ail_extra"><div class=3D"gmail_quote"><div class=3D"">=E2=80=A6or I did - i=
n any case, this proves the proposal point of std::move[_backwards] being t=
oo confusing for implementing shift, which is great :)</div></div></div></d=
iv></div></blockquote><div><blockquote type=3D"cite" class=3D""><br class=
=3D""></blockquote><blockquote type=3D"cite" class=3D"">=E2=80=A6</blockquo=
te></div><div><br class=3D""></div><div>&nbsp; &nbsp; &nbsp;Glad to be of a=
ssistance, then. &nbsp;</div><div><br class=3D""></div><blockquote type=3D"=
cite" class=3D"">=E2=80=A6</blockquote><blockquote type=3D"cite" class=3D""=
><div class=3D""><div dir=3D"ltr" style=3D"font-family: Helvetica; font-siz=
e: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal=
; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0p=
x; text-transform: none; white-space: normal; widows: auto; word-spacing: 0=
px; -webkit-text-stroke-width: 0px;" class=3D""><div class=3D"gmail_extra">=
<div class=3D"gmail_quote"><div class=3D""><br class=3D""></div><div class=
=3D"">Take a look at my<span class=3D"Apple-converted-space">&nbsp;</span><=
a href=3D"https://github.com/danra/shift_proposal" class=3D"">sample implem=
entation</a><span class=3D"Apple-converted-space">&nbsp;</span>- you'll see=
 that, assuming non-reverse iterators are passed to shift(), std::move_back=
ward is used for implementing a right (forward) shift of elements, and std:=
:move is used for implementing a left (backward) shift of elements.</div><d=
iv class=3D""><br class=3D""></div><div class=3D"">It can=E2=80=99t work co=
rrectly the other way around - if you try using std::move for implementing =
a right (forward) shift (with regular iterators) then the first moved eleme=
nt is going to overwrite an element which still hasn't been shifted.</div><=
/div></div></div></div></blockquote><div><blockquote type=3D"cite" class=3D=
""><br class=3D""></blockquote><blockquote type=3D"cite" class=3D"">=E2=8B=
=AE</blockquote></div><div><br class=3D""></div><div>&nbsp; &nbsp; &nbsp;<i=
 class=3D"">Oooo</i>-h: &nbsp;whoops, I tend to think of moving elements wi=
thin data structures in terms of a circular or non-circular shifting operat=
ion, depending on which kind of wrapping behavior I want. &nbsp;This probab=
ly comes from how I most likely haven=E2=80=99t written <i class=3D"">nearl=
y</i>&nbsp;as much code as most of the people participating in discussion t=
hreads here on std-proposals and was considering things based on a mental m=
odel of a diagram of a contiguous data structure, such as a simple array or=
 multiset, drawn/written down on paper. &nbsp;Now that it=E2=80=99s clicked=
 that the directionality of the move operations involved in shifting elemen=
ts around a data structure like this depends, at least in name, on how one =
<i class=3D"">iterates</i>&nbsp;through it, things make more of a certain k=
ind of sense. &nbsp;I=E2=80=99m still processing this miniature revelation,=
 though, so the logic behind this&nbsp;<i class=3D"">still</i>&nbsp;seems=
=E2=80=A6a <i class=3D"">bit</i>&nbsp;mind-bending to me, to be frank. &nbs=
p;</div><div><br class=3D""></div><blockquote type=3D"cite" class=3D"">=E2=
=8B=AE</blockquote><blockquote type=3D"cite" class=3D""><div class=3D""><di=
v dir=3D"ltr" style=3D"font-family: Helvetica; font-size: 14px; font-style:=
 normal; font-variant-caps: normal; font-weight: normal; letter-spacing: no=
rmal; orphans: auto; text-align: start; text-indent: 0px; text-transform: n=
one; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-str=
oke-width: 0px;" class=3D""><div class=3D"gmail_extra"><div class=3D"gmail_=
quote"><div class=3D"">&nbsp;</div><blockquote class=3D"gmail_quote" style=
=3D"margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: s=
olid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style=
=3D"word-wrap: break-word;" class=3D""><div class=3D"">&nbsp;Also, your use=
 of =E2=80=98in some cases=E2=80=99 should be followed by a comma, though I=
 acknowledge that two comma-suffixed&nbsp;<a href=3D"https://en.wikipedia.o=
rg/wiki/Dependent_clause" target=3D"_blank" class=3D"">dependent</a>&nbsp;<=
a href=3D"https://en.wikipedia.org/wiki/Relative_clause" target=3D"_blank" =
class=3D"">relat<wbr class=3D"">ive clauses</a>&nbsp;(at least, I<span clas=
s=3D"Apple-converted-space">&nbsp;</span><i class=3D"">think</i>&nbsp;that=
=E2=80=99s what they=E2=80=99re called; you can correct me if my grammar=E2=
=80=99s off) coming one after another at the beginning of a sentence can re=
ad somewhat awkwardly.&nbsp; A reasonable way around that stylistic issue w=
ould be to keep =E2=80=99Technically, =E2=80=A6=E2=80=99 at the beginning o=
f the sentence, but move =E2=80=98in some cases=E2=80=99 later on within it=
=E2=80=89=E2=80=94=E2=80=89specifically, between =E2=80=98can=E2=80=99 and =
=E2=80=98be=E2=80=99 such that the resulting sentence fragment would, prope=
rly using commas as delimiters, read as, =E2=80=9C=E2=80=A6, std::move can,=
 in some cases, be used=E2=80=A6.=E2=80=9D &nbsp;(If the thought of splitti=
ng infinitives brings you distaste, I can explain myself: &nbsp;it turns ou=
t that the validity of the rule against doing so is actually&nbsp;<a href=
=3D"https://en.wikipedia.org/wiki/West_Germanic_languages" target=3D"_blank=
" class=3D"">a matter of dispute</a>.) &nbsp;</div></div></blockquote><div =
class=3D""><br class=3D""></div><div class=3D"">How about this instead?</di=
v><div class=3D""><div style=3D"margin: 0px; font-size: 11px; line-height: =
normal; font-family: Helvetica;" class=3D""><span style=3D"-webkit-font-ker=
ning: none;" class=3D"">Technically, std::move can, in some cases, be used =
with reverse iterators to implement a shift of elements forward, but not in=
 all cases. It is also less efficient; see<span class=3D"Apple-converted-sp=
ace">&nbsp;</span><a href=3D"https://groups.google.com/a/isocpp.org/d/msg/s=
td-proposals/I76om68B3t0/25bGu7O6AwAJ" class=3D""><span style=3D"-webkit-fo=
nt-kerning: none;" class=3D"">https://groups.google.com/a/isocpp.org/d/msg/=
std-proposals/I76om68B3t0/25bGu7O6AwAJ</span></a><span class=3D"Apple-conve=
rted-space">&nbsp;</span>and<span class=3D"Apple-converted-space">&nbsp;</s=
pan><a href=3D"https://groups.google.com/a/isocpp.org/d/msg/std-proposals/I=
76om68B3t0/SPTeZdofAQAJ" class=3D""><span style=3D"-webkit-font-kerning: no=
ne;" class=3D"">https://groups.google.com/a/isocpp.org/d/msg/std-proposals/=
I76om68B3t0/SPTeZdofAQAJ</span></a>.</span></div></div><div class=3D"">&nbs=
p;</div></div></div></div></div></blockquote><div><blockquote type=3D"cite"=
 class=3D"">=E2=8B=AE</blockquote></div><div><br class=3D""></div><div>&nbs=
p; &nbsp; &nbsp;=E2=80=98In some cases=E2=80=99 usually implies =E2=80=98bu=
t not in all cases,=E2=80=99 but, yeah, that reads well enough to me. &nbsp=
;</div><div><br class=3D""></div><div><blockquote type=3D"cite" class=3D"">=
=E2=8B=AE</blockquote></div><blockquote type=3D"cite" class=3D""><br class=
=3D""></blockquote><blockquote type=3D"cite" class=3D""><div class=3D""><di=
v dir=3D"ltr" style=3D"font-family: Helvetica; font-size: 14px; font-style:=
 normal; font-variant-caps: normal; font-weight: normal; letter-spacing: no=
rmal; orphans: auto; text-align: start; text-indent: 0px; text-transform: n=
one; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-str=
oke-width: 0px;" class=3D""><div class=3D"gmail_extra"><div class=3D"gmail_=
quote"><blockquote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex=
; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(=
204, 204, 204); padding-left: 1ex;"><div style=3D"word-wrap: break-word;" c=
lass=3D""><div class=3D"">&nbsp; &nbsp; &nbsp;Second, you might wish to ree=
valuate your use of fonts: &nbsp;some function names referenced within part=
icular sentences are not in code font when they should be. &nbsp;</div></di=
v></blockquote><div class=3D""><br class=3D""></div><div class=3D"">Done.</=
div></div></div></div></div></blockquote><div><blockquote type=3D"cite" cla=
ss=3D""><br class=3D""></blockquote><blockquote type=3D"cite" class=3D"">=
=E2=8B=AE</blockquote><br class=3D""></div><div>&nbsp; &nbsp; &nbsp;Again, =
glad to be of service. &nbsp;</div><div><br class=3D""></div><blockquote ty=
pe=3D"cite" class=3D"">=E2=8B=AE</blockquote><blockquote type=3D"cite" clas=
s=3D""><div class=3D""><div dir=3D"ltr" style=3D"font-family: Helvetica; fo=
nt-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; orphans: auto; text-align: start; text-inde=
nt: 0px; text-transform: none; white-space: normal; widows: auto; word-spac=
ing: 0px; -webkit-text-stroke-width: 0px;" class=3D""><div class=3D"gmail_e=
xtra"><div class=3D"gmail_quote"><div class=3D"">&nbsp;</div><blockquote cl=
ass=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left-width: =
1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); paddi=
ng-left: 1ex;"><div style=3D"word-wrap: break-word;" class=3D""><div class=
=3D"">Other than these concerns and those parts of your proposal which you =
have yet to fill in, the document hosting it looks good so far. &nbsp;</div=
><div class=3D""><br class=3D""></div><div class=3D""><div style=3D"letter-=
spacing: normal; text-align: start; text-indent: 0px; text-transform: none;=
 white-space: normal; word-spacing: 0px; word-wrap: break-word;" class=3D""=
><div style=3D"letter-spacing: normal; text-align: start; text-indent: 0px;=
 text-transform: none; white-space: normal; word-spacing: 0px; word-wrap: b=
reak-word;" class=3D""><div style=3D"letter-spacing: normal; text-align: st=
art; text-indent: 0px; text-transform: none; white-space: normal; word-spac=
ing: 0px; word-wrap: break-word;" class=3D""><div class=3D"">Regards,&nbsp;=
</div><div class=3D"">&nbsp; &nbsp; &nbsp;Bryce Glover</div><div class=3D""=
>&nbsp; &nbsp; &nbsp;<a href=3D"mailto:RandomDSdevel@gmail.com" target=3D"_=
blank" class=3D"">RandomDSdevel@gmail.com</a></div></div></div></div></div>=
</div></blockquote><div class=3D""><br class=3D""></div><div class=3D"">Tha=
nks!</div><div class=3D"">Dan&nbsp;</div><blockquote class=3D"gmail_quote" =
style=3D"margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-sty=
le: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><span=
 class=3D"gmail-"><div class=3D""><br class=3D"webkit-block-placeholder"></=
div>--<span class=3D"Apple-converted-space">&nbsp;</span><br class=3D"">You=
 received this message because you are subscribed to a topic in the Google =
Groups "ISO C++ Standard - Future Proposals" group.<br class=3D"">To unsubs=
cribe from this topic, visit<span class=3D"Apple-converted-space">&nbsp;</s=
pan><a href=3D"https://groups.google.com/a/isocpp.org/d/topic/std-proposals=
/I76om68B3t0/unsubscribe" target=3D"_blank" class=3D"">https://groups.googl=
e.com/a/<wbr class=3D"">isocpp.org/d/topic/std-<wbr class=3D"">proposals/I7=
6om68B3t0/<wbr class=3D"">unsubscribe</a>.<br class=3D"">To unsubscribe fro=
m this group and all its topics, send an email to<span class=3D"Apple-conve=
rted-space">&nbsp;</span><a href=3D"mailto:std-proposals+unsubscribe@isocpp=
..org" target=3D"_blank" class=3D"">std-proposals+unsubscribe@<wbr class=3D"=
">isocpp.org</a>.<br class=3D"">To post to this group, send email to<span c=
lass=3D"Apple-converted-space">&nbsp;</span><a href=3D"mailto:std-proposals=
@isocpp.org" target=3D"_blank" class=3D"">std-proposals@isocpp.org</a>.<br =
class=3D""></span>To view this discussion on the web visit<span class=3D"Ap=
ple-converted-space">&nbsp;</span><a href=3D"https://groups.google.com/a/is=
ocpp.org/d/msgid/std-proposals/344B1400-86F7-4D11-A7B0-ABB44D5AF397%40gmail=
..com?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank" class=3D=
"">https://groups.google.com/a/<wbr class=3D"">isocpp.org/d/msgid/std-<wbr =
class=3D"">proposals/344B1400-86F7-4D11-<wbr class=3D"">A7B0-ABB44D5AF397%4=
0gmail.com</a>.</blockquote></div></div></div></div></blockquote><br class=
=3D""></div><div>&nbsp; &nbsp; &nbsp;Again, you=E2=80=99re very welcome. &n=
bsp;</div><div><br class=3D""></div><div class=3D"">
<div style=3D"color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; t=
ext-align: start; text-indent: 0px; text-transform: none; white-space: norm=
al; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-w=
rap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-=
space;" class=3D""><div style=3D"color: rgb(0, 0, 0); letter-spacing: norma=
l; orphans: auto; text-align: start; text-indent: 0px; text-transform: none=
; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke=
-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-=
break: after-white-space;" class=3D""><div style=3D"color: rgb(0, 0, 0); le=
tter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; t=
ext-transform: none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div class=3D"">Re=
gards,&nbsp;</div><div class=3D"">&nbsp; &nbsp; &nbsp;Bryce Glover</div><di=
v class=3D"">&nbsp; &nbsp; &nbsp;<a href=3D"mailto:RandomDSdevel@gmail.com"=
 class=3D"">RandomDSdevel@gmail.com</a></div></div></div></div>
</div>
<br class=3D""></body></html>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/B003EA60-F9B0-480A-9C1B-F40F2881621B%=
40gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/B003EA60-F9B0-480A-9C1B-F40F2881621B%=
40gmail.com</a>.<br />

--Apple-Mail=_043565F1-B467-4D2E-807F-427BCB55FD96--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Fri, 18 Aug 2017 16:24:06 -0700 (PDT)
Raw View
------=_Part_2965_1433919928.1503098647401
Content-Type: multipart/alternative;
 boundary="----=_Part_2966_849098603.1503098647401"

------=_Part_2966_849098603.1503098647401
Content-Type: text/plain; charset="UTF-8"

Hi,

Attached an updated proposal draft.

Would appreciate any comments, as well as opinions on any of the listed
open issues.

Thanks!
Dan

On Saturday, July 29, 2017 at 8:19:01 PM UTC+3, Dan Raviv wrote:
>
> Hi,
>
> Attached a proposal draft with reasoning and sample implementation (but
> still no complete design and standard wording).
> Would appreciate any feedback!
>
> Thanks,
> Dan
>
> On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d...@soundradix.com
> wrote:
>>
>> Hi,
>>
>> Would anyone be interested in adding std::shift to <algorithm>?
>>
>> It would be similar to both:
>> - std::rotate, but without moving the head elements back to the tail.
>> This would allow a more efficient implementation and clearer semantics in
>> case rotation is not needed as well as correctness in case rotation is
>> undesired.
>> - <algorithm>'s std::move/std::move_backward (depending on the shift
>> direction).
>>
>> std::shift should probably accommodate both left and right shifts by one
>> of:
>> - giving it either begin() and end(), or rbegin() and rend(), similar to
>> how std::rotate works for both left and right rotations. The advantage is
>> compactness of the implementation.
>> - allowing the shift count parameter to be either positive or negative.
>> The advantage is compactness, though it might not be clear which direction
>> is which - to be consistent with rotate, positive integers should shift to
>> the left.
>> - having std::shift_right and std::shift_left functions. The advantage is
>> clarity when calling the methods, although the same argument could be made
>> for having separate std::rotate_left and std::rotate_right instead of
>> std::rotate, which we don't have.
>>
>> Here's a sample implementation of a shift to the right direction:
>>
>> template<class BidirIt>
>> void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
>> {
>>     std::move_backward(first, last - n, last);
>> }
>>
>> This demonstrates that while std::shift is implementable with
>> std::move/std::move_backward,
>> 1) It isn't immediately clear from the code (at least to my eyes) that
>> this is a shift right, unless you are intimately familiar with
>> std::move_backward.
>> 2) Different calls, either to std::move or to std::move_backward, are
>> required, depending on the shift direction.
>>
>> So, implementing std::shift would allow writing more readable code.
>>
>> Thanks,
>> Dan
>>
>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/e5200d95-68cf-46e3-9eb5-04ffe4c52b4f%40isocpp.org.

------=_Part_2966_849098603.1503098647401
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>Attached an updated proposal draft.=
</div><div><br></div><div>Would appreciate any comments, as well as opinion=
s on any of the listed open issues.</div><div><br></div><div>Thanks!</div><=
div>Dan</div><div><br>On Saturday, July 29, 2017 at 8:19:01 PM UTC+3, Dan R=
aviv wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left=
: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">Hi=
,<div><br></div><div>Attached a proposal draft with reasoning and sample im=
plementation (but still no complete design and standard wording).<div>Would=
 appreciate any feedback!</div><div><br></div><div>Thanks,</div><div>Dan<br=
><br>On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, <a>d...@soundradix.c=
om</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-lef=
t:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<d=
iv><br></div><div>Would anyone be interested in adding std::shift to &lt;al=
gorithm&gt;?=C2=A0</div><div><br></div><div>It would be similar to both:</d=
iv><div>- std::rotate, but without moving the head elements back to the tai=
l. This would allow a more efficient implementation and clearer semantics i=
n case rotation is not needed as well as correctness in case rotation is un=
desired.</div><div>- &lt;algorithm&gt;&#39;s std::move/std::move_backward (=
depending on the shift direction).</div><div><br></div><div>std::shift shou=
ld probably accommodate both left and right shifts by one of:</div><div>- g=
iving it either begin() and end(), or rbegin() and rend(), similar to how s=
td::rotate works for both left and right rotations. The advantage is compac=
tness of the implementation.</div><div>- allowing the shift count parameter=
 to be either positive or negative. The advantage is compactness, though it=
 might not be clear which direction is which - to be consistent with rotate=
, positive integers should shift to the left.<br></div><div><div>- having s=
td::shift_right and std::shift_left functions. The advantage is clarity whe=
n calling the methods, although the same argument could be made for having =
separate std::rotate_left and std::rotate_right instead of std::rotate, whi=
ch we don&#39;t have.</div></div><div><br></div><div>Here&#39;s a sample im=
plementation of a shift to the right direction:</div><br><div style=3D"back=
ground-color:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:b=
reak-word"><code><div><span style=3D"color:#008">template</span><span style=
=3D"color:#660">&lt;</span><span style=3D"color:#008">class</span><span sty=
le=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</span><span st=
yle=3D"color:#660">&gt;</span><span style=3D"color:#000"> <br></span><span =
style=3D"color:#008">void</span><span style=3D"color:#000"> shift_right</sp=
an><span style=3D"color:#660">(</span><span style=3D"color:#606">BidirIt</s=
pan><span style=3D"color:#000"> first</span><span style=3D"color:#660">,</s=
pan><span style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</=
span><span style=3D"color:#000"> </span><span style=3D"color:#008">last</sp=
an><span style=3D"color:#660">,</span><span style=3D"color:#000"> </span><s=
pan style=3D"color:#008">unsigned</span><span style=3D"color:#000"> </span>=
<span style=3D"color:#008">int</span><span style=3D"color:#000"> n </span><=
span style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><spa=
n style=3D"color:#066">1</span><span style=3D"color:#660">)</span><span sty=
le=3D"color:#000"> <br></span><span style=3D"color:#660">{</span><span styl=
e=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::=
</span><span style=3D"color:#000">move_backward</span><span style=3D"color:=
#660">(</span><span style=3D"color:#000">first</span><span style=3D"color:#=
660">,</span><span style=3D"color:#000"> </span><span style=3D"color:#008">=
last</span><span style=3D"color:#000"> </span><span style=3D"color:#660">-<=
/span><span style=3D"color:#000"> n</span><span style=3D"color:#660">,</spa=
n><span style=3D"color:#000"> </span><span style=3D"color:#008">last</span>=
<span style=3D"color:#660">);</span><span style=3D"color:#000"> <br></span>=
<span style=3D"color:#660">}</span><span style=3D"color:#000"><br></span></=
div></code></div><div><br></div><div>This demonstrates that while std::shif=
t is implementable with std::move/std::move_backward,</div><div>1) It isn&#=
39;t immediately clear from the code (at least to my eyes) that this is a s=
hift right, unless you are intimately familiar with std::move_backward.</di=
v><div>2) Different calls, either to std::move or to std::move_backward, ar=
e required, depending on the shift direction.</div><div><br></div><div>So, =
implementing std::shift would allow writing more readable code.</div><div><=
br></div><div>Thanks,</div><div>Dan</div></div></blockquote></div></div></d=
iv></blockquote></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/e5200d95-68cf-46e3-9eb5-04ffe4c52b4f%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/e5200d95-68cf-46e3-9eb5-04ffe4c52b4f=
%40isocpp.org</a>.<br />

------=_Part_2966_849098603.1503098647401--

------=_Part_2965_1433919928.1503098647401
Content-Type: application/pdf; name="shift proposal.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="shift proposal.pdf"
X-Attachment-Id: 3b4329b7-7fb5-417a-a66c-3067b71d8ef9
Content-ID: <3b4329b7-7fb5-417a-a66c-3067b71d8ef9>

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
/o5+OBYM3jywxDq45WKvd98191c++R9acPHCJWLa1z94v7+/ffAaf7t33wUPfEfxA2LxBf72feiB
jplz9z0g9Lfvv0C4QPoPAZ6+8ZY1Hd961k1nn7Xmlu9o7BaxsTXis27s+I7iDrH4RvFZHeKzOsRn
3SjcKD1LfLeOpTNa133H3/oNGy5at+4i9H8BS52f/gplbmRzdHJlYW0KZW5kb2JqCgoxNyAwIG9i
agoxOTU0NwplbmRvYmoKCjE4IDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUv
QkFBQUFBK1RpbWVzLVJvbWFuCi9GbGFncyA0Ci9Gb250QkJveFstMjAzIC00MjggMTcwMCAxMjcy
XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgNzUwCi9EZXNjZW50IC0yNTAKL0NhcEhlaWdodCAxMjcx
Ci9TdGVtViA4MAovRm9udEZpbGUyIDE2IDAgUgo+PgplbmRvYmoKCjE5IDAgb2JqCjw8L0xlbmd0
aCA1MzgvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZTNjpswFIX3PIWX08UI7GtgRooi
pclEyqI/aqYPQMBJkRpAhCzy9vW5x+1IXczow5zrfL62ybeH3WHol/z7PLbHsJhzP3RzuI33uQ3m
FC79kFlnur5d0pP+b6/NlOWx9vi4LeF6GM7japXlP+K72zI/zNOmG0/hU5Z/m7sw98PFPP3cHuPz
8T5Nv8M1DIspsvXadOEc5/nSTF+ba8i16vnQxdf98niOJR+B98cUjNNnS5V27MJtatowN8MlZKui
WJvVfr/OwtD9964WlpzO7a9mjlEbo0Xh/TqyU672YCEL2CvXJbjk+A5ckXW8Jr+BX5jXOV+VXQHe
MOPAn5lR3irLBrwjq8ObcqmZPccxjy04jwXTX5Cx9Bcdp7/UYPo7OFv6ywuY/vIKpr/XWvpXmqF/
XYGTv+bpL1sw/Sus19LfoQ+W/l6d6V/BxyV/1Lrkj7yjv9dx+nv01tG/1Fr6e+Xkj3U5+pdwcKn/
2DuX/OHgkj/W4ujvNUP/OBSZ/qWO07/W30r+yAj9a/RB7MecQv8afRP6O6xF4O8Kq3n6O2X6e+y1
pPODMyD0dzoP/b3m6S/qkPw1k84PnIX+NfZRUv/RW6F/jfk9/T2cvaUbar0jw9kLGb317L+gtz6d
H+yLT/3XeVL/0WdPf48z6elfbvQypluHa4nvxt/rbtr7PMerrh8XveO43f0QzL8P0DROKNO/P1K9
FnYKZW5kc3RyZWFtCmVuZG9iagoKMjAgMCBvYmoKPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5
cGUvQmFzZUZvbnQvQkFBQUFBK1RpbWVzLVJvbWFuCi9GaXJzdENoYXIgMAovTGFzdENoYXIgNzMK
L1dpZHRoc1s3MjIgNzIyIDUwMCA0NDMgNTAwIDc3NyA0NDMgNTAwIDI3NyAyNTAgNTAwIDMzMyAy
NzcgNDQzIDY2NiA1MDAKNDQzIDUwMCA1MDAgNTAwIDMzMyA1MDAgNTAwIDcyMiA1MDAgNTAwIDI3
NyA1NjMgNTAwIDI1MCA5MjAgNTAwCjI3NyA1NjMgNjEwIDYxMCA5NDMgNzIyIDU2MyA2MTAgMzg5
IDUwMCAzMzMgNjY2IDU2MyA1NTYgNzIyIDUwMAo1MDAgNTU2IDUwMCAyNTAgMzMzIDMzMyA3MjIg
Mjc3IDMzMyAzMzMgMjc3IDcyMiA1MDAgNTAwIDcyMiA0NDMKNTU2IDUwMCA0NDMgNDQzIDUwMCA1
MDAgNTAwIDU1NiA2NjYgNjEwIF0KL0ZvbnREZXNjcmlwdG9yIDE4IDAgUgovVG9Vbmljb2RlIDE5
IDAgUgo+PgplbmRvYmoKCjIxIDAgb2JqCjw8L0xlbmd0aCAyMiAwIFIvRmlsdGVyL0ZsYXRlRGVj
b2RlL0xlbmd0aDEgODAwOD4+CnN0cmVhbQp4nOVYe1hU17Vfe58zc4bHwICAIMI5OPIIw1MRARGG
x4CAmFFRGROUEY4wKg8HJD6ioVHUDAkljTGNiUmT9KaJCfGA1g7XmJjE3KSJ5l3ba/OwX0ibmJD0
9ia2aZTpOnsGxMabL/2+fP3nns3e67fXWnuttdfe57D3dDo3yRAI3cCBuaHF3h5GCAWA0wAktKGr
UwrY7jEjPg+gKV3b3tTyTfGiiwDCTKxnmzZsWbvtt0HvAgRdAqDWZtneGPf1XgEgZCHayG5GBq9N
0GF/F/ZnNrd0bq4FCMD+Y9gP3NDWYF9F9iEMOYqNrsW+uX2qbok6/mnsS632Fvn8L6XbsI8+NB+2
t3V0AgYKMPWkKm93yu3ahC93Yx/jE9Yij2BRn0CEWrVP4f/3o8GMaXJgmmYZTOFaYBqA5xzWj7H+
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
ZSAtMzAKL0FzY2VudCA3NTAKL0Rlc2NlbnQgLTI1MAovQ2FwSGVpZ2h0IDEyMDUKL1N0ZW1WIDgw
Ci9Gb250RmlsZTIgMjEgMCBSCj4+CmVuZG9iagoKMjQgMCBvYmoKPDwvTGVuZ3RoIDIzMC9GaWx0
ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJxdkL1uxCAQhHueYstLcQJTJA2yFN3pJBf5UZw8AIa1
gxQDWuPCb581d0mkFCBGM99qWHnqzl0MRb5Scj0WGEP0hEtaySEMOIUoGg0+uHJT9XazzUIy229L
wbmLYzJGyDf2lkIbHB59GvBOyBfySCFOcPg49az7NecvnDEWUKJtwePIc55sfrYzykodO892KNuR
kb/A+5YRdNXNtYpLHpdsHZKNEwqjVAvmcmkFRv/P01diGN2nJU42nFTqnrNG6fp+0JW7JfYJ+xd/
moFbibhV3UOtsxcJEeF3VznlHavnG5IUb/kKZW5kc3RyZWFtCmVuZG9iagoKMjUgMCBvYmoKPDwv
VHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvRkFBQUFBK1RpbWVzLUl0YWxpYwov
Rmlyc3RDaGFyIDAKL0xhc3RDaGFyIDIKL1dpZHRoc1s2MTAgNTAwIDM4OSBdCi9Gb250RGVzY3Jp
cHRvciAyMyAwIFIKL1RvVW5pY29kZSAyNCAwIFIKPj4KZW5kb2JqCgoyNiAwIG9iago8PC9MZW5n
dGggMjcgMCBSL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDE0NzA0Pj4Kc3RyZWFtCnic5XoL
dFRFtmjV+fTpT7pz+v9N9+k+6U+60+l8O+QHJyG/5icIhARpJZAOCb9ACFEYddARkeCgXhxhvHOV
UcerotcQEBt1RmYGRRR/4/c5/t4FHUcno9eFqCPpvF2nm4/3eu+at9Zdd721Xteq2ruqdlXt2rVr
194nGRrcmEJ5aAuikbR8Tfe6hQsvaUcInUAIG5YPDwlf3vGCG/APEWJ9vetWrEn2T30aIY5BSPHp
itWbep/7o+1bhLRfIOR4pS/V3fO+/noVQqEjMEe8DxocGayA+jdQL+xbM3SVX3XrMoSKXFDvWT2w
vPvSWeuaob4F6pVruq9aN1V9BQf1g1AX1navSanObOqG+uuw/r3rBjYMIWAUodhVpH/dYGqd4p++
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
fr/kLs+R8DLP06Agj0ppBkv5nkfClZ6HE3mefYnVngcTpM3o+QWMuTOxy3M7jPtpeLVnxJ9tv15y
eK4DJbkS5hmMujzroml85yHPQLTKsyYG6JhnFQRz/kOelf5dnj5/WgnsLt+ZprCk8VwGvCxOFHsW
Jkhd7eEUYQ9NhYmd2pA1bINZG7Y+a9jWZa3WQNaGXZ41V5dn7dsVWVN2+YE2T1sMpjvkmZ7weRpg
pX1jnnrC7JinJiEvXxFNE6GV7iVCq/IUR0MeT0LtWbifW8TVclVcJVfCBTgvV8C5OJPSoOSVOmWe
Uq1UKhVKRkkpkdKUnvxQKiT+rknBE6BgZEeYIiWV9aEprKTQjEYbNQLu4k2Qb4R8A+TrIW+BfC3k
qyFvhnwV5GHII5MfHiCjD1Mj1NUH+Sx6NbU517iZujGH3UhdlcOuooZlLA2QrAlw/wxE/tNyFP/U
ZhmeZptmmKqvaW3+gWJproxc+Nn+swE/RHsRigtG75g5v3P0oYKu0XKCTBZ0zRwtIv/KfZiKU5Ut
zYepKgK6Og/jQSrecilpx4PNXUA2SyZDe6kqIENLCAAy2of2EjK0l/bJZNsJ2f6de1ua9+/dK5Ow
e9BOmWQnu0cm2ZedKQwLwEwSAUCmUKOwTBZWqAkZKIVMh1chCSaTJJnKno9XESq8yp4vT2aR1/P7
gSThJyT7I34g2O+PyN3BC91Rr9y9Ktu9KrsGvtAfyw73Zvu90B/5f+mXavq/HXFgx4fb7yP/ir9U
bElBXjq6Y7jPNrplmSDs3/5h7n/0A0uXLe8jsDs1+qGYah7dLjYL+3fc9wPd95HuHWLzfnRfy4LO
/fdJqeaxHdIO+T/4D8y5Z9Zt31tr+/m1Zt3zA5PdQyabRdaac9sPdN9GuueQtW4ja91G1pojzZHX
aumf37Thot/GoaEs8sNi2AB3/f8ATbbcjAplbmRzdHJlYW0KZW5kb2JqCgoyNyAwIG9iagoxMDEx
OQplbmRvYmoKCjI4IDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvR0FBQUFB
K1RpbWVzLUJvbGQKL0ZsYWdzIDQKL0ZvbnRCQm94Wy0yMjcgLTQwNyAxNzc4IDEyOTVdL0l0YWxp
Y0FuZ2xlIDAKL0FzY2VudCA3NTAKL0Rlc2NlbnQgLTI1MAovQ2FwSGVpZ2h0IDEyOTQKL1N0ZW1W
IDgwCi9Gb250RmlsZTIgMjYgMCBSCj4+CmVuZG9iagoKMjkgMCBvYmoKPDwvTGVuZ3RoIDMzMi9G
aWx0ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJxdkk1ugzAQhfecwst0EYEJgUZCSAkJEov+qLQH
IPaQIhVjGbLg9vXM0FbqAvTN+D37yeOwrM+16efw1Y2qgVl0vdEOpvHuFIgr3HoTyFjoXs1rRX81
tDYIvbdZphmG2nRjngfhm1+bZreIzVGPV3gIwhenwfXmJjYfZePr5m7tFwxgZhEFRSE0dH6fp9Y+
twOE5NrW2i/387L1lj/B+2JBxFRLjqJGDZNtFbjW3CDIo6gQeVUVARj9by1O2HLt1GfrvFR6aRTt
08JzTJwckHfE8QU5YY6Q96ypkFPijPoZcbpHfmQm74E1O+QjM2lOfC55S+7HyGf20v4X5gS5Yn3m
WUbcx5yS86fUX/NLZM6f4rmS86cnZM6fkZ7zpyXymv+MzPmzhC5wvSm8Spz1z4iEujvnx0MPguaC
E+kNiN9HY0eLNvq+ASiio4QKZW5kc3RyZWFtCmVuZG9iagoKMzAgMCBvYmoKPDwvVHlwZS9Gb250
L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvR0FBQUFBK1RpbWVzLUJvbGQKL0ZpcnN0Q2hhciAw
Ci9MYXN0Q2hhciAyNAovV2lkdGhzWzc3NyA3MjIgMzg5IDI1MCAyNTAgNzc3IDU1NiA0NDMgNTU2
IDM4OSA1NTYgNjEwIDQ0MyA1MDAgNTU2IDEwMDAKMjc3IDUwMCA3MjIgNDQzIDU1NiA3MjIgMjc3
IDgzMyAzMzMgXQovRm9udERlc2NyaXB0b3IgMjggMCBSCi9Ub1VuaWNvZGUgMjkgMCBSCj4+CmVu
ZG9iagoKMzEgMCBvYmoKPDwvTGVuZ3RoIDMyIDAgUi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3Ro
MSAxNzczMj4+CnN0cmVhbQp4nN18eXQcxblv1XRrpNE6mzQaj2afnp7RjDSLlpEsW3iRbLCwMYaA
RPC+O5Z3GxySa/sSArYxWUjYYgiPgIEcArLhgZFMQhYW3xsH5SQh0Xkm3OSEgO8hPC6XNdjj9/uq
u0cj29yTc8hfzzrfTPXXPdVd9f2+taq9bcv2layS7WYSm7Z8cOmmTy359xhjv2SM25fv2Ba4vHQG
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
R/umf2ffznvlN0seFKrKdSa+zWX58YtY4UzhWD4BSfRgVMPsJnYNG4Qc+tmKs3k2gz+AMzPYEnYE
11179m3wf8yOnX2HH+SDmP41CEIvZqs4rA2uWoCzTyFz6WFr8Lun2T1sHjuB301m1/Pr+cumUemQ
HJK/WZI1l5cGSheVvlX2bct95d+pNOPvt1V/qX65prVmuOZX1nbrGtuV9m7HJMdJp9P5Fefbtf/p
qnQ9Xr/C3T1pmmea57GGrzUc8h7zbRAjaWLzhXUzxlVOcJRipNs48vJlhfEuKlxDteVFepuyjpV6
W4LpWK+3aXvGXr1dgjzsm3obXgM6zPUbWtj39bZJ6LXWlmBgDutt6uenersE/Jf1Nm2S/wM9pSyL
N83fFG3AhlWzv4l2KdqV7FPRthCfl4p2BdpWXivalXQNV0TbKvgZ0bahXc6ni7ad+ud9ou0Q11wu
2k7x26WiXSfag6LtFvfaKdpewSdjyMvEc3Ja5+eV5YJ/98yNm3ZuWbt6zbbAo4FMZ2e6qTMTWLYz
MGPttq3btqxcOhi4ZMPy5sB5V2XT6U66bvqmTetXatdMX78+IK7ZGtiycuvKLTtWrmieuXH7lrUr
tyxYuXr7+qVb9KOuQCbTnF6RXZnpCmTTmbamdK4pndFPGqf0w3kbAzPXLN2weuWla1cv3bYdHc/c
ODi4cUOgcHzFpqXL125YPWv7+vU7A3M3bti4FYyVK3pWrlq6ff22gH56nXvDHff8ll3GtrAVsDQb
oONbAO6N+BxkSwGZBYDQarYdraUTztC5tRe4cqN+5cr02+nH02+kT6VPv/SVY/W/fKqop7VoTbxL
UVv2yRm5T54tT8VnZ/GZRR17f3HZFRN+p+vHZ/6DKUww2i4NI5vgVBkQjZ+g0QftTSFnr8NlZYmf
QBMWszlsKoImg2Nm0ydcw36CjubjouKfmc77mQTDMeFnw+KFrFJ6tUP7XyYY+3+aSIqFCmVuZHN0
cmVhbQplbmRvYmoKCjMyIDAgb2JqCjEwMDA5CmVuZG9iagoKMzMgMCBvYmoKPDwvVHlwZS9Gb250
RGVzY3JpcHRvci9Gb250TmFtZS9FQUFBQUErQ291cmllcgovRmxhZ3MgNAovRm9udEJCb3hbLTY1
NCAtNDA5IDEwNjIgMTA5MF0vSXRhbGljQW5nbGUgMAovQXNjZW50IDc1MwovRGVzY2VudCAtMjQ2
Ci9DYXBIZWlnaHQgMTA4OQovU3RlbVYgODAKL0ZvbnRGaWxlMiAzMSAwIFIKPj4KZW5kb2JqCgoz
NCAwIG9iago8PC9MZW5ndGggNDIzL0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nF2TTY+b
MBCG7/wKH7eHFXggeFeKkLLJRsqhH2q2P4DAJEVqDHLIIf++fv3SVuoh6PF4ZnjsDPn2sDv4Yc6/
hbE76mzOg++D3sZ76NSc9DL4zIrph25eVunZXdspy2Pt8XGb9Xrw53G9zvLvce82h4d52vTjST9l
+dfQaxj8xTz92B7j+nifpl96VT+bImsa0+s59vncTl/aq+ap6vnQx+1hfjzHkn8JH49JjaS1pUo3
9nqb2k5D6y+arYuiMev9vsnU9//tVRVLTufuZxtiqo2pRVFum8iSuLbgkpziFdmBV+Q9uE7sBOwY
fwW/MF6BXxl/AW/IO/Ab3/sO3pI34B1zVuB39inAe8bLyLZgPDH9BTmW/lUNpr+Ds1384WPpX8HT
0r9O+fRf4VyW/gJnS3/BPVj6u1RL/xr+lv4u9aG/g7+lf4nzWvoLaoX+5RuY/hXyhf4O7xX6r3Au
ob+gvyz+uHNZ/BMv9596Lv5wE/qXuCuhv8BH6O/wX8ty/0UamGUyMDqY7T8jabp7CHEc0weQ5hAT
OHg1fz+SaZxQln6/Aeyz0noKZW5kc3RyZWFtCmVuZG9iagoKMzUgMCBvYmoKPDwvVHlwZS9Gb250
L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvRUFBQUFBK0NvdXJpZXIKL0ZpcnN0Q2hhciAwCi9M
YXN0Q2hhciA0NAovV2lkdGhzWzYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYw
MCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAw
IDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAg
NjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIF0KL0ZvbnREZXNjcmlwdG9yIDMzIDAgUgovVG9V
bmljb2RlIDM0IDAgUgo+PgplbmRvYmoKCjM2IDAgb2JqCjw8L0xlbmd0aCAzNyAwIFIvRmlsdGVy
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
5teYLL7m95jXJPbOKdFHONayt066j2MdcAZ9kuNMjvdznA1soi9yrOfyNzjOAc6lhzk2cvmfOM7l
a37K8QKOT3Gcx/FZjk3ABnqe44XAekHLcSmbI+QynMH1FAoZ1mexHBBK2mMj2+OD/QNj8s9kh9dr
t3od8sbtctvg2OhYPBIeklcOb2qQvzHLabd72bzWkZFoRJnTGo3KfM6oHI+MRuJbIr0N7bHx+GAk
3haL9qpQZtgvOxwN9l5nxOGXnXaH22r3WO2OuTNS46rMymSrY3L7QHi4P3LDYH94bBybtMeGhmLD
cppfMxLeNDjc3zEejW6XV8WGY6MQRHoDkb7weHRMVodT+yyPh0dTuCMyNpbC/ZCPgo+lBFsiY3Pm
peDqSH98cCycYtvD8XikP9ybfmpFOLql7/L06OBAeEt69m8+/Py9FH7r/cMf/u6zFHf2xCf37P3x
R6jqCOnl32P4ayMxEgXfRcY5GuQ0QMJkC2g5ieN7NP07qj4Vsx+3X7D/w/72KxcOHD98AG8ZTK6s
uRrf/Zg/yOZJJqlZapGWSp2SVxm/Z++Na4jy78RrfHAeWcgh1INABAs9hOkiA6/hp4FU8H47j9WZ
5TVUy02wwoUD2KRKNHhvmzuHvIaFXFjQPOcx4YrHsBurYB27Sir/y/ovcAJ+tAplbmRzdHJlYW0K
ZW5kb2JqCgozNyAwIG9iagozMjAzCmVuZG9iagoKMzggMCBvYmoKPDwvVHlwZS9Gb250RGVzY3Jp
cHRvci9Gb250TmFtZS9EQUFBQUErQ291cmllci1Cb2xkCi9GbGFncyA0Ci9Gb250QkJveFstNjU1
IC00MDMgMTA3NCAxMTE5XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgNzUzCi9EZXNjZW50IC0yNDYK
L0NhcEhlaWdodCAxMTE4Ci9TdGVtViA4MAovRm9udEZpbGUyIDM2IDAgUgo+PgplbmRvYmoKCjM5
IDAgb2JqCjw8L0xlbmd0aCAyNzQvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZHLbsMg
EEX3fAXLdBH5kTROJMtS6tSSF32obj8Aw9hFqgFhvPDflwG3lboAnXlcuAxJ3d5aJV3yajXvwNFB
KmFh1ovlQHsYpSJZToXkbovCzidmSOK13To7mFo16LIkyZuvzc6udHcVuoc7krxYAVaqke4+6s7H
3WLMF0ygHE1JVVEBgz/niZlnNkESVPtW+LJ0695L/hreVwM0D3EWrXAtYDaMg2VqBFKmaUXLpqkI
KPGvlm2SfuCfzPrWzLem6aGuPOeBTxnyIXLIHyMXyPeRG+RT4CJHLmL+gnyO+SPyJebPyNfIN+SH
eO9jMLm5Qbs4z58xUL5Y60cQhh7ejq+WCujvxxhtUBbWN9dqhUEKZW5kc3RyZWFtCmVuZG9iagoK
NDAgMCBvYmoKPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvREFBQUFBK0Nv
dXJpZXItQm9sZAovRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDExCi9XaWR0aHNbNjAwIDYwMCA2MDAg
NjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgXQovRm9udERlc2NyaXB0b3IgMzgg
MCBSCi9Ub1VuaWNvZGUgMzkgMCBSCj4+CmVuZG9iagoKNDEgMCBvYmoKPDwvTGVuZ3RoIDQyIDAg
Ui9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoMSAxMzgzMj4+CnN0cmVhbQp4nN17e3xU1bXwXucx
r5zJzJlkZjIZYM5kyMs8yYOXgRxCEoKgCQnRDAjJkExIMMmMmQHUagmtrRDUxKu23lqBe8u11qpM
UEt8QlsfvRUUX1VLraj0YatCW7QPycm39p6ZEPDR3+/7fX99M5yz11577bXWXo+91x5jdHBzkEhk
iPBE7ewPhB+4becQIeQIIWDr3BJVHtrkr0b4BCHcju7wxv7vHbzyDCFCDyH6Rzb2Xdv95ss/eJkQ
aQYhGUM9wUBXR3ddGSGzv4885vYg4mrtG3rsv4b92T390WuOyPyNCP4D+zv6Qp2BWzc9EyQkm8qs
7w9cE36cf4/H/i+wrwwE+oOvLlrYiP0/EpISDociUYKKEjKnjY6HB4NhMvHAAuxfgzqNIg7wSz8S
gjra53hB1OkNRlOKZE61WGVbWrrd4cxwZbpnzJzlUbzk//OPeEQ8Qm4QtxM7uZa9z/sIC0k62UrI
5Ie0d+6tXTH59/+XWhjYG1yQTT4hf5428FPyKnmcxMhL06khF/Kp98BGTpIz5Lkv44r8PLCSge+Q
l8mz5NEvoePIj2CCvAkujPODCFFcNTkO61Cf+xG3mdwCZ+Fa8JK9YGWjc5B3KghfwGsRTJITqN0d
5AS5A2rJCTHCu3DgTe5Z8n1+O3eUvIA6X8bdgrhJ8gY5AqVQRyLkEXIvYxBBebdM54jx/N/kLvLN
c1jxIe1JcftEKZEnPyU/IU8yC2wjw6RjatJp+BhGMSddYICkT59ODuob+E3cTzhu4nbs3EY24hOA
t5D6Fn7JBcu5XwtpPSCS21GD92AVGUEuD2mPafvIerKfe520kr+SewW7DrOKf5dYuX8Ri/Ya/Gny
b2Sc6d5JUiYsk5/Emem2C1uJXXiLxtDks9o2tOtR8le0/uvgUpetXeNva13d0ryqqfGyS1euuGR5
w7L6utqlNUvU6sWLqi5euGD+vLmVc0pLiosK83Jzsmf7sryejHTZakk1p5iMBr1OFHgOSKESg466
GJ+tyPUBX50v0FBUqNRl9NQWFdb56jtiSkCJYSPk+BoaGMoXiCkdSiwHm8A0dEdMRcruCyjVOKU6
RQlWpYpUURE+JXa01qeMw5pVbQjfUuvzK7GPGHwpg4Uc1jFjx+vFGUwrqq1SF6vf0jNc14E6wliK
aalvadBUVEjGTCkIpiAUy/OFxyBvMTCAy6tbOMYRg5mKxZXWBbpiTava6mrdXq+/qHB5LNVXy4bI
UsYyplsa0zOWSi9VnexSxgoPD988biUbOgqkLl9X4Mq2GB/AucN83fDwTTG5IJbvq43lX3cyA1ce
jBX6autiBZTriuYpOSvOiYSYmG31KcOfEFyO76MPz8cEEhhdtvUTQsEYtzQGzW1e+nHXo62Hh+t9
Sv1wx3BgfHJog0+x+obHJGk4XIfmJk1tyGJ88vFd7lj9zf6YtaMHFvoTS69vXhFLW7W2LcZl1ys9
AcTgv2qfd77bK0/RNH3ZMEGzoHHQwl4vNcOucZVswE5saFVbvK+QDe4DRC0p8Me4DjpyODlib6Uj
Q8mRqekdPvTtipa24ZiQvbzLV4cW3xWIDW3A6NpEHeOzxlI/dXt9wzZZWVDiZ7QKarW8q1eJiTlo
JJw1fQLGDZ0ybGWd1E/jzUduFJAj25QFPmRD+dT56joS/7b0ZCADBQ3dUBAPhNVtMbUWATWQ8Fjd
WGkJzgh0oMN6a5kzYyW+cCzdVzPlXapWXW9LG5uSmBZLXxojHZ2JWbGSOpZXSt1wR21cBcrLt6rt
MVI+eWKsQnE/XE4qiL+WEjuWYpTl1A23dXXHPB3uLsy7bqXN7Y2pfvSw39cW9NOwQwvln3Cz4PCz
WFndtqLFt2LVmrb5CUXiA5SdkF13ARtfmzvOBgMwZsg2KG2cm/cjoRURSj0CvpoqfMf02QZ8rGhw
hqWBW1OltIGbJKlRjVi+UhesTdDR/nlMRRpOSxuS3HS0i3yWNri9fm/8U1TI4bCSEIwzDNSoDckh
3KZwwIDxubSBoagtM2jQK22+oM/v61FialMbXRs1D7NywhjM5glfrT6vN81YaCbixeFkhxozVl/g
nm7c2DLWn+o2XDC8PDmsDBt8K1qGKXNfgiFBzZfHCA1hdb7sZnsBTWgf7r2KFVOaJfTwmKrSZO5Z
SJn4lncN+1raqhg17ic3uK+jsmxkBaxYXVNUiFtbzZgPdqwaU2FHy5q2x/DIVXasbjvAAbe0o8Y/
NhvH2h5TCFEZlqNYiqQdhXYop2bsGBi9+zGVkCE2KjAE63eOA2E4QxIHpHOci+OscUE5TJBKOBwR
4iNqklpAnCGOG2I49hkj1GSqSVQNqlGVODPnHgOKOoCYx/GUNAJ5WAIzuMdwVjNDj8PQmFF1xymG
kEKNa7ij9Zzo1jVtD0sEp7E3CqqhHwyXjB50Nh4rdUoXDZTr/T3DHX6abMSBrsF/EAPfYnSTbzEq
opNiJl+wJpbiq6H4aoqvjuN1FK/HEAUH4PQh9H1TDGgErG3zYkoqmf/rHrZ+RD3lx01l2Pq7IlTu
KFYjZVg38kRPPKpZx4k8xxsNIi8gqvpoyVHZBgsWyOVy+ZzSNK/sTZO98lEh+NndK/mj4vZ/bRMr
P3MKH9DigCPlyOs25KUnFk6vTpqBSJwBGfOCTjQIBj1vlfUS1+43G0RJ0lERtm/LEJWhS4YWGZbK
UCFDtgwOGTgZ/ibDSRlek+FZGX4iww9kuF2GG2XYLEO3DKtlqGP0s2WwyyDI0POJDL9LTnhYBrJX
hv9gM1DCBhmaZKiRoYzNiEs4LcN7bMIzMhyQYZ8MozJ8I0nfLEOtDHMZvZXRn2Ea/SpJ/98y3CED
rmALW0GcHjXKkSFdBp0akmH+X5NTfibDIzLcy/SJ0+MK6hmxTQYgjDvyjcmwl/GNm6UpyTSdMXqG
cbmDcQkzgtq4cjjfsH5d+7rk5+pzn8H2wemf9esu+Fx9wWcabfu/mUGqy6rLF5TYFpQXkIwSjBQn
Rko5DRbZhkGzYMGcUi+PX/AaQZ8KCOYK/TdM/OEG7S2Ogys5MtGsM83YDXfuKoAe7S4aT8J9jtlX
ahVw5454TK2e/FC4Em84DuIli1XFydtsaTONacYsn41ImY1+i2TVeRr9vM5B7GEfoErVVJn4ayp2
UStUpRgqfTpfFidbbeVlDmd5LsZyuhMqcnxZOru1vGwuv1JIEdZOPvXiW89HfliEKroM2vubB68e
eDt0neXavGfw3mLE1M/uaD8Auz5TunZwvv1PHXxSG/05vTiQBtTVIzSSPDKo1ul13nR3ppmQzHSd
kH+R1+zknbNW+X/mhg438Ba3x82ZBLfbaeVNq/zp+tl6Tq/nHU0XQewiKL0I1Iug5CKgth4k1eUl
69iaStqZjwtkG8F1xc0d/84phXTBl5WTO28W4EIqK3Jyi7nKirl0nfpioAtMdzhn8YJHm3z/nY9y
/27fOLSl74qej++94tTxn/555j+l9d1dXZeu3fbs1mVQdc/Dt9yZfalapVYsspes2r7+7ge/c2tm
zZLyqpJ5tsx5K7fiWkfwbtmFfrGTJrXEZrFYDXqr3umQiVVvt/N8SpOft+51wqgTTjsh5oQ4HHbC
KSesS8QZqS6QSTmua7qjcCWLcQkOOzrHSvXGFt2kh30LHtj6wLj2x59236D9AT3Db7g+/NqRiWZu
Pczcv3PiKfGIdlV/D40Z1A3uQ93onna5OpfX64kgGIyiRbADafEDacIt2ggxI+w1wjYjdBjBY4RT
RjhmhMMMP2SEc5HOFEXzMy1ZfONWWOm1A+o1Ai6qjDDx0kuf8cLCz56jceBDJR5itlmqzjangQ44
zi7YBafDZFnlN6HlRKHRnyZawH7ICUPUICxsmTEKqJQyzB8mqQzNgWJ8leXMmU47jdWZUG6Ht7Q/
7t79/T2Nnfn5DRe/zl9/9kb++qevvv1W66PGBQ2tT1M9XJMfc7eJ81GPi9WZaZJkMhvMguBwmkWd
2Og36QwGnYXIjX5Mrup4fMlMial1sqWKWTmVVIF55fZyu09Od5SXzcP74r7rv73zu22xo0erqr2L
emw37eS+/rSmPT3xYuOK1IeyWO42YT7cLlxGUlCDUjVT1klER5wOo6XRb7Ty6Zi1DgyIDifQnYQq
UDDtsMF7ujeLyPhWCE1RhUpWhNu132jahHYCFOAxGZ3ar79+zSS5YQvw3Cztn9rrUIjmFqFAe0f7
y08f0m579Cl2qSc78RVj51y3WsdTFwBPbCdERMJeEUZFGBKhSQRVBCLCaREOJ4fCInSI4BEBiY8l
8Ug8fStMbpgkGSRzSsvRbTshl+5pVP4ufD0Ac1C+UzUx+QTuXktIScH0CbvAC3O0l5D+JppfuJdk
kEa1hGRY9XqDISPTZU1P55v86VbJYiD2vZkwmgmnMyGWCXE4nAmnMqflV1l1ddKhU+l1Lq1wk/DO
Ant5It/4lSy1RB4k3iSwbOPaWW49yTdcESpM+x8Py7hVJK4fp6F+DtyVsw0OByGWDKfZ1uQ3mK2i
hdj3ZMC2DDiWAfszoD0DSjIgbi60EI30c34uP6cGlwxwuzyS0CJfbauZ662t6N3MV/m3FtsOzhpc
V2T5s+X+H058xPy6jZ4PwkLUA+2UilYiDoMjw5lqs6GdbA7JjsXI3gwYzYDTGRDLgDgczoBTGf/G
TiDTI6GSnRHenEpfKu6imAlw1+HuG+jBcEYS5z+INhIWTvyX9v7+nVzt2fHhntFlXwu/eoTbT3Wj
8T8P4z+D1Kiz0+0mo4XnjXY+06UzY/qZdFaS3pHOmfn0dDKVhnQPoNs8JmPBtB2epiFNBrqfi3Q/
Z8rNE1M5rvlT7Qyk/uPQvxTtd1JH21tvN/WZIdOy/ZV0yMZckKDg8I9SWzq1O7XhYJc59FB7Mh90
XswHJ/Srk3bitJpTnamuDMGkT3Om5abxBlOGKc/EG01pdgufaiC2XS64ygUrXHCxC9wu+MwFp1zw
jAt+7II9LsDRqAvWuqDRBRUuSHHBxkkXnHTBCy54wgX7XXCHC77mgpALal1Q4AIPIzrjguMueInR
fF7AC4z7LjZxLcOXuEBwwbw/s7FHXHA3E4tzZjN2OOe1pLwbGbt2F3CqC6qZwNMuOMGk7XXBNqYq
4hUXPExcoF8/vbxpvyCv13++9vmymipZGNHKaAEOyMmoShQhcsXceZye96UAO+K8aR6YB15ZdINx
WZb2inaVpP0Ldp11lFbjBreTv3zmwt9of9t09mPeBlv/uOLs/eL2sx+ufOo9/uL4vmLAfWITxr8J
WtRJ+vOZzoiRxfEp0h0SDEmwQRqUuNUS1EhQIUGOBDYJBAnOSPB7CV6RAA5LsE96ROKGpFGJ65Ki
EqdKTRKHxFZGuRFJj0knJO4R6RmJ2yvBjciZ65CgVlotcYoE6RK8Jp2UuBckGJX2StyNEnRIYYlL
jJdKHFKcThDFJKAy7pD2SYIqwWypQuKIBPO4sDQkxaTD0mlJbJfw4mCVVIk/JsF+yhVCEjRJUCJV
S9w2aUQ6JJ2SJiURURbJg0heb+QsOojZsVSqLof1U36iNez6Czz3ea+1T/erbIvnHEu6fABvmsO5
GNK83HEtpt0A+U9Z5psWPw85mPY/KPtF/otcBzvrqjDXhzDXc/AW1K9Wz87N1evtqZZCnrfY+coK
XV6zX6cj/tTeVK4IK2FLqieVMwq4TaWs8tusrhJS0uif7SWOQ5XQWMkKgrKyZEFAyuN1n21Bxnmb
gjx1PlfMrYZKVsfqsxO7efycTuVpUejTpelTOTtFLYZK2HlP7PixDy5Zfdlyo3bc/ecXjv42v1SZ
5crLK5q1KWjSbfGPbmguWHZxTf/i9B/ffV+ME+Zt2risOXX3D375uLZlbZ3uLp1JJ/QEX+eMnOBr
qLp0RcO2ZTQWL578ECuL75CLSLNaIpGZM7Icep3OMYMIhQVSFu9yKe3+mTNdAm9q91v1ir5Uz5fq
VVb4prEi9+p4FfJl9a1XmZ2bjfWtUllRDLnFQmXFbK8isP1QsafPAqxvRZ12VHtD+4t2pBBmzrzv
Tqhctv3g7uu76nPBAzbcDvU52nuOm76unVkQ/vEL+7vnwndeOn745yXh4JNVl1VkZxctujy64tAL
+57KXXvlffPq52QXLA/Qo47cpF0hjAiriBPvIVWqkkFsM43GFJLiy7LjLcRmt6ZaTG5eafTrsKhh
9xB2AznvsEvUNRxzCcv+ivjJh5WdDazxIr28TBh567nBHxXpdNofDCCLeqH9s6eOacffCW/dOvAu
l4WLe6tz3ay7tIDwp//ssG2qeF57G0+Avmdi+w+RqbqrCGPRRlwkpC51mqyyIyWF52UT7850pDT7
HV6r3GBxQKqIB7dOl4axaSWpq/zbrGCl/4hjjxtCbmh3Q6MbStzxWgdDsmTdukSdRhawY6qg4AI3
JY8pm2z3shAUOcCoxLsXd8kZ3NlMZz74dOKSzX134lUqou3tvIqHfYaBdKx77HhUKdoL2q8Mu/9r
O9Z1/Njw9d/8ZuKswrjajnVkVL1ENBoRgBSdiceyXjKLhna/Rdwm7hF5izgiTmLDiw77cosI6aLo
kJaLWGmB0O7Hes/Y7ic21QylZlDMwJY0bTkFdD34XB1fE0LJCsVr9yaencLqs69ypyes/OXi9pPa
7pPaLSfZeZrK6rWFqJqqziYpBqNJAL1O5Hhe1BtTRLNEi6LTZjhhhj1maGTSr46Xi0nzlScLtBR6
X/a66ZsvP6thUXuzdhOU/OH3WBveBCOwQ7uGK+FStN2wYeIfEy8m78ni+5h7ElYbDWphmt6Mlx9X
psna7jdhzd/uF9KwRBxiJWJHJqiZUMpKRyUTkpvfF9Tg6ZjgylQRjoGLmwjenW3i+w9pT76pPYLq
XAON+L1We/XNnz/35tuHnnuDe/432oExuAlWQwtcrw1pYyeB1yZ//0ftE/bf2zCXMD5HEnd6zKWZ
OovF7CRm4stKx1yS062pJMX+b3KJHabJXErHAGOVmj6eSvEbfTyX3vhF5L4izihqpwx4T8NcOnxU
O9539eDWzYPvcF7tjPZG13rfdfK67wmvaxtixzCXPh0/cOiRBw6zXJo8oV0BP2J3SSt5Xt2h581m
IkmyTbIIhia/4I5fKA/bIGaD/TYYskGTDVTMZhscs8GoDToY5pQN4jSjjCY8jYzYYP6kDd6xwUs2
2MsmHLLBHhtss0G1DSw2OMF47WVdD8Mkq5VzB9r68yuQqfsIc2nip5DkjZJdXrNyK52J8lY3irfY
d7vqyxsqwXUbvcv+c43xOaG6U9jyWf3I91h8d2tXcPRObSZZqpWYdXoTb9bj4ZaqI8R9Lo7nlFLX
QA79jWWeV0cbJ4zcc/PN94Br98ite7Qr3oOfQQY44afvntSqtI+1U1r1BxgTNMfvwRw3411xnVoO
kmQz2nheSDUSs9ko8E6HZOM4W7uf44goyu1+9vNhmP2wUOoExZlIqLKpbKbN+YeljSnoBfqDgrdM
sGPYGKEiHy/YZXOFVdpj2r3aW9zhs2C7bwRu0G7Tzmrfhm9cP8Q5Jz4Qt7/1wh1vZE3E+Jdf0DrC
8TslhzapTdoE803HmwhuSxfaJPHj6VybbOVyvQ7a6Lm9t4xSk+zatVu74k9wCM+mNHj2vfe1xdqH
2p+0xScTe4rYgDYxkfmqx2jC2o7nOBQgpWDRtoeWWVgSgZHjdWCLVz7U/Z8rYMDhrMaGr9Fen/g7
VECWu8ReTi+aWEpubTtw+SP8zvh68KDT7cY7XQ65XV3vzCHEY/DMsuoNswx5uVk8vXhanZk8vXx6
8PZ5Mg9ey4Mb82B1HlycB8fz4Ik8uDvZLckDzpMHJA9O5MGxPIjlwZ48GMqDDjY2Fart04oyVjVX
O8unXcWSbvvSe6uz/Lxfi/QyL+1rvWrqFltxd98/KnXzvrd1973aB/uae0V6o31oePqN9sOvD7zx
vxOr6MCemyf2J2LxarS7EU/QCnWmRTQRkaSn6VLbcUcSLRh7tqF0KE0HJR1Y0H3hvokxxn65KACZ
7phX/1h7/pcTz4EGXfBt7Y0Pj7/8r6dPcC/8WnviAXG79p/a2Punzi6jfxSBe7l2mbAG/eAlBSSg
LszIMpk8Ap+LV1oPX1TottizG/1Ou9WS3+iXLHaiX+W/XOgWtgh8llAmcKJgFziBuMNFdOcsWxc/
ss/7UfRcTlBlcQfNZr8aLoJ5534fdZbjRcWL9k4XeLqfsgsnt/q5v8wAl6WzaXMfx62bfOrYr458
uFY0imDSaf+yYH2CVYp22Xdv9i65ZPTWBVc9DzPAAEZQfu67Jq3v1rPv/uFD/rc/fEK7S9vzRDzm
6HrJomcW7mm3VH3CeeJ/R3Lk9pkNyT9gwB34Mt1uzDJI/JFJYp5+sXYZWTodc94nCy15VHyelAvv
k9XcAjydI6QB4RGER7j7iQ8fF/absL8Tn10I38TPJDdhuw1pm3T3k53YGvCpEi8nF9NxikeY4lN1
C8hqiuMWTJ5AXt0oaye2HI6n6pEP7VPZqEsONMG9cC83g9vE3c99zBfzUf4R/ogwQ+gQHhLOiid0
+/Q5+jv0fzI0G/YZThoXGkdN6aZa027Tiym6lOGUX0pqYoVZpILai1nNSkrIlYTwl/KricBGZ8HA
lB0un7IJEAv2IDFLIMEEzJNM0puABZJOvpmARdx3vpuAdSSN/E8C1pPryHgCNpB0KEvARpIK9QnY
BL2wOgGnkBncU1N/rVXMvZWAzaQSK7c4nEoy+SrUBAQj9h7gL0/AQGYJXALm0AdKAuZJhZCXgAWS
J1yZgEUyQ7gxAetIjrA3AevJGeG5BGwgeeLjCdhIZojvJWAT94qoJeAUMt9wLAFL5EqjIQGbySZj
VwJOJRXGF2t7N/ZGe68LdildgWhA6QyFrx3s3dgTVfI685Wy0jmlyrJQaGNfUFkaGgyHBgPR3tBA
sWnphWRlSjOyaAhEC5XlA53FK3s3BOO0SktgIFIT6utaEukMDnQFB5Ui5YLRC7oKpb48OBihiLLi
0tLiOecoKEERJZg2qTeiBJToYKAr2B8YvEoJdZ+vizIY3NgbiQYHEdk7oLQWtxQrTYFocCCqBAa6
lNVTExu7u3s7gwzZGRyMBpA4FO1BjTdtHuyNdPV2UmmR4qmFTLNISzS4JahcGohGg5HQQE0ggrJQ
syWDvf2hQmVrT29nj7I1EFG6gpHejQM4uOFa5fw5Co4GcC0DA6EtyHJLsBD17h4MRnp6BzYqEWqX
SHCwtzvBQon2BKJ05f3B6GBvZ6Cv71r0XX8Yp25AZ23tjfZQ6YG++4vjWqBZutGmSm9/eDC0halX
FOkcDAYHUE6gK7Cht683ijx6AoOBTjQWWqy3M8KMgTZQwoGBorrNg6FwEJW8YtnKc4SoVtyQkVDf
lmCEUQ8Eg10R6oguXGIfTkLBfaHQVXQp3aFBVK8r2lM0Td/u0EAUp4aUQFcXrhkNFerc3E9dhBaO
JpULdA6GcCzcF4gil/5IcU80Gl5YUrJ169biQMIrneiUYuRc8lVj0WvDwYQrBimX/r6V6PkB6rXN
zLV0ES3LVyqNYbRPPSqnJAgKlWRkzimekxCBZuwNRyPFkd6+4tDgxpLG+pWkFnekjfhE8bkOd6ou
ouATwH4AoU4SImFyLRlkVD2IVUgeYvOxLSOlZA4+ClmGVCEc78P5Cp4QIaQPs3eA8Q2RAVKMNdXS
f8utDKHmhBYNbHYhQstxfidyWInzNuDodL4KacHeAImQGuz34cwlCHci1QDClFYhRfh89dyvHlWm
eF/OaCJTFGWoVSl+i1H3L+KR5FA0xeGLJfUyKdTiUTZCNe/HdpBchbgQ6f5KuyhIF2RejOBIkPW6
GFfKuxUpWhhVE5tJLRNl0gYY1eovkNiIErtxfifzaJKyk/GmkRHnHEK4J2HjTWQz82sEKem85Noi
KPnzHvniGGlh2m1hMi9leNqPsLEa7EcS64rbbAmT1489aoutqAmV28PgALNnF5tNY20gMXMDRp/y
lXKUxNxAwi8D+A0hbVxLOqcwYe9u9o4wuQMoQ0E4GS8Rts5e5rfpWijMYgFm/7jP+3E0ymg7Ed+H
32sTedeP9olL3ZDIrK0sT3um1o703izm2XO2iEdLdyJOFYYNIxxiuietV8Q8QvUPMq0oFGB5vwFn
9DE5cT16WEwEmEeDCQ9HmbZJK3UlVkU1DDNMEalj0UCzPZiw5BW4S6z8Qo5xa02PyAjLlS3Mbud4
DzBtuxguNGVZStWXkBRfcR/bja6a8ko3i7K49boYt6IvsW83s000ITXENOrCb9zP8YgK4dzNzGvx
LIrHcPRzlgsw+4YS88I4QmXFdelnWdHD4i5MFmJVWYLa0W8xi77pudKZyJTihM4l/9fzqF5hZsHp
WTE4pUs/6rgykfMDU7m2eVrWJj3RgjvPSrZLhBPxU5+wnHIBB5orF+6Zc9huef4q4tHYi/0o0yfC
bFnM1rARxxtRwkr2vyl8xWdJK1QTgAWkFRYn2hpQsc72wBJsPdheTMphIeLnY4vjZB++z+DDYW29
CObgyBycWYJtKfZpWwj5ZBJn5iP+IuznIT4X29xEPwf72dhmJ/o+yGL0WYl+AY5jS5qAVuAl7L0f
BLUJjk3AoQmwTkDoM1A/g6FPRj/Z+wn/l9OVnpLTe05z7aeg5FT7qdCpPafeOSX+/qTi+d3JRZ73
TuR63j2xyPPOordbf7uIbyVvl77NvQ18a8mSFJiFvK34VvBR8eEnD8MsNc81o/43/KSHHIdfC1We
116Z4Xn1lRxPx8ujLx9+madNDIETL4vjk4cfftk1sx7bR142mest4+BQLXDo6RyP+kT+knr1iazc
+nHwqjk/WeQh4xAah/GDJg85COSgclA92HEwfFCkzejBYwdPHxTHQVHNDUj6aMej3N5Hjz3KIWc1
9dGU1HrLgfYD3Bhf5aFqu0g1Po348GQE34DKu9S8nPx6z/6S/dX79+wXLPtB3Z/qqCcPhh8cepA/
8eDpB7kf31/pub8px/MYuCHzQBXVKPMnYPkRWO6DJ8EJaaQK/WBXv95U5dl9d67nHny+j8/Q3XBX
fZ5nz3f3f5f7Tn2lx3KH5w7u9tEcz3/cluOxjHhGQiPbRkZGxFtvzvE03gKWm0G9OcVSb9np2cl9
+1sWT/u3YO436r/BbUHZm/GJ4hPBJz8M7jDwYTgThl+Ffx/mesLgD8P45Gn1hjCaMzTQ4BmoL/Nk
QkarqzyjVV/Ot+rQLwGc29Fe5mnHdv2aBs+V9bmetWuu8aypn+NJK7O1iuhdoYxvDfFg4av5Rj7E
b+PF9hZQW/IK69WWWVn4Ssuov6r5a827mvlVjTM8Tfi4GvMbOX9jbyM3Dja1qD7bs7ze5Wmo93qW
4aL/UY9GgBkN7lZHmb1VBkurtczSygFGLJn0jIN8wG3ExqoWYeuxVFvaLdssgsVSYmm0hCwjlncs
kxZ9NeJOWfgQgUYCQw4QYRxGx1a3FBSsGNdPNq+I6ZvWxmBHLLuFvtVVa2K6HTHSumZt2xjArf5v
3XILqZm5IlbW0hbrmOlfEetCQKXAEALWmWMOUuOPRCPRzQWJD0SitCG0iSAQidAhoKgpEoaORKLR
KIlPiRRESAF94wDgm0QYIdJQYsor8Q/om1BxTAwwykiUErHJm+mb9SiWMmIflBCZEs84x5uM/wPb
S42SCmVuZHN0cmVhbQplbmRvYmoKCjQyIDAgb2JqCjg3MzcKZW5kb2JqCgo0MyAwIG9iago8PC9U
eXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0NBQUFBQStMaWJlcmF0aW9uU2Fucy1Cb2xkCi9G
bGFncyA0Ci9Gb250QkJveFstNDgxIC0zNzYgMTMwNCAxMDM0XS9JdGFsaWNBbmdsZSAwCi9Bc2Nl
bnQgOTA1Ci9EZXNjZW50IC0yMTEKL0NhcEhlaWdodCAxMDMzCi9TdGVtViA4MAovRm9udEZpbGUy
IDQxIDAgUgo+PgplbmRvYmoKCjQ0IDAgb2JqCjw8L0xlbmd0aCAzNzAvRmlsdGVyL0ZsYXRlRGVj
b2RlPj4Kc3RyZWFtCnicXZLLboMwEEX3fIWX6SICm1ciIaQ0CRKLPtS0H0BgSJGKsQxZ8Pf1zLit
1AXRcXxnOMYTHutTrYclfLVTe4FF9IPuLMzT3bYgrnAbdCCV6IZ28Sv6bcfGBKGrvazzAmOt+6ko
gvDN7c2LXcXm0E1XeAjCF9uBHfRNbD6OF7e+3I35ghH0IqKgLEUHvevz1JjnZoSQqrZ157aHZd26
kr/A+2pAKFpLVmmnDmbTtGAbfYOgiKJSFFVVBqC7f3txzCXXvv1srItKF42iRJaOFXGWIMfEKkJO
iPMYOeXMDjlj3iPnzBnyjvPUZ8//V8gHfhflH7n/GfnIGeIT1yrkM3OKXHEGHWTEfU7I7J/je6X3
x7NI9k8p7/3xLNL7Y0/J/gkx++d4Lsn+CTpL748+kv2zA7L3pzz7p5Rhf4VnlOyfkpv3R2fl/fH7
KPbPcrosfyt4bThXP+Mg2ru1bhRo+GgG8PYHDeJ3QM1ksIyeb6pzuJUKZW5kc3RyZWFtCmVuZG9i
agoKNDUgMCBvYmoKPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvQ0FBQUFB
K0xpYmVyYXRpb25TYW5zLUJvbGQKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAzMwovV2lkdGhzWzc1
MCA3MjIgNjEwIDI3NyA1NTYgNjEwIDI3NyAzMzMgMzMzIDYxMCAyNzcgMjc3IDYxMCAzODkgNjEw
IDU1Ngo4MzMgNTU2IDU1NiA2NjYgNjEwIDU1NiA2NjYgNTU2IDc3NyA2MTAgMjc3IDMzMyA3MjIg
MzMzIDY2NiA4ODkKNzIyIDYxMCBdCi9Gb250RGVzY3JpcHRvciA0MyAwIFIKL1RvVW5pY29kZSA0
NCAwIFIKPj4KZW5kb2JqCgo0NiAwIG9iago8PC9GMSAyMCAwIFIvRjIgNDUgMCBSL0YzIDQwIDAg
Ui9GNCAzNSAwIFIvRjUgMjUgMCBSL0Y2IDMwIDAgUgo+PgplbmRvYmoKCjQ3IDAgb2JqCjw8L0Zv
bnQgNDYgMCBSCi9Qcm9jU2V0Wy9QREYvVGV4dF0KPj4KZW5kb2JqCgoxIDAgb2JqCjw8L1R5cGUv
UGFnZS9QYXJlbnQgMTUgMCBSL1Jlc291cmNlcyA0NyAwIFIvTWVkaWFCb3hbMCAwIDYxMS45NzE2
NTM1NDMzMDcgNzkxLjk3MTY1MzU0MzMwN10vQW5ub3RzWwoxMyAwIFIgXQovR3JvdXA8PC9TL1Ry
YW5zcGFyZW5jeS9DUy9EZXZpY2VSR0IvSSB0cnVlPj4vQ29udGVudHMgMiAwIFI+PgplbmRvYmoK
CjQgMCBvYmoKPDwvVHlwZS9QYWdlL1BhcmVudCAxNSAwIFIvUmVzb3VyY2VzIDQ3IDAgUi9NZWRp
YUJveFswIDAgNjExLjk3MTY1MzU0MzMwNyA3OTEuOTcxNjUzNTQzMzA3XS9Hcm91cDw8L1MvVHJh
bnNwYXJlbmN5L0NTL0RldmljZVJHQi9JIHRydWU+Pi9Db250ZW50cyA1IDAgUj4+CmVuZG9iagoK
NyAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDE1IDAgUi9SZXNvdXJjZXMgNDcgMCBSL01lZGlh
Qm94WzAgMCA2MTEuOTcxNjUzNTQzMzA3IDc5MS45NzE2NTM1NDMzMDddL0Fubm90c1sKMTQgMCBS
IF0KL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRz
IDggMCBSPj4KZW5kb2JqCgoxMCAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDE1IDAgUi9SZXNv
dXJjZXMgNDcgMCBSL01lZGlhQm94WzAgMCA2MTEuOTcxNjUzNTQzMzA3IDc5MS45NzE2NTM1NDMz
MDddL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRz
IDExIDAgUj4+CmVuZG9iagoKNDggMCBvYmoKPDwvQ291bnQgOC9GaXJzdCA0OSAwIFIvTGFzdCA1
NiAwIFIKPj4KZW5kb2JqCgo0OSAwIG9iago8PC9Db3VudCAwL1RpdGxlPEZFRkYwMDQ5MDAyRTAw
MjAwMDQ5MDA2RTAwNzQwMDcyMDA2RjAwNjQwMDc1MDA2MzAwNzQwMDY5MDA2RjAwNkU+Ci9EZXN0
WzEgMCBSL1hZWiA1Ni43IDYyNSAwXS9QYXJlbnQgNDggMCBSL05leHQgNTAgMCBSPj4KZW5kb2Jq
Cgo1MCAwIG9iago8PC9Db3VudCAwL1RpdGxlPEZFRkYwMDQ5MDA0OTAwMkUwMDIwMDA0RDAwNkYw
MDc0MDA2OTAwNzYwMDYxMDA3NDAwNjkwMDZGMDA2RTAwMjAwMDYxMDA2RTAwNjQwMDIwMDA1MzAw
NjMwMDZGMDA3MDAwNjU+Ci9EZXN0WzEgMCBSL1hZWiA1Ni43IDU2MiAwXS9QYXJlbnQgNDggMCBS
L1ByZXYgNDkgMCBSL05leHQgNTEgMCBSPj4KZW5kb2JqCgo1MSAwIG9iago8PC9Db3VudCAwL1Rp
dGxlPEZFRkYwMDQ5MDA0OTAwNDkwMDJFMDAyMDAwNDUwMDc4MDA3MDAwNjUwMDYzMDA3NDAwNjUw
MDY0MDAyMDAwNEYwMDYyMDA2QTAwNjUwMDYzMDA3NDAwNjkwMDZGMDA2RTAwNzMwMDIwMDAyODAw
NjEwMDZFMDA2NDAwMjAwMDUyMDA2NTAwNzMwMDcwMDA2RjAwNkUwMDczMDA2NTAwNzMwMDI5Pgov
RGVzdFsxIDAgUi9YWVogNTYuNyAxODcgMF0vUGFyZW50IDQ4IDAgUi9QcmV2IDUwIDAgUi9OZXh0
IDUyIDAgUj4+CmVuZG9iagoKNTIgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDA0OTAwNTYw
MDJFMDAyMDAwNDkwMDZEMDA3MDAwNjEwMDYzMDA3NDAwMjAwMDRGMDA2RTAwMjAwMDc0MDA2ODAw
NjUwMDIwMDA1MzAwNzQwMDYxMDA2RTAwNjQwMDYxMDA3MjAwNjQ+Ci9EZXN0WzQgMCBSL1hZWiA1
Ni43IDUzMS4xIDBdL1BhcmVudCA0OCAwIFIvUHJldiA1MSAwIFIvTmV4dCA1MyAwIFI+PgplbmRv
YmoKCjUzIDAgb2JqCjw8L0NvdW50IDAvVGl0bGU8RkVGRjAwNTYwMDJFMDAyMDAwNDQwMDY1MDA3
MzAwNjkwMDY3MDA2RTAwMjAwMDQ0MDA2NTAwNjMwMDY5MDA3MzAwNjkwMDZGMDA2RTAwNzM+Ci9E
ZXN0WzQgMCBSL1hZWiA1Ni43IDQ4MC4xIDBdL1BhcmVudCA0OCAwIFIvUHJldiA1MiAwIFIvTmV4
dCA1NCAwIFI+PgplbmRvYmoKCjU0IDAgb2JqCjw8L0NvdW50IDAvVGl0bGU8RkVGRjAwNTYwMDQ5
MDAyRTAwMjAwMDRGMDA3MDAwNjUwMDZFMDAyMDAwNDkwMDczMDA3MzAwNzUwMDY1MDA3Mz4KL0Rl
c3RbNyAwIFIvWFlaIDU2LjcgMzk4LjYgMF0vUGFyZW50IDQ4IDAgUi9QcmV2IDUzIDAgUi9OZXh0
IDU1IDAgUj4+CmVuZG9iagoKNTUgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDA1NjAwNDkw
MDQ5MDAyRTAwMjAwMDUwMDA3MjAwNkYwMDcwMDA2RjAwNzMwMDY1MDA2NDAwMjAwMDU3MDA2RjAw
NzIwMDY0MDA2OTAwNkUwMDY3PgovRGVzdFs3IDAgUi9YWVogNTYuNyA5OC4xIDBdL1BhcmVudCA0
OCAwIFIvUHJldiA1NCAwIFIvTmV4dCA1NiAwIFI+PgplbmRvYmoKCjU2IDAgb2JqCjw8L0NvdW50
IDAvVGl0bGU8RkVGRjAwNTYwMDQ5MDA0OTAwNDkwMDJFMDAyMDAwNDEwMDYzMDA2QjAwNkUwMDZG
MDA3NzAwNkMwMDY1MDA2NDAwNjcwMDY1MDA2RDAwNjUwMDZFMDA3NDAwNzM+Ci9EZXN0WzEwIDAg
Ui9YWVogNTYuNyA3MzUuMiAwXS9QYXJlbnQgNDggMCBSL1ByZXYgNTUgMCBSPj4KZW5kb2JqCgox
NSAwIG9iago8PC9UeXBlL1BhZ2VzCi9SZXNvdXJjZXMgNDcgMCBSCi9NZWRpYUJveFsgMCAwIDYx
MSA3OTEgXQovS2lkc1sgMSAwIFIgNCAwIFIgNyAwIFIgMTAgMCBSIF0KL0NvdW50IDQ+PgplbmRv
YmoKCjEzIDAgb2JqCjw8L1R5cGUvQW5ub3QvU3VidHlwZS9MaW5rL0JvcmRlclswIDAgMF0vUmVj
dFs4NyAyMTAuOSAxMDkuMSAyMjIuOV0vQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwczov
L2dpdGh1Yi5jb20vZGFucmEvc2hpZnRfcHJvcG9zYWwpPj4KPj4KZW5kb2JqCgoxNCAwIG9iago8
PC9UeXBlL0Fubm90L1N1YnR5cGUvTGluay9Cb3JkZXJbMCAwIDBdL1JlY3RbNzMuNyAzMjYuNCAx
ODcuNSAzMzguNV0vQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwczovL2dpdGh1Yi5jb20v
ZGFucmEvc2hpZnRfcHJvcG9zYWwpPj4KPj4KZW5kb2JqCgo1NyAwIG9iago8PC9UeXBlL0NhdGFs
b2cvUGFnZXMgMTUgMCBSCi9PcGVuQWN0aW9uWzEgMCBSIC9YWVogbnVsbCBudWxsIDBdCi9PdXRs
aW5lcyA0OCAwIFIKL0xhbmcoZW4tVVMpCj4+CmVuZG9iagoKNTggMCBvYmoKPDwvQ3JlYXRvcjxG
RUZGMDA1NzAwNzIwMDY5MDA3NDAwNjUwMDcyPgovUHJvZHVjZXI8RkVGRjAwNEMwMDY5MDA2MjAw
NzIwMDY1MDA0RjAwNjYwMDY2MDA2OTAwNjMwMDY1MDAyMDAwMzUwMDJFMDAzND4KL0NyZWF0aW9u
RGF0ZShEOjIwMTcwODE5MDIxOTE5KzAzJzAwJyk+PgplbmRvYmoKCnhyZWYKMCA1OQowMDAwMDAw
MDAwIDY1NTM1IGYgCjAwMDAwNzE0MDUgMDAwMDAgbiAKMDAwMDAwMDAxOSAwMDAwMCBuIAowMDAw
MDAyMTMzIDAwMDAwIG4gCjAwMDAwNzE1OTMgMDAwMDAgbiAKMDAwMDAwMjE1NCAwMDAwMCBuIAow
MDAwMDA1MzM1IDAwMDAwIG4gCjAwMDAwNzE3NjMgMDAwMDAgbiAKMDAwMDAwNTM1NiAwMDAwMCBu
IAowMDAwMDA4MjMxIDAwMDAwIG4gCjAwMDAwNzE5NTEgMDAwMDAgbiAKMDAwMDAwODI1MiAwMDAw
MCBuIAowMDAwMDA4NzgxIDAwMDAwIG4gCjAwMDAwNzM4NzYgMDAwMDAgbiAKMDAwMDA3NDAzMyAw
MDAwMCBuIAowMDAwMDczNzU3IDAwMDAwIG4gCjAwMDAwMDg4MDIgMDAwMDAgbiAKMDAwMDAyODQz
NiAwMDAwMCBuIAowMDAwMDI4NDU5IDAwMDAwIG4gCjAwMDAwMjg2NTQgMDAwMDAgbiAKMDAwMDAy
OTI2MiAwMDAwMCBuIAowMDAwMDI5NzEzIDAwMDAwIG4gCjAwMDAwMzQ1MjIgMDAwMDAgbiAKMDAw
MDAzNDU0NCAwMDAwMCBuIAowMDAwMDM0NzQzIDAwMDAwIG4gCjAwMDAwMzUwNDMgMDAwMDAgbiAK
MDAwMDAzNTIxMCAwMDAwMCBuIAowMDAwMDQ1NDE2IDAwMDAwIG4gCjAwMDAwNDU0MzkgMDAwMDAg
biAKMDAwMDA0NTYzMyAwMDAwMCBuIAowMDAwMDQ2MDM1IDAwMDAwIG4gCjAwMDAwNDYyOTAgMDAw
MDAgbiAKMDAwMDA1NjM4NiAwMDAwMCBuIAowMDAwMDU2NDA5IDAwMDAwIG4gCjAwMDAwNTY2MDAg
MDAwMDAgbiAKMDAwMDA1NzA5MyAwMDAwMCBuIAowMDAwMDU3NDI0IDAwMDAwIG4gCjAwMDAwNjA3
MTMgMDAwMDAgbiAKMDAwMDA2MDczNSAwMDAwMCBuIAowMDAwMDYwOTMxIDAwMDAwIG4gCjAwMDAw
NjEyNzUgMDAwMDAgbiAKMDAwMDA2MTQ3OSAwMDAwMCBuIAowMDAwMDcwMzAzIDAwMDAwIG4gCjAw
MDAwNzAzMjUgMDAwMDAgbiAKMDAwMDA3MDUyOCAwMDAwMCBuIAowMDAwMDcwOTY4IDAwMDAwIG4g
CjAwMDAwNzEyNjcgMDAwMDAgbiAKMDAwMDA3MTM1MCAwMDAwMCBuIAowMDAwMDcyMTIzIDAwMDAw
IG4gCjAwMDAwNzIxNzkgMDAwMDAgbiAKMDAwMDA3MjMzNSAwMDAwMCBuIAowMDAwMDcyNTM5IDAw
MDAwIG4gCjAwMDAwNzI4MDcgMDAwMDAgbiAKMDAwMDA3MzAyMSAwMDAwMCBuIAowMDAwMDczMjA3
IDAwMDAwIG4gCjAwMDAwNzMzNzcgMDAwMDAgbiAKMDAwMDA3MzU3MCAwMDAwMCBuIAowMDAwMDc0
MTkyIDAwMDAwIG4gCjAwMDAwNzQzMDcgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDU5L1Jvb3Qg
NTcgMCBSCi9JbmZvIDU4IDAgUgovSUQgWyA8N0NGRUFBQzcwMDBGQTZGQ0NENjBFNTdBRDNEMTFG
QzI+Cjw3Q0ZFQUFDNzAwMEZBNkZDQ0Q2MEU1N0FEM0QxMUZDMj4gXQovRG9jQ2hlY2tzdW0gL0M5
OEY5RkNGOUQ5RkQ0QzQ0M0Y2MDlEOTM2MzU2N0VGCj4+CnN0YXJ0eHJlZgo3NDQ4MgolJUVPRgo=

------=_Part_2965_1433919928.1503098647401--

.


Author: W Brown <webrown.cpp@gmail.com>
Date: Fri, 18 Aug 2017 19:09:29 -0500
Raw View
> On Aug 18, 2017, at 6:24 PM, Dan Raviv <dan.raviv@gmail.com> wrote:
>
> <shift proposal.pdf>


- p. 1:  s/A main use case/An important use case/

- p. 1: "can be found _here_":  somewhere (bib?) the link should be written out in full

- speaking of a bib, I recommend one that includes a reference or two to the time series technique mentioned

- everwhere:  pages should be numbered, and (except p. 1) should have a header or trailer giving the paper number and title

- III title:  s/Expected Objections/Possible Objections/  or just retitle to FAQ

- V.1 strike "only" from "only bidirectional iterators" -- otherwise you seem to exclude random-access iter's; the next sentence has a similar issue

- ... and I suggest that next sentence ("This is similar....) be parenthesized -- it's not your main point here

- V.2  s/Following/Per/

- V.2 1st sentence seems unclear:  perhaps "is required to support fwd iter's"?

- V.3 s/an optional filler/overloads with a optional filler/

- Thank you for the ack.

Best,

-- WEB

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/E6A69ED7-A6E9-484B-A2E2-0C89FF540B3F%40gmail.com.

.


Author: Casey Carter <cartec69@gmail.com>
Date: Sun, 20 Aug 2017 13:59:19 -0700 (PDT)
Raw View
------=_Part_5748_1347520270.1503262759938
Content-Type: multipart/alternative;
 boundary="----=_Part_5749_712792630.1503262759939"

------=_Part_5749_712792630.1503262759939
Content-Type: text/plain; charset="UTF-8"

On Friday, August 18, 2017 at 4:24:07 PM UTC-7, Dan Raviv wrote:
>
> Hi,
>
> Attached an updated proposal draft.
>
> Would appreciate any comments, as well as opinions on any of the listed
> open issues.
>
> Thanks!
> Dan
>
>
I am not fond of the optional<value type> filler argument. I suspect that
the vast majority of use cases will NOT fill the emptied elements, and this
formulation - at least in non-optimizing compiles - is likely to generate
unused code for the fill operation. I'd prefer to see separate overloads
with an additional const T& argument whose value would be used to fill the
emptied elements, although realistically it's simple enough for users to
perform the fill themselves that I don't think the facility provides enough
value to standardize.

In V.1 you state that "Shifting [forward ranges] right is possible, but
inefficient, requiring either O(N) space or O(N^2) time." The fact that
std::rotate can efficiently rotate forward ranges suggests that they can be
efficiently shifted as well. I've implemented shift_right for forward
ranges in https://github.com/danra/shift_proposal/pull/1 - it has linear
complexity and requires constant additional space.

I don't buy the arguments that shift counts less than zero or greater than
the length of the sequence should have undefined behavior. Given that the
implementation must check the shift count to avoid UB for the shift-by-zero
case, I don't believe that guarding against negative shift counts incurs
any additional overhead. I think a similar argument applies for shift
counts greater than the length of the range vs. shift count exactly equal
to the length of the range. We certainly want shift by N to be valid, and
allowing shift by greater than N has negligible additional cost.

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/2f0f4461-e5f8-4dcb-b932-905a413e3346%40isocpp.org.

------=_Part_5749_712792630.1503262759939
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Friday, August 18, 2017 at 4:24:07 PM UTC-7, Dan Raviv =
wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8=
ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">Hi,<div=
><br></div><div>Attached an updated proposal draft.</div><div><br></div><di=
v>Would appreciate any comments, as well as opinions on any of the listed o=
pen issues.</div><div><br></div><div>Thanks!</div><div>Dan</div><div><br></=
div></div></blockquote><div><br></div><div>I am not fond of the optional&lt=
;value type&gt; filler argument. I suspect that the vast majority of use ca=
ses will NOT fill the emptied elements, and this formulation - at least in =
non-optimizing compiles - is likely to generate unused code for the fill op=
eration. I&#39;d prefer to see separate overloads with an additional const =
T&amp; argument whose value would be used to fill the emptied elements, alt=
hough realistically it&#39;s simple enough for users to perform the fill th=
emselves that I don&#39;t think the facility provides enough value to stand=
ardize.</div><div><br></div><div>In V.1 you state that &quot;Shifting [forw=
ard ranges] right is possible, but inefficient, requiring either O(N) space=
 or O(N^2) time.&quot; The fact that std::rotate can efficiently rotate for=
ward ranges suggests that they can be efficiently shifted as well. I&#39;ve=
 implemented shift_right for forward ranges in=C2=A0https://github.com/danr=
a/shift_proposal/pull/1 - it has linear complexity and requires constant ad=
ditional space.</div><div>=C2=A0</div><div>I don&#39;t buy the arguments th=
at shift counts less than zero or greater than the length of the sequence s=
hould have undefined behavior. Given that the implementation must check the=
 shift count to avoid UB for the shift-by-zero case, I don&#39;t believe th=
at guarding against negative shift counts incurs any additional overhead. I=
 think a similar argument applies for shift counts greater than the length =
of the range vs. shift count exactly equal to the length of the range. We c=
ertainly want shift by N to be valid, and allowing shift by greater than N =
has negligible additional cost.</div><div><br></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/2f0f4461-e5f8-4dcb-b932-905a413e3346%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/2f0f4461-e5f8-4dcb-b932-905a413e3346=
%40isocpp.org</a>.<br />

------=_Part_5749_712792630.1503262759939--

------=_Part_5748_1347520270.1503262759938--

.


Author: Bryce Glover <randomdsdevel@gmail.com>
Date: Mon, 21 Aug 2017 13:33:05 -0400
Raw View
--Apple-Mail=_A8AFB77F-4CAB-4EDC-9262-B9044A5A184E
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"

> On Aug 20, 2017, at 6:18 PM, std-proposals@isocpp.org wrote:
>=20
> On Saturday, 19 August 2017 14:48:26 PDT Bryce Glover wrote:
> > Whoops, forgot to change the subject after copying the part I quoted fr=
om
> > the digest=E2=80=A6:
> =20
> That is not enough. You have to copy the message's Message-Id to your ema=
il's=20
> In-Reply-To header.

     Darn it, I always forget about that!  And I think you=E2=80=99ve menti=
oned this before, too=E2=80=A6; like I think I=E2=80=99ve at least implied =
before, I don=E2=80=99t know how to set that header field from within Apple=
 Mail (or even if you can, for that matter!)   But enough of this off-topic=
 rambling=E2=80=A6

Slightly abashed,=20
     Bryce Glover
     RandomDSdevel@gmail.com

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/BEBA0AE7-9185-4B91-B080-93577476F7B2%40gmail.com=
..

--Apple-Mail=_A8AFB77F-4CAB-4EDC-9262-B9044A5A184E
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="UTF-8"

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div><blockquote t=
ype=3D"cite" class=3D""><div class=3D"">On Aug 20, 2017, at 6:18 PM, <a hre=
f=3D"mailto:std-proposals@isocpp.org" class=3D"">std-proposals@isocpp.org</=
a> wrote:</div><br class=3D"Apple-interchange-newline"><div class=3D""><spa=
n style=3D"color: rgb(46, 46, 46); font-family: arial; font-size: inherit; =
font-style: normal; font-variant-caps: normal; font-weight: normal; letter-=
spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-t=
ransform: none; white-space: normal; widows: auto; word-spacing: 0px; -webk=
it-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: non=
e; display: inline !important;" class=3D"">On Saturday, 19 August 2017 14:4=
8:26 PDT Bryce Glover wrote:</span><br style=3D"color: rgb(46, 46, 46); fon=
t-family: arial; font-style: normal; font-variant-caps: normal; font-weight=
: normal; letter-spacing: normal; orphans: auto; text-align: start; text-in=
dent: 0px; text-transform: none; white-space: normal; widows: auto; word-sp=
acing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,=
 255);" class=3D""><span style=3D"color: rgb(46, 46, 46); font-family: aria=
l; font-size: inherit; font-style: normal; font-variant-caps: normal; font-=
weight: normal; letter-spacing: normal; orphans: auto; text-align: start; t=
ext-indent: 0px; text-transform: none; white-space: normal; widows: auto; w=
ord-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255=
, 255, 255); float: none; display: inline !important;" class=3D"">&gt; Whoo=
ps, forgot to change the subject after copying the part I quoted from</span=
><br style=3D"color: rgb(46, 46, 46); font-family: arial; font-style: norma=
l; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: none; w=
hite-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-wi=
dth: 0px; background-color: rgb(255, 255, 255);" class=3D""><span style=3D"=
color: rgb(46, 46, 46); font-family: arial; font-size: inherit; font-style:=
 normal; font-variant-caps: normal; font-weight: normal; letter-spacing: no=
rmal; orphans: auto; text-align: start; text-indent: 0px; text-transform: n=
one; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-str=
oke-width: 0px; background-color: rgb(255, 255, 255); float: none; display:=
 inline !important;" class=3D"">&gt; the digest=E2=80=A6:</span><br style=
=3D"color: rgb(46, 46, 46); font-family: arial; font-style: normal; font-va=
riant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: a=
uto; 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);" class=3D""><span style=3D"color: rgb=
(46, 46, 46); font-family: arial; font-size: inherit; font-style: normal; f=
ont-variant-caps: normal; font-weight: normal; letter-spacing: normal; orph=
ans: 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); float: none; display: inline !i=
mportant;" class=3D"">&nbsp;</span><br style=3D"color: rgb(46, 46, 46); fon=
t-family: arial; font-style: normal; font-variant-caps: normal; font-weight=
: normal; letter-spacing: normal; orphans: auto; text-align: start; text-in=
dent: 0px; text-transform: none; white-space: normal; widows: auto; word-sp=
acing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,=
 255);" class=3D""><span style=3D"color: rgb(46, 46, 46); font-family: aria=
l; font-size: inherit; font-style: normal; font-variant-caps: normal; font-=
weight: normal; letter-spacing: normal; orphans: auto; text-align: start; t=
ext-indent: 0px; text-transform: none; white-space: normal; widows: auto; w=
ord-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255=
, 255, 255); float: none; display: inline !important;" class=3D"">That is n=
ot enough. You have to copy the message's Message-Id to your email's<span c=
lass=3D"Apple-converted-space">&nbsp;</span></span><br style=3D"color: rgb(=
46, 46, 46); font-family: arial; font-style: normal; font-variant-caps: nor=
mal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align=
: start; text-indent: 0px; text-transform: none; white-space: normal; widow=
s: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-colo=
r: rgb(255, 255, 255);" class=3D""><span style=3D"color: rgb(46, 46, 46); f=
ont-family: arial; font-size: inherit; font-style: normal; font-variant-cap=
s: 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; backgroun=
d-color: rgb(255, 255, 255); float: none; display: inline !important;" clas=
s=3D"">In-Reply-To header.</span></div></blockquote></div><br class=3D""><d=
iv class=3D"">&nbsp; &nbsp; &nbsp;Darn it, I <i class=3D"">always</i> forge=
t about that! &nbsp;And I think you=E2=80=99ve mentioned this before, too=
=E2=80=A6; like I think I=E2=80=99ve at least <i class=3D"">implied</i>&nbs=
p;before, I don=E2=80=99t know how to set that header field from within App=
le Mail (or even if you <i class=3D"">can</i>, for <i class=3D"">that</i>&n=
bsp;matter!) &nbsp;&nbsp;But enough of this off-topic rambling=E2=80=A6</di=
v><br class=3D""><div class=3D"">
<div style=3D"color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; t=
ext-align: start; text-indent: 0px; text-transform: none; white-space: norm=
al; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-w=
rap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-=
space;" class=3D""><div style=3D"color: rgb(0, 0, 0); letter-spacing: norma=
l; orphans: auto; text-align: start; text-indent: 0px; text-transform: none=
; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke=
-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-=
break: after-white-space;" class=3D""><div style=3D"color: rgb(0, 0, 0); le=
tter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; t=
ext-transform: none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div class=3D"">Sl=
ightly abashed,&nbsp;</div><div class=3D"">&nbsp; &nbsp; &nbsp;Bryce Glover=
</div><div class=3D"">&nbsp; &nbsp; &nbsp;<a href=3D"mailto:RandomDSdevel@g=
mail.com" class=3D"">RandomDSdevel@gmail.com</a></div></div></div></div>
</div>
</body></html>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/BEBA0AE7-9185-4B91-B080-93577476F7B2%=
40gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/BEBA0AE7-9185-4B91-B080-93577476F7B2%=
40gmail.com</a>.<br />

--Apple-Mail=_A8AFB77F-4CAB-4EDC-9262-B9044A5A184E--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Thu, 24 Aug 2017 15:00:27 -0700 (PDT)
Raw View
------=_Part_1921_1218046591.1503612028212
Content-Type: multipart/alternative;
 boundary="----=_Part_1922_2002497441.1503612028212"

------=_Part_1922_2002497441.1503612028212
Content-Type: text/plain; charset="UTF-8"

Hi!

Attached an updated proposal draft, now with shift_right for forward,
non-bidirectional iterators, courtesy of Casey Carter! You can check out
the implementation at https://github.com/danra/shift_proposal .

Also removed the filler functionality, following feedback which has proven
it to be redundant.

Would appreciate any further comments, as well as opinions on the listed
open issues.

Thanks,
Dan



On Saturday, August 19, 2017 at 2:24:07 AM UTC+3, Dan Raviv wrote:
>
> Hi,
>
> Attached an updated proposal draft.
>
> Would appreciate any comments, as well as opinions on any of the listed
> open issues.
>
> Thanks!
> Dan
>
> On Saturday, July 29, 2017 at 8:19:01 PM UTC+3, Dan Raviv wrote:
>>
>> Hi,
>>
>> Attached a proposal draft with reasoning and sample implementation (but
>> still no complete design and standard wording).
>> Would appreciate any feedback!
>>
>> Thanks,
>> Dan
>>
>> On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d...@soundradix.com
>> wrote:
>>>
>>> Hi,
>>>
>>> Would anyone be interested in adding std::shift to <algorithm>?
>>>
>>> It would be similar to both:
>>> - std::rotate, but without moving the head elements back to the tail.
>>> This would allow a more efficient implementation and clearer semantics in
>>> case rotation is not needed as well as correctness in case rotation is
>>> undesired.
>>> - <algorithm>'s std::move/std::move_backward (depending on the shift
>>> direction).
>>>
>>> std::shift should probably accommodate both left and right shifts by one
>>> of:
>>> - giving it either begin() and end(), or rbegin() and rend(), similar to
>>> how std::rotate works for both left and right rotations. The advantage is
>>> compactness of the implementation.
>>> - allowing the shift count parameter to be either positive or negative.
>>> The advantage is compactness, though it might not be clear which direction
>>> is which - to be consistent with rotate, positive integers should shift to
>>> the left.
>>> - having std::shift_right and std::shift_left functions. The advantage
>>> is clarity when calling the methods, although the same argument could be
>>> made for having separate std::rotate_left and std::rotate_right instead of
>>> std::rotate, which we don't have.
>>>
>>> Here's a sample implementation of a shift to the right direction:
>>>
>>> template<class BidirIt>
>>> void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
>>> {
>>>     std::move_backward(first, last - n, last);
>>> }
>>>
>>> This demonstrates that while std::shift is implementable with
>>> std::move/std::move_backward,
>>> 1) It isn't immediately clear from the code (at least to my eyes) that
>>> this is a shift right, unless you are intimately familiar with
>>> std::move_backward.
>>> 2) Different calls, either to std::move or to std::move_backward, are
>>> required, depending on the shift direction.
>>>
>>> So, implementing std::shift would allow writing more readable code.
>>>
>>> Thanks,
>>> Dan
>>>
>>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/faa1b7c8-58f4-4674-bff2-03d05bfabc6a%40isocpp.org.

------=_Part_1922_2002497441.1503612028212
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi!<div><br></div><div>Attached an updated proposal draft,=
 now with shift_right for forward, non-bidirectional iterators, courtesy of=
 Casey Carter! You can check out the implementation at=C2=A0https://github.=
com/danra/shift_proposal .</div><div><br></div><div>Also removed the filler=
 functionality, following feedback which has proven it to be redundant.</di=
v><div><br></div><div>Would appreciate any further comments, as well as opi=
nions on the listed open issues.</div><div><br></div><div>Thanks,</div><div=
>Dan</div><div><br></div><div><br><br>On Saturday, August 19, 2017 at 2:24:=
07 AM UTC+3, Dan Raviv wrote:<blockquote class=3D"gmail_quote" style=3D"mar=
gin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><=
div dir=3D"ltr">Hi,<div><br></div><div>Attached an updated proposal draft.<=
/div><div><br></div><div>Would appreciate any comments, as well as opinions=
 on any of the listed open issues.</div><div><br></div><div>Thanks!</div><d=
iv>Dan</div><div><br>On Saturday, July 29, 2017 at 8:19:01 PM UTC+3, Dan Ra=
viv wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div>=
<br></div><div>Attached a proposal draft with reasoning and sample implemen=
tation (but still no complete design and standard wording).<div>Would appre=
ciate any feedback!</div><div><br></div><div>Thanks,</div><div>Dan<br><br>O=
n Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, <a>d...@soundradix.com</a>=
 wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br=
></div><div>Would anyone be interested in adding std::shift to &lt;algorith=
m&gt;?=C2=A0</div><div><br></div><div>It would be similar to both:</div><di=
v>- std::rotate, but without moving the head elements back to the tail. Thi=
s would allow a more efficient implementation and clearer semantics in case=
 rotation is not needed as well as correctness in case rotation is undesire=
d.</div><div>- &lt;algorithm&gt;&#39;s std::move/std::move_backward (depend=
ing on the shift direction).</div><div><br></div><div>std::shift should pro=
bably accommodate both left and right shifts by one of:</div><div>- giving =
it either begin() and end(), or rbegin() and rend(), similar to how std::ro=
tate works for both left and right rotations. The advantage is compactness =
of the implementation.</div><div>- allowing the shift count parameter to be=
 either positive or negative. The advantage is compactness, though it might=
 not be clear which direction is which - to be consistent with rotate, posi=
tive integers should shift to the left.<br></div><div><div>- having std::sh=
ift_right and std::shift_left functions. The advantage is clarity when call=
ing the methods, although the same argument could be made for having separa=
te std::rotate_left and std::rotate_right instead of std::rotate, which we =
don&#39;t have.</div></div><div><br></div><div>Here&#39;s a sample implemen=
tation of a shift to the right direction:</div><br><div style=3D"background=
-color:rgb(250,250,250);border:1px solid rgb(187,187,187);word-wrap:break-w=
ord"><code><div><span style=3D"color:#008">template</span><span style=3D"co=
lor:#660">&lt;</span><span style=3D"color:#008">class</span><span style=3D"=
color:#000"> </span><span style=3D"color:#606">BidirIt</span><span style=3D=
"color:#660">&gt;</span><span style=3D"color:#000"> <br></span><span style=
=3D"color:#008">void</span><span style=3D"color:#000"> shift_right</span><s=
pan style=3D"color:#660">(</span><span style=3D"color:#606">BidirIt</span><=
span style=3D"color:#000"> first</span><span style=3D"color:#660">,</span><=
span style=3D"color:#000"> </span><span style=3D"color:#606">BidirIt</span>=
<span style=3D"color:#000"> </span><span style=3D"color:#008">last</span><s=
pan style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span s=
tyle=3D"color:#008">unsigned</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#008">int</span><span style=3D"color:#000"> n </span><span =
style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#066">1</span><span style=3D"color:#660">)</span><span style=3D=
"color:#000"> <br></span><span style=3D"color:#660">{</span><span style=3D"=
color:#000"> <br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</spa=
n><span style=3D"color:#000">move_backward</span><span style=3D"color:#660"=
>(</span><span style=3D"color:#000">first</span><span style=3D"color:#660">=
,</span><span style=3D"color:#000"> </span><span style=3D"color:#008">last<=
/span><span style=3D"color:#000"> </span><span style=3D"color:#660">-</span=
><span style=3D"color:#000"> n</span><span style=3D"color:#660">,</span><sp=
an style=3D"color:#000"> </span><span style=3D"color:#008">last</span><span=
 style=3D"color:#660">);</span><span style=3D"color:#000"> <br></span><span=
 style=3D"color:#660">}</span><span style=3D"color:#000"><br></span></div><=
/code></div><div><br></div><div>This demonstrates that while std::shift is =
implementable with std::move/std::move_backward,</div><div>1) It isn&#39;t =
immediately clear from the code (at least to my eyes) that this is a shift =
right, unless you are intimately familiar with std::move_backward.</div><di=
v>2) Different calls, either to std::move or to std::move_backward, are req=
uired, depending on the shift direction.</div><div><br></div><div>So, imple=
menting std::shift would allow writing more readable code.</div><div><br></=
div><div>Thanks,</div><div>Dan</div></div></blockquote></div></div></div></=
blockquote></div></div></blockquote></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/faa1b7c8-58f4-4674-bff2-03d05bfabc6a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/faa1b7c8-58f4-4674-bff2-03d05bfabc6a=
%40isocpp.org</a>.<br />

------=_Part_1922_2002497441.1503612028212--

------=_Part_1921_1218046591.1503612028212
Content-Type: application/pdf; name="shift proposal.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="shift proposal.pdf"
X-Attachment-Id: 29de9b90-85fa-4339-b870-9504cb603580
Content-ID: <29de9b90-85fa-4339-b870-9504cb603580>

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
Oaue1Wn1DiKEWJpqFLCXolXoNY4J8jonvSs9mXJ2xYPuFhEnXDWPaRszMrtM1nH+lK3YoTGPelik
ag1dIlWTeWja/I5YF2+Px7Oz7IUnPdl0Mu2RaouJ2k7T3kCCEjW01Xwo2KnxTO/4O/KNZT5Qe4Zf
N0q5F515B9PYxelgPc7/HGdYKafXzjGPwBEnmF3MmerXxjn7zCR/kfvsavLEoY5zEjnKNQ0ichln
mT/nwdW6f8rBVeKLOv0scwOefuIss5b0TT7YKunb4ow0PCnbK/EzpsMHhx/ff+Cxx37U+eC647y6
8NcX1h7OOeqfUmMtvS5Hby6u3u73Hjj69QNPPH7LLU+Y9syZV/ivl54vvDOvf6G3geJJ7ZCZ06XV
Milnvx0YmMYXjtI5PVHRpSq/T/j7Bqu2a0pbMNpupxYG0Yl0YYM+2KDPsEEf0OEDOnxAhw/o8AEd
PqDDB3T4GNWIj0NOQIyvLdRcMyIGiIo16tRbtLspRu/ExU5j9E6M3onROzF6J0bvxOidGL0To3cy
2gw9DjkBOQX5BEIWnoV1dxfH7SGEET0JDAUJQ8G/t0XRRh1tWoesH/0cQRYiM6d44il6i1J3yqLo
XloPObvP0KFN0dheGHU5kXodn1y8yXM+HJrytBpPz88krsgl1J94/TwUCqSaeF0svtRRlViW+xa/
4YokbUf9VyquqoXX+K7CiXhG07D2rYUzre/Vht1+fzg8rdJkKmtP7SqsgLNU/CGvWs17Sf/a+Sx+
BSb2w3/u6SzDki20ghZtBSUtT/vHg7i3IB9RDVbL0yTkaZI4gaWc99TVfcYZK86eHH9D+rislmV5
eAT53D8vy6fcxyNOuFJU7NHPutq1UwB2cKXd4Eo7RrdjdDtGt2N0O0a3Y3Q7Rrczyp2PQ05QbH0N
MSfFz2mrcZpSmhQ/l1bVie0ixVp6nREa/+Pn2nS2qwPb1WlnNowacnGzmwovxte6evjZ3wBymiXT
9j0fP3/7X5MB22+v3vHd1Vd5U5cvCroWLLnui5c/Vt+o/P7mw68sNw0HH/ryo29sn+NXV928fvAG
W5lUNrO7UpKr18y79vo1Ue/0nc/uX3uz4KE7+ZDcakpTPYjRMVZJnGwTDlEcdzYS7OedbrdTmu6e
4nfwIU/9Okd9vWOd3Sf82YLCZvkb4ns5bfy72rk6h2CzGDIZSYv9GGIQhhiEIQZhiEEYYhDt26BH
ILTB8wLkVcMnvInGB7pPiBW/iUO5jzlNJ4ezLFbcgaXtSvqWUpPQH1VmQ2n6q9KzXPWkx/oSxvFR
h+/cxGjiLNfEt8z+OWf86o2vo5FrswDVFsO1WeDaLHBtFngFC1ybBa7NAtdmgWuzYAYWuDYLXJtF
OPdm/eQ/0WG9/sU0KsxQLTOa1nZnqbBfXZJXOUp25biNYpmovodXmhCfdX769PAB+LsDtzxq2tpz
9EvPF8Z53b8tvm+O138oHsvOdpDPixfmpJV4jL948yOP7bv5saOnH+HfmNNfeP5XvG7OnKUuZxhZ
wqfvIR4SRWzxnUp+k7xKWgMVehG4jYrvApeL4IdidZeGvUnfWZj87oi0xx8K+U/vCoCWS9omjxqJ
xmLRaIxfEkNLUaIK3e/l8TdkBj6i7whVat8RsqQ1/0qlhbq0xgCf75tjgoMs4CCLwUEWcJAFHGQB
B1nAQRZwkAUcZAEHWRgB4TjkhK5Si5VirMnfEaom+FVrzGMvHjitNuIjtzh8PhdyJWQ1ZAdkL+QQ
5AHIU5AXIa8ZO11/RuNDEVDRd7lMLqe9NWdvbzNJYZPNSm2b1WRatXX37q3bdu/e9szrrz/zzH/+
p7yr8O7HnxT+L7d98jG3frqEL+ftvI0vLxwuvIyf7zHxaBD/7923Xls37QPuqaAIh/1gj/ZK/8bf
Lvjkt8ruE9TA9U68misKEx9ixSvF9/LL0EQvZjXCbmJXsSHoYYCtGC+wWfxeXJnFlrCj+NzV42+j
/8fsmfF3+GE+hOVfw8FruL4IljXAnkAI3Iu+e6HDO9kC/OXLYvyp7Hp+PX/JNCYdkcPyN8ty5sry
YPni8r9UfNtyd+V3qs34+U3Nn2pfqmurG6n7lbXDusZ2ub3HfsRR73S6Olwf19/pXtiQ8rRMaZly
p3eL9zuNDzf+0fcdfSYptlB8/9eYVyXBUYoTl+Cdjy8rzndx8TNkC4v1tgntlXpbAlWt19u01b9P
b5exCvZNvQ0vBc7g+g0t7Pt62yR4RGtLILTH9DaN81O9XYb+l/Q2Hbj+HT2lLItvLb8l2oANksC/
inY52tXsU9G2UD8vF+0qtK3cJdrV9BmuiLZV9GdF24Z2JZ8p2nYan/eLtkN85lLRdoq/XSra9aI9
JNoeca+dou0T/US+vEI8J6c9Y15dKfrvmL1x084ta1ev2RZ8KJjt6so0d2WDy3YGZ63dtnXblpVL
h4IXbVjeEjznU7lMpos+N3PTpvUrtc/MXL8+KD6zNbhl5daVW65buaJl9sbtW9au3LJo5ert65du
0d91B7PZlsyK3MpsdzCXybY3Z/LNmax+0bikv12wMTh7zdINq1devHb10m3bMfDsjUNDGzcEi+8v
27R0+doNq+dsX79+Z3D+xg0bt6Jj5YrelauWbl+/LahfXufZcNudv2GXsC1sBZhmA2x8CwC+Eb+H
2FJAZhEgtJptR2vppCt0be15PrlR/+TKzNuZRzJvZk5lTr/4lWcafvlEyUhr0Zp8l5K27Jezcr88
V56O312lVxZ37vvFJZdN+jsRbfydf6DCJKOjtyDZJKdTLqLxEzT6Yb1pFoYHZKwi+RNYwrVsHpsO
qzN6zGzmpM+wn2CghfhQ6Z+ZzvkzCZQx6c9GxJd7yulrAtr/WMDY/wMJtivRCmVuZHN0cmVhbQpl
bmRvYmoKCjE4IDAgb2JqCjk3NTQKZW5kb2JqCgoxOSAwIG9iago8PC9UeXBlL0ZvbnREZXNjcmlw
dG9yL0ZvbnROYW1lL0VBQUFBQStDb3VyaWVyCi9GbGFncyA0Ci9Gb250QkJveFstNjU0IC00MDkg
MTA2MiAxMDkwXS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgNzUzCi9EZXNjZW50IC0yNDYKL0NhcEhl
aWdodCAxMDg5Ci9TdGVtViA4MAovRm9udEZpbGUyIDE3IDAgUgo+PgplbmRvYmoKCjIwIDAgb2Jq
Cjw8L0xlbmd0aCA0MTYvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZNNj5swEIbv/Aof
t4cVeCCwK0VI2WQj5dAPNdsfQGCSIjUGOeSQf1+/ft1W6gH0eDxjHoYh3x52Bzcu+Tc/9UddzHl0
g9fbdPe9mpNeRpdZMcPYL2kV7/21m7M81B4ft0WvB3ee1uss/x72bot/mKfNMJ30U5Z/9YP60V3M
04/tMayP93n+pVd1iymytjWDnsM5n7v5S3fVPFY9H4awPS6P51DyL+HjMauRuLZU6adBb3PXq+/c
RbN1UbRmvd+3mbrhv72qZMnp3P/sfEi1IbUoym0bWCLXFlySY7wiN+AVeQ+uIzcCbhh/Bb8wXoFf
GX8Bb8g78Buf+w7ekjfgHXNW4HeeU4D3jJeBbcF4ZPoLciz9qxpM/wbONvnDx9K/gqelfx3z6b/C
e1n6C5wt/QV9sPRvYi39a/hb+kuM0798A9O/wrtY+jc4U5I/4kL/FfyF/gIfSf6Rkz/6LKn/OF/o
L3AQ+pfoiSR/9Fno3+CbCv3LGE/9L+KQpGnAuGCe/4yh6e/ehxGMQx9nD1M3OjV/f4x5mlEWr9+g
qtAgCmVuZHN0cmVhbQplbmRvYmoKCjIxIDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVU
eXBlL0Jhc2VGb250L0VBQUFBQStDb3VyaWVyCi9GaXJzdENoYXIgMAovTGFzdENoYXIgNDMKL1dp
ZHRoc1s2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAg
NjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2
MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYw
MCA2MDAgNjAwIF0KL0ZvbnREZXNjcmlwdG9yIDE5IDAgUgovVG9Vbmljb2RlIDIwIDAgUgo+Pgpl
bmRvYmoKCjIyIDAgb2JqCjw8L0xlbmd0aCAyMyAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0
aDEgNTU0MD4+CnN0cmVhbQp4nOVYeXBbxRnffe9J8qEolmPLjo/kybctyzosWZaUEB+Sk2ASDKFg
ZRIHJZaPIFtGtnMAGZy2DNSB0AOS0AHKNZkWOoxh0laJYWBa6EAJgzlCOk16ZEqBtGkaEtMJ00Tp
b/c9KSZkMv2/8nzS7/t23+537z6PxccjRE8miEhaNg2FR8rmmXIJIYcJobmbtozJ7eKsBvgvkJX0
jfQPrXqq+yT4C6DR/uj2vj98EfiSEHGEEP3hgUi49+EfvPhrQnKWYH7TAARZyUwt+DHwFQNDY9ve
EmQJ/D7wRdHYpvCZBZuN4A8wfii8beRhsUQAPwNeHg4PRaYOBSn4M4RIhpHYKNYRMZRP2PhIPDJy
4cRAD3gZ/HdBFH/sowfUMl4QJY1Wl5GZlU3+Pz915Bh5kPybPEjzwC1OjhJJfJwUSc8Qc4KQ+s4E
0XZ1v0Tp7lCCXrovQQKlB4mWiBt6rAlC62U5OBiYoreDEeohqDMDifVyx5RY2XFzd3lInpQnV/ZO
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
Vxm/Z++Na4jy78RrfHAeWcgh1INABAs9hOkiA6/hp4FU8H47j9WZ5TVUy02wwoUD2KRKNHhvmzuH
vIaFXFjQPOcx4YrHsBurYB27Sir/y/ovcAJ+tAplbmRzdHJlYW0KZW5kb2JqCgoyMyAwIG9iagoz
MjAzCmVuZG9iagoKMjQgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9EQUFB
QUErQ291cmllci1Cb2xkCi9GbGFncyA0Ci9Gb250QkJveFstNjU1IC00MDMgMTA3NCAxMTE5XS9J
dGFsaWNBbmdsZSAwCi9Bc2NlbnQgNzUzCi9EZXNjZW50IC0yNDYKL0NhcEhlaWdodCAxMTE4Ci9T
dGVtViA4MAovRm9udEZpbGUyIDIyIDAgUgo+PgplbmRvYmoKCjI1IDAgb2JqCjw8L0xlbmd0aCAy
NzQvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZHLbsMgEEX3fAXLdBH5kTROJMtS6tSS
F32obj8Aw9hFqgFhvPDflwG3lboAnXlcuAxJ3d5aJV3yajXvwNFBKmFh1ovlQHsYpSJZToXkbovC
zidmSOK13To7mFo16LIkyZuvzc6udHcVuoc7krxYAVaqke4+6s7H3WLMF0ygHE1JVVEBgz/niZln
NkESVPtW+LJ0695L/hreVwM0D3EWrXAtYDaMg2VqBFKmaUXLpqkIKPGvlm2SfuCfzPrWzLem6aGu
POeBTxnyIXLIHyMXyPeRG+RT4CJHLmL+gnyO+SPyJebPyNfIN+SHeO9jMLm5Qbs4z58xUL5Y60cQ
hh7ejq+WCujvxxhtUBbWN9dqhUEKZW5kc3RyZWFtCmVuZG9iagoKMjYgMCBvYmoKPDwvVHlwZS9G
b250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvREFBQUFBK0NvdXJpZXItQm9sZAovRmlyc3RD
aGFyIDAKL0xhc3RDaGFyIDExCi9XaWR0aHNbNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYw
MCA2MDAgNjAwIDYwMCA2MDAgXQovRm9udERlc2NyaXB0b3IgMjQgMCBSCi9Ub1VuaWNvZGUgMjUg
MCBSCj4+CmVuZG9iagoKMjcgMCBvYmoKPDwvTGVuZ3RoIDI4IDAgUi9GaWx0ZXIvRmxhdGVEZWNv
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
Kenxso2TPHF4POqwJzYr6/HBLbGQ9MxewixgZjN5porJMCEmyLgZF2Nk9SzHalgVq2BZVsZSLNAt
axwa/ViIi6qAUcaJmYySohwkmCPElCgpFgRmCSAt8Ve9B/Et5oEma5O+UVfoaPuOZGE5jX/XxzV4
Z/fMeYOPu3oGK0Rg1NXTPVgl/kj9Efwn/Gl72xH8mZj1wDmP/9Q+Qyrn23p6rN2Dk6bNG8KftS8b
goplfYOCWPkZFAwKfdCge3CO1A+KQlHbETRLzKAfohpFxX6AZKulZjeVmqWhF2jWJmZis5MoLTVL
EyelZj8Xm+3fHm1v2x+NSk3oFNouNdlOp8QmgPDSyDNwadv+dFpqpRjEGWncGcWg1JFL6iiXgyaN
ObHJ/oocNNifq5Cq0+eqE6XqGaXqGVL1BeeqU6XqPaXqPVD9nTj+f/Dpb/k/a/f0Bfddc7/4XwMW
+tv74Vg4ePPAUuvg1ou93v3X3Ff+dwKhhRcvWirmff2D9/n72wav8bd5919w/3dU3y9WX+Bv24/u
b581b//9Qn/bgQuEC6R/NvD0jbesa//WvW4av9e6W76js1vEztaJ97qx/Tuq28XqG8V7tYv3ahfv
daNwo3Qv8dnal81s2fAdn42bNl20YcNF6P8CTO+r9wplbmRzdHJlYW0KZW5kb2JqCgoyOCAwIG9i
agoxOTYxMwplbmRvYmoKCjI5IDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUv
QkFBQUFBK1RpbWVzLVJvbWFuCi9GbGFncyA0Ci9Gb250QkJveFstMjAzIC00MjggMTcwMCAxMjcy
XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgNzUwCi9EZXNjZW50IC0yNTAKL0NhcEhlaWdodCAxMjcx
Ci9TdGVtViA4MAovRm9udEZpbGUyIDI3IDAgUgo+PgplbmRvYmoKCjMwIDAgb2JqCjw8L0xlbmd0
aCA1NDIvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZRNj5swEIbv/Aoft4cV2B5gV4oi
pclGyqEfarY/gICTIjWACDnk39fvvG5X6mFXD/aM88zgId8edoehX/Lv89gew2LO/dDN4Tbe5zaY
U7j0Q2ad6fp2SU/6v702U5bH3OPjtoTrYTiPq1WW/4h7t2V+mKdNN57Cpyz/Nndh7oeLefq5Pcbn
432afodrGBZTZOu16cI5nvOlmb4215Br1vOhi9v98niOKR8B748pGKfPlirt2IXb1LRhboZLyFZF
sTar/X6dhaH7b68WppzO7a9mjqE2hhaFyDqyU672YE/2YFGuS3DJ9R24Iut6TX4DvzBez3xVdgV4
wxgH/swY5a2y34B3ZI1/I9fgPbmKbAvyK5j+Jc6xyd+C6e91nf5e1+nv4G/p71/A9PeoxdJfNJ7+
lcbQv1YH+lfqkPy3YPpXqN3S36Enlv6Cuhz9K9Tl6F8h19HfI97RX3Sd/gI3R/9Sc+kvyskfdTn6
l3Bw9K/xHl3yV4fkj1oc/UVj6B+3I9O/1HX61/gtn/wR4+lfow/efZzp6e9wlzz9S+XUf9Tl4e8K
q7n0d8qp/xqf+o+74env8C48/UXjU//Vh/6CHnr6i8an+4NahP411iX543yhf433Lp5u8BQho7dC
f4/eSro/8BT6l+itJH/0QegvuIdC/3Kjg5kmECOKb8jf0TftfZ7j2OuHRucdk94Pwfz7GE3jhDT9
+wPZQRj3CmVuZHN0cmVhbQplbmRvYmoKCjMxIDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1Ry
dWVUeXBlL0Jhc2VGb250L0JBQUFBQStUaW1lcy1Sb21hbgovRmlyc3RDaGFyIDAKL0xhc3RDaGFy
IDc0Ci9XaWR0aHNbNzIyIDcyMiA1MDAgNDQzIDUwMCA3NzcgNDQzIDUwMCAyNzcgMjUwIDUwMCAz
MzMgMjc3IDUwMCA1MDAgNTAwCjUwMCA2NjYgNDQzIDUwMCA1MDAgMzMzIDUwMCA1MDAgNzIyIDUw
MCA1MDAgMjc3IDU2MyA1MDAgMjUwIDkyMAo1MDAgMjc3IDU2MyA2MTAgNjEwIDk0MyA3MjIgNTYz
IDYxMCAzODkgNTAwIDMzMyA2NjYgNTYzIDU1NiA3MjIKNTAwIDUwMCA1NTYgMjc3IDUwMCAyNTAg
MzMzIDMzMyA3MjIgMjc3IDMzMyAzMzMgMjc3IDcyMiA3MjIgNTAwCjUwMCA0NDMgNTAwIDQ0MyA0
NDMgNTAwIDQ0MyA1NTYgNTU2IDY2NiA2MTAgXQovRm9udERlc2NyaXB0b3IgMjkgMCBSCi9Ub1Vu
aWNvZGUgMzAgMCBSCj4+CmVuZG9iagoKMzIgMCBvYmoKPDwvTGVuZ3RoIDMzIDAgUi9GaWx0ZXIv
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
Ye5/9ANLly3vI7A7NfqhmGoe3S42C/t33PcD3feR7h1i8350X8uCzv33SanmsR3SDvk/+A/MuWfW
bd9ba/v5tWbd8wOT3UMmm0XWmnPbD3TfRrrnkLVuI2vdRtaaI82R12rpn9+04aLfxqGhLPLDYtgA
d/3/AE223IwKZW5kc3RyZWFtCmVuZG9iagoKMzMgMCBvYmoKMTAxMTkKZW5kb2JqCgozNCAwIG9i
ago8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0dBQUFBQStUaW1lcy1Cb2xkCi9GbGFn
cyA0Ci9Gb250QkJveFstMjI3IC00MDcgMTc3OCAxMjk1XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQg
NzUwCi9EZXNjZW50IC0yNTAKL0NhcEhlaWdodCAxMjk0Ci9TdGVtViA4MAovRm9udEZpbGUyIDMy
IDAgUgo+PgplbmRvYmoKCjM1IDAgb2JqCjw8L0xlbmd0aCAzMzIvRmlsdGVyL0ZsYXRlRGVjb2Rl
Pj4Kc3RyZWFtCnicXZJNboMwEIX3nMLLdBGBCYFGQkgJCRKL/qi0ByD2kCIVYxmy4Pb1zNBW6gL0
zfg9+8njsKzPtenn8NWNqoFZdL3RDqbx7hSIK9x6E8hY6F7Na0V/NbQ2CL23WaYZhtp0Y54H4Ztf
m2a3iM1Rj1d4CMIXp8H15iY2H2Xj6+Zu7RcMYGYRBUUhNHR+n6fWPrcDhOTa1tov9/Oy9ZY/wfti
QcRUS46iRg2TbRW41twgyKOoEHlVFQEY/W8tTthy7dRn67xUemkU7dPCc0ycHJB3xPEFOWGOkPes
qZBT4oz6GXG6R35kJu+BNTvkIzNpTnwueUvux8hn9tL+F+YEuWJ95llG3MeckvOn1F/zS2TOn+K5
kvOnJ2TOn5Ge86cl8pr/jMz5s4QucL0pvEqc9c+IhLo758dDD4LmghPpDYjfR2NHizb6vgEooqOE
CmVuZHN0cmVhbQplbmRvYmoKCjM2IDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBl
L0Jhc2VGb250L0dBQUFBQStUaW1lcy1Cb2xkCi9GaXJzdENoYXIgMAovTGFzdENoYXIgMjQKL1dp
ZHRoc1s3NzcgNzIyIDM4OSAyNTAgMjUwIDc3NyA1NTYgNDQzIDU1NiAzODkgNTU2IDYxMCA0NDMg
NTAwIDU1NiAxMDAwCjI3NyA1MDAgNzIyIDQ0MyA1NTYgNzIyIDI3NyA4MzMgMzMzIF0KL0ZvbnRE
ZXNjcmlwdG9yIDM0IDAgUgovVG9Vbmljb2RlIDM1IDAgUgo+PgplbmRvYmoKCjM3IDAgb2JqCjw8
L0xlbmd0aCAzOCAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMTM1ODA+PgpzdHJlYW0K
eJzdent8VNW18F7nMa+cZOZMMplMBpgzGfIyT/LgZSCHQEIoaEJCMMMrGTITEkwyY2YAsSihtRWC
Cl6x9dZWuC3XWqsyQSzxCW2t9l6gotVaS61U7cNWC23RtkpOvrX3nAkBH/39vt/313cm55y11157
rbXXY++1JxMb3BQiEhkiPFG7+gOR3TfsGiKEnCQE7F2bY8qjG/21CJ8lhNvZHdnQ/42jay4QIvQQ
YjyyoW9r94+uuStIiDSFEOfenlAg2NldX0GI72HkMbMHEWHtS0Zsv4Pt6T39sRt/Z910C4ImbA/1
hbsCP12XtgrbO7Fd1x+4MfIkf5bHNsonykCgP/TzeXObsP0eISmRSDgaI6goIeVraH9kMBQhYw/P
wfY21Gkv4gA/9JIQNNA2xwuiwWgyW1Kk1DSrTbanZzgynVmubPeUqdM85P/7SzwpniQ3izuIg2xl
z8suYS7JIFsIGX+Pti49tevG//H/UgsTe4ILcskH5M+TOn5Ifk6eJHHy4mRqyIdC6j2wk3fIBfL8
Z3FFfh5YxsA3yUvkJ+Txz6DjyPdgjPwSXBjnRxGiuFpyBtaiPg8hbhO5Ay7CVvCSA2BjvTOQdxoI
n8JrHoyTs6jdPnKW7INF5KwY5V3Y8UvuJ+Sb/A7uFDmBOl/L3YG4cfIaOQnlUE+i5Ah5gDGIorw7
JnPEeP42uZd8+RJWfFR7WtwxVk7k8Q/JD8jTzALbyTDpnBh0Hv4CezEnXWCCpE+fTXYaG/mN3A84
buxubNxFNuAdgNeR+g5+wRXTeUgLaz0gkrtRg7dgOdmDXB7VntAOknXkEPcqaSN/Iw8IDgNmFf9b
YuM+IlbtFfjT+N/JKNO9i6SMWcc/SDAz7BC2EIfwOo2h8Z9o29Gup8jf0PqvgktdvHqVv71tRWvL
8uama69ZtvQLSxoXN9QvWli3QK2dP6/m6rlzZs+aWT2jvKy0pLggPy93ui/H68nKkG3WtNQUi9lk
NIgCzwEpVuLQWR/ncxW5IeCr9wUaS4qV+qyeRSXF9b6GzrgSUOL4EvJ8jY0M5QvElU4lnoevwCR0
Z1xFyu4rKNUEpTpBCTalhtRQET4lfmqRTxmFVcvbEb5jkc+vxN9n8DUMFvJYIxUbXi+OYFpRbZX6
eMPmnuH6TtQRRlIsC30LQ5aSYjJiSUEwBaF4gS8yAgXzgQFcQf3cEY6YUqlYnGl9IBhvXt5ev8jt
9fpLipfE03yLWBdZyFjGDQvjRsZS6aWqk93KSPHx4dtHbWR9Z5EU9AUDa9rjfADHDvP1w8O3xeWi
eKFvUbzwpneycOaheLFvUX28iHJd2jIhZ+klkRAXc20+ZfgDgtPxvf/e5ZiAjjHk2j4gFIxzC+PQ
0u6ll7sBbT083OBTGoY7hwOj40PrfYrNNzwiScORejQ3aW5HFqPjT+52xxtu98dtnT0w169PvaFl
aTx9+er2OJfboPQEEIN/tT7vbLdXnqBp/qxugmZB46CFvV5qht2jKlmPjfjQ8vZEWyHr3YeJWlbk
j3OdtOd4ssfRRnuGkj0Twzt96Nulre3DcSF3SdBXjxbfHYgPrcfo2kgd47PF0z50e33DdlmZU+Zn
tApqtSTYq8TFPDQSjpo8AOOGDhm2sUbah4nX+24UkCfblTk+ZEP51PvqO/W/zT1ZyEBBQzcWJQJh
RXtcXYSAGtA9Vj9SXoYjAp3osN5FzJnxMl8knuGrm/AuVau+t7WdDdGHxTMWxklnlz4qXlbP8kqp
H+5clFCB8vItb3+CVI6fHalS3I9VkiriX0SJMxdilOXVD7cHu+OeTncQ865baXd746ofPez3tYf8
NOzQQoVn3Sw4/CxWVrQvbfUtXb6qfbauSKKDshNy669g42t3J9hgAMZNuSalnXPzfiS0IUJpQMBX
V4PPuDHXhLcNDc6wNHDrapR2cJMkNaoRL1TqQ4t0Otq+jKlIw2lhY5KbgTaRz8JGt9fvTVwlxRx2
K7pgHGGiRm1MduEyhR0mjM+FjQxFbZlFg15p94V8fl+PEleb2+ncqHmYlXVjMJvrvlpxWWuSsdBM
xIvdyQY1ZryhyD3ZuPHFrD3RbLyie0myWxk2+Za2DlPmPp0hQc2XxAkNYXW27GZrAU1oH669ig1T
miX08Iiq0mTumUuZ+JYEh32t7TWMGteTm903UVl2shSWrqgrKcalrW7EBzuXj6iws3VV+xO45So7
V7Qf5oBb2FnnH5mOfe1PKISoDMtRLEXShkIblFMLNkyM3v2EisUk6xUYgrW7RoEwnCmJA9I1yiVw
toSgPCZIJRz2CIkeNUktIM6UwA0xHLtGCDWZahFVk2pWJS6Vc48ARR1GzJO4S5qBPCZBKrhHcFQL
Q4/C0IhZdScohpBCTWi4s+2S6LZV7Y9JBIexJwqqoxeGS1YPOhu3lXolSANlm79nuNNPk41komvw
D+Lgm49u8s1HRQxS3OIL1cVTfHUUX0vxtQm8geKNGKKQCTh8CH3fHAcaAavbvZiSSvb/uIdt71NP
+XFRGbb9rgSVO4XVSAXWjTwxEo+aauBEnuPNJpEXEFV7quyUbIc5c+RKuXJGebpX9qbLXvmUEPr4
vmX8KXHHR9vF6o+dwru0OOBIJfK6C3kZiZUzquOpQCTOhIx5wSCaBJORt8lGievwp5pESTJQEfav
yhCTIShDqwwLZaiSIVeGTBk4Gf4uwzsyvCLDT2T4gQzfkeFuGW6VYZMM3TKskKGe0U+XwSGDIEPP
BzL8LjngMRnIARn+g41ACetlaJahToYKNiIh4bwMb7EBz8lwWIaDMuyV4UtJ+hYZFskwk9HbGP0F
ptEvkvTflmGfDDiDzWwGCXrUKE+GDBkMaliG2X9LDvmRDEdkeIDpk6DHGTQwYrsMQBh35BuX4QDj
mzBLc5JpBmP0HOOyj3GJMIJFCeVwvGnd2o61yeuGS9dgx+Dka93aK64brrgm0Xb8mxGktqK2ck6Z
fU5lEckqw0hxYqRU0mCR7Rg0c+bMKPfy+AGvGYxpgGC+0H/z2B9u1l7nOFjDkbEWg2XK/XDP7iLo
0e6l8SQ8mDl9jVYF9+xMxNSK8feENXjCySReMl9VnLzdnj7VnG7O8dmJlN3kt0o2g6fJzxsyiSPi
A1SpliqTeEzELmqFqpRCtc/gy+Fkm72yItNZmY+xnOGEqjxfjsFhq6yYyS8TUoTV48/87PUXot8t
QRVdJu3tTYM3DLwRvsm6teA5PLeYMfVzOzsOw+6PleBOznfomaNPa3t/TA8OpBF19QhNpIAMqvVG
gzfDnZ1KSHaGQSi8ypvq5J3Tlvt/5IZON/BWt8fNWQS322njLcv9GcbpRs5o5DObr4L4VVB+FahX
QdlVQG09SGory9ayOZV1MB8XyXaC80qYO/GZUQ4Zgi8nL3/WNMCJVFfl5Zdy1VUz6TyNpUAnmJHp
nMYLHm387Tffz/+HY8PQ5r7rev7ywHXnzvzwz1P/Ja3rDgavWb39J1sWQ823Hrvjntxr1Bq1ap6j
bPmOdfc98rU7s+sWVNaUzbJnz1q2Bee6B8+WQfSLgzSrZXar1WYy2ozOTJnYjA4Hz6c0+3nbASfs
dcJ5J8SdkIAjTjjnhLV6nJHaIplU4rwmOwpnMh+nkOlA59io3vhGNxnh4JyHtzw8qv3xh903a39A
z/Drt0VeOTnWwq2DqYd2jT0jntSu7++hMYO6wYOoG13TVqozeaORCILJLFoFB5BWP5BmXKLNEDfD
ATNsN0OnGTxmOGeG02Y4zvBDZrgU6UxRND/TksU3LoXVXgegXnvARZURxl588WNemPvx8zQOfKjE
o8w2C9XpqelgAI5zCA7BmWmxLvdb0HKi0ORPF63gOOaEIWoQFrbMGEVUSgXmD5NUgeZAMb7qSuZM
p4PG6lSodMDr2h/vv/+b+5u6Cgsbr36V33bxVn7bszfcfaftcfOcxrZnqR6u8b9wd4mzUY+r1anp
kmRJNaUKQqYzVTSITX6LwWQyWInc5Mfkqk3El8yUmJgnm6qYk1dNFZhV6ah0+OSMzMqKWXhePLjt
q7u+3h4/daqm1juvx37bLu6WZzXt2bGfNS1NezSH5W4z5sPdwrUkBTUoV7Nlg0QMxJlptjb5zTY+
A7M2EwOi0wl0JaEKFE3abPCc7s0hMj4VQlNUoZIV4W7t15o2pp0FBXhMRqf2q1tuHCc3bwaem6b9
S3sVitHcIhRpb2p//eGj2l2PP8MO9WQXPuJsn+tW63nqAuCJ/ayISDggwl4RhkRoFkEVgYhwXoTj
ya6ICJ0ieERA4tNJPBJPXgqTCyZJBsmM8kp02y7Ip2salb8bHw/DDJTvVC1MPoH7VhNSVjR5wG7w
wgztRaS/jeYXriVZpEktI1k2o9Fkysp22TIy+GZ/hk2ymojjQDbszYbz2RDPhgQcyYZz2ZPyq6K2
NunQifS6lFa4SHingaNSzzd+GUstkQeJtwgs27gOlltP843XhYvT/9vDMm45SejHaahfJq7KuabM
TEKsWc5Ue7PflGoTrcSxPwu2Z8HpLDiUBR1ZUJYFCXOhhWikX/Jz5SU1uGSAO+Q9uhaFanvdTO+i
qt5NfI1/S6n96LTBtSXWP1sf+u7Y+8yv2+n+IMxFPdBOaWglkmnKzHKm2e1oJ3um5MBi5EAW7M2C
81kQz4IEHMmCc1n/xk4g0y2hmu0R3rxqXxquopgJcO/x7pvpxnBBEmc/gjYS5o79l/b2oV3coouj
wz17F38x8vOT3CGqG43/WRj/WaROnZ7hsJitPG928NkuQyqmn8VgIxmdGVwqn5FBJtKQrgF0mcdk
LJq0wtM0pMlA13ORrudMuVliGse1fKhdgLR/HvtI0X4ndba//kZzXypkW3e8nAG5mAsSFB3/Xlpr
l3aPNhwKpoYf7Ujmg8GL+eCEfnXcQZy21DRnmitLsBjTnen56bzJkmUpsPBmS7rDyqeZiH23C653
wVIXXO0Ctws+dsE5Fzzngu+7YL8LsDfmgtUuaHJBlQtSXLBh3AXvuOCEC55ywSEX7HPBF10QdsEi
FxS5wMOILrjgjAteZDSfFHCCcd/NBq5m+DIXCC6Y9WfWd8QF9zGxOGY6Y4djXknKu5Wx63ABp7qg
lgk874KzTNoBF2xnqiJeccFjxAXGdZPLm44r8nrdJ2ufz6qpkoURrYzmYIecjCq9CJGrZs7ijLwv
BdgW5033wCzwyqIbzItztJe16yXtI9h9MbO8Fhe4XfzKqXN/rf1948W/8HbY8selFx8Sd1x8b9kz
b/FXJ9YVE64TGzH+LdCqjtOvzwxmjCyOT5H2STAkwXppUOJWSFAnQZUEeRLYJRAkuCDB7yV4WQI4
LsFB6YjEDUl7JS4oxSROlZolDoltjHIDkp6WzkrcEek5iTsgwa3ImeuUYJG0QuIUCTIkeEV6R+JO
SLBXOiBxt0rQKUUkTu8vlzikOK8TxSWgMvZJByVBlWC6VCVxRIJZXEQakuLScem8JHZIeHCwSarE
n5bgEOUKYQmaJSiTaiVuu7RHOiadk8YlEVFWyYNI3mjmrAaIO7BUqq2EdRN+ojXsuis890mvdUz2
q2xP5BxLukIAb3qmcz6ke7kzWly7GQqfsc62zH8B8jDtv1Px08KfcZ1sr6vBXB/CXM/DU1C/Wjs9
P99odKRZi3ne6uCrqwwFLX6DgfjTetO4EqyErWmeNM4s4DKVstxvt7nKSFmTf7qXZB6rhqZqVhBU
VCQLAlKZqPvsc7IuWxTkif25amYtVLM61pirr+aJfTqNp0Whz5BuTOMcFDUfqmHXt+JnTr/7hRXX
LjFrZ9x/PnHqN4XlyjRXQUHJtI0hi2Gzf+/6lqLFV9f1z8/4/n0Pxjlh1sYNi1vS7v/O/z6pbV5d
b7jXYDEIPaFXOTMn+BprrlnauH0xjcWrx9/DyuJr5CrSopZJZOqUnEyjwZA5hQjFRVIO73IpHf6p
U10Cb+nw24yKsdzIlxtVVvimsyL3hkQV8ln1rVeZnp+L9a1SXVUK+aVCddV0ryKw9VBxZEwDrG9F
g3ZKe037q3ayGKZOffAeqF684+j924IN+eABOy6HxjztrczbbtEuzIl8/8Sh7pnwtRfPHP9xWST0
dM21Vbm5JfNWxpYeO3HwmfzVax6c1TAjt2hJgG515DbtOmGPsJw48RxSoypZxD7VbE4hKb4cB55C
7A5bmtXi5pUmvwGLGnYOYSeQyzY7va7hmEtY9lcldj6s7OxgSxTplRXCntefH/xeicGg/cEEsmgU
Oj5+5rR25s3Ili0Dv+VycHKvd62ddq8WEP70n532jVUvaG/gDtD3XPzQMTJRd5VgLNqJi4TVhU6L
Tc5MSeF52cK7szNTWvyZXpvcaM2ENBE3boMhHWPTRtKW+7fbwEb/SOZ+N4Td0OGGJjeUuRO1DoZk
2dq1ep1G5rBtqqjoCjcltym77PCyEBQ5wKjEsxf3hQu4slkuvPvh2Bc29d2DR6modqDreh4OmgYy
sO5x4FalaCe0X5ju/68dWNfxI8PbvvxlOh/cq0Qb7lUpJJ00qoVWg8EoYWnvyBBtHX5RxDrW2uE3
8Qb7kAMiDuh0QLkDPA7Ql+KkukWXb+8ZuKHTo4W3QhCrCrHKrpgp2rb9Yb/2bTydbh0DGePoI+1F
mHPTrfyPd/5ik4YqvPur32iztrJ4QBvv0c+lGA9TDVZrqpOkEl9OBsaDnGFLIymOfxMPbENIxkMG
GolVG8ZEOCROpYl4eO2n0QdLOLOonTPhWQPj4fgp7UzfDYNbNg2+yXm1C9prwXW+m+S13xBe1dbH
T2M8fDh6+NiRh48nat9L56EGtQRrT1EAQhyJYjdR425P1rjnPqvG/URtiycf8eRHVfoZXXwb817C
SqdRLU43pqJ3XNkW9I4FzxsdfiEdy9MhVp52ZoOaDeWsbFWyIbnwfkr9n4GLizJxAEAj4QKG53a7
+Paj2tO/1I5ot8GN0ISfrdrPf/nj53/5xrHnX+Ne+LV2eARugxXQCtu0IW3kHeC18d//UfuA/a+P
Gz+rXQffY7awkRfUnUY+NZVIkmyXrIKp2S+4EwfE43aI2+GQHYbs0GwHFbPTDqftsNcOnQxzzg4J
mr2MJjKJjNhh9rgd3rTDi3Y4wAYcs8N+O2y3Q60drHY4y3gdYE0PwySrj0sb1LrLK4qJ8wUzk/7V
RvKEyA6jOfnVTr1cNezFU+lvgw2VjdXguoueTf+1yvy8UNslbP64Yc83SDKnvoU5lYpns7VqJUiS
3WzneSHNTFJTzQLvzJTsHGfv8HMcEUUZ84x+XRdhB/lyJyhOGhvsC6BL2UUuX7PZGRYrHtCzzIEh
bgY91YTl2hPaA5hpxy+C/cE9cLN2l3ZR+yp8adsQ5xx7V9zx+ol9r+WMxfmXTmidkUQcp6HOjaiz
hcxWPWYL1jo8xxksvJSCRcx+WnZgiQBmjjeAPVEJUPN9YkOHTGctvvg67dWxf0AV5LjLHJX04IWl
1Zb2wyuP8LsS8nDhN9yPZ5w8cre6zplHiMfkmWYzmqaZCvJzeHoQszmzeXoY8+Bp7J0CeKUAbi2A
FQVwdQGcKYCnCuC+ZLOsADhPAZACOFsApwsgXgD7C2CoADpZ34SrOyYVKayKrHVWTjqaJM36mec4
Z+Vl354YZV462Hb9xKmu6r6+f1YbZn1jy/0PaO8ebOkV6Qnv0eHJJ7z3bhl47X/GltOO/bePHdJj
5Qa0uxl3lCp1qlW0EJFkpBvSOnB1E3HtFe1DGVCeAUoGsKD41FzGGGAn+SKQaRbf8H3thf8dex40
CMJXtdfeO/PSR8+e5U78SnvqYXGH9p/ayNvnLi6mPxLA9UW7VliFfvCSIhJQ52blWCwegc/HI56H
Lyl2Wx25TX6nw2YtbPJLVgcxLvevFLqFzQKfI1QInCg4BE4g7kgJXYUr1ia2sMu+JLwUs1RZXI1z
2bdo82DWpe8LnZVYuHvR3hkCT9dmdgDjVjz/1yngsnY1b+rjuLXjz5z+xcn3VotmESwG7SMr7te4
a2vXfv1274Iv7L1zzvUvwBQwgRmUH/tuTO+78+Jv//Ae/5vvPqXdq+1/KhFzdL5k5Wv1fIe15gPO
k/hdxcm7pzYm/6GPK9i1hvtxBQP9Rxf6OON87VqycDLmsktBS54SXyCVwttkBTcHTw1R0ojwHoT3
cA8RH94ubDdjexfeuxG+jZ9KbsP3dqRtNjxEduHbhHeNuJJcTfspHuFdFKZ8DHMo7/GzKGcX4tOM
OJ7CVCbqkAfN8AA8wE3hNnIPcX/hS/kYf4Q/KUwROoVHhYviWcNBY55xn/FPphbTN01/M+eYbzRf
tKy03JliT2lJ+ak+K4VUURsxS9lIGVlDCH8Nv4IIrHcaDEzMfeWEHYBYsQX6KIGEdJgn2aRXhwWS
Qb6swyKuNV/XYQNWHf+tw0ZyExnVYRPJgAodNpM0aNBhC/TCCh1OIVO4ZyZ+sVTKva7DqaSaN+pw
Gsnma1ATEMzYephfqcNApgmcDnNod0WHeVIlFOiwQAqENToskinCrTpsIHnCAR02kgvC8zpsIgXi
kzpsJlPEt3TYwr0sajqcQmabTuuwRNaYTTqcSjaagzqcRqrMP1vUu6E31ntTKKgEA7GA0hWObB3s
3dATUwq6CpWK8hnlyuJweENfSFkYHoyEBwOx3vBAqWXhlWQVSguyaAzEipUlA12ly3rXhxK0Smtg
IFoX7gsuiHaFBoKhQaVEuaL3iqZCqVeGBqMUUVFaXl464xIFJSihBJMG9UaVgBIbDARD/YHB65Vw
9+W6KIOhDb3RWGgQkb0DSltpa6nSHIiFBmJKYCCorJgY2NTd3dsVYsiu0GAsgMThWA9qvHHTYG80
2NtFpUVLJyYyySKtsdDmkHJNIBYLRcMDdYEoykLNFgz29oeLlS09vV09ypZAVAmGor0bBrBz/Vbl
8jEK9gZwLgMD4c3IcnOoGPXuHgxFe3oHNihRapdoaLC3W2ehxHoCMTrz/lBssLcr0Ne3FX3XH8Gh
69FZW3pjPVR6oO+h0oQWaJZutKnS2x8ZDG9m6pVEuwZDoQGUEwgG1vf29caQR09gMNCFxkKL9XZF
mTHQBkokMFBSv2kwHAmhktctXnaJENVKGDIa7tscijLqgVAoGKWOCOIU+3AQCu4Lh6+nU+kOD6J6
wVhPySR9u8MDMRwaVgLBIM4ZDRXu2tRPXYQWjiWVC3QNhrEv0heIIZf+aGlPLBaZW1a2ZcuW0oDu
lS50SilyLvu8vtjWSEh3xSDl0t+3DD0/QL22ibmWTqJ1yTKlKYL2aUDlFJ2gWElG5ozSGboINGNv
JBYtjfb2lYYHN5Q1NSwji3BF2oB3DO+bcKUK4ooXJAFsBxDqImESIVvJIKPqQaxCChBbiO8KUk5m
4K2QxUgVxv4+HK/grhBG+gh7BhjfMBkgpVhHLfy33CoQatG1aGSjixFaguO7kMMyHLceeyfzVUgr
tgZIlNRhuw9HLkC4C6kGEKa0CinB+/PHfn6vMsF7JaOJTlBUoFbl+ClF3T+NR5JDyQSHT5fUy6RQ
i8dYD9W8H9+D5HrEhUn359pFQboQ82IUe0KsFWRcKe82pGhlVM1sJLVMjEkbYFQrPkViE0rsxvFd
zKNJyi7Gm0ZGgnMY4R7dxhvJJubXKFLSccm5RVHyJz3y6THSyrTbzGRew/C0HWV9ddiO6vNK2GwB
k9ePLWqLLagJldvD4ACzZ5CNprE2oI9cj9GnfK4cRR8b0P0ygJ8w0ia0pGOKdXt3s2eUyR1AGQrC
yXiJsnn2Mr9N1kJhFgsw+yd83o+9MUbbhfg+/GzV864f7ZOQul7PrC0sT3sm5o703hzm2Uu2SERL
tx6nCsNGEA4z3ZPWK2EeofqHmFYUCrC8X48j+pichB49LCYCzKMh3cMxpm3SSkF9VlTDCMOUkHoW
DTTbQ7olr8NVYtmnckxYa3JERlmubGZ2u8R7gGkbZLjwhGUpVZ8uKTHjPrYaXT/hlW4WZQnrBRm3
ks+wbzezTUyXGmYaBfGT8HMiosI4dhPzWiKLEjEc+4TlAsy+YX1cBHuorIQu/SwreljcRchcrCrL
UDv6KWXRNzlXuvRMKdV1Lvu/Hkf1ijALTs6KwQld+lHHZXrOD0zk2qZJWZv0RCuuPMvYKhHR46dB
t5xyBQeaK1eumTPYann5LBLR2IvtGNMnymxZyuawAfubUMIy9lP9z7kWtEEtAZhD2mC+/q4DFets
DyzAtwffV5NKmIv42fjGfnIQnxfw5rC2ngczsGcGjizDdzm26bsYCsk4jixE/FXYLkB8Pr7z9XYe
tnPxnau3fZDD6HP0dhH245s0A63Ay9jzEAhqM5weg2NjYBuD8MegfgxDH+z94MAH/F/PV3vKzu8/
z3Wcg7JzHefC5/afe/Oc+Pt3FM/v3pnneetsvue3Z+d53pz3Rttv5vFt5I3yN7g3gG8rW5AC05C3
DZ8K3ire/PhxmKYWuKY0/Jof95Az8CuhxvPKy1M8P385z9P50t6Xjr/E01ccgbMviaPjxx97yTW1
Ad9HXrKkNlhHIVO1wrFn8zzqU4ULGtSncvIbRsGr5v1gnoeMQngURo9aPOQokKPKUfVo59HIUZG+
9h49ffT8UXEUFDW1EUkf73ycO/D46cc55KymPZ6S1mA93HGYG+FrPFRtF6nFuwlvnuzBJ6DyLrUg
r7DBc6jsUO2h/YcE6yFQD6VlNpBHIo8MPcKffeT8I9z3H6r2PNSc53kC3JB9uIZqlP0DsH4PrA/C
0+CEdFKDfnCotzTXeO6/L9/zLby/iffQfXBvQ4Fn/9cPfZ37WkO1x7rPs4+7e2+e5z/uyvNY93j2
hPds37Nnj3jn7XmepjvAejuot6dYG6y7PLu4r37F6un4Csz8UsOXuM0oexPeMbyjeBdGwB0BPgIX
IvCLyO8jXE8E/BEYHT+v3hxBc4YHGj0DDRWebMhqc1VmtRkr+TYD+iWAYzs7Kjwd+F63qtGzpiHf
s3rVjZ5VDTM86RX2NhG9K1TwbWEerHwt38SH+e282NEKamtBcYPaOi0HH+lZDde3fLFldwu/vGmK
pxlvV1NhE+dv6m3iRsGuljTkepY0uDyNDV7PYpz0PxvQCDCl0d2WWeFok8HaZquwtnGAEUvGPaMg
H3ab8WVTS/DtsdZaO6zbrYLVWmZtsoate6xvWsetxlrEnbPyYQJNBIYyQYRR2DuyorWoaOmocbxl
adzYvDoOO+O5rfSpLl8VN+yMk7ZVq9tHAO70f+WOO0jd1KXxitb2eOdU/9J4EAGVAkMI2KaOZJI6
fzQWjW0q0i+IxuiL0FcUgWiUdgFFTZAwdDQai8VIYki0KEqK6BM7AJ8kygiRhhJTXvof0Ceh4pgY
YJTRGCVigzfRJ2tRLGXELpQQnRDPOCdeWf8HC5pSvwplbmRzdHJlYW0KZW5kb2JqCgozOCAwIG9i
ago4NTI0CmVuZG9iagoKMzkgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9D
QUFBQUErTGliZXJhdGlvblNhbnMtQm9sZAovRmxhZ3MgNAovRm9udEJCb3hbLTQ4MSAtMzc2IDEz
MDQgMTAzNF0vSXRhbGljQW5nbGUgMAovQXNjZW50IDkwNQovRGVzY2VudCAtMjExCi9DYXBIZWln
aHQgMTAzMwovU3RlbVYgODAKL0ZvbnRGaWxlMiAzNyAwIFIKPj4KZW5kb2JqCgo0MCAwIG9iago8
PC9MZW5ndGggMzYyL0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nF2Sy26DMBBF93yFl+ki
AhMeiYSQUhIkFn2oaT+A2EOKVIxlyIK/r2eGtlIXiY7xnfGBcVg1p8b0c/jqRnWBWXS90Q6m8e4U
iCvcehPIWOhezeuK/tXQ2iD0tZdlmmFoTDcWRRC++b1pdovYHPV4hYcgfHEaXG9uYvNRXfz6crf2
CwYws4iCshQaOt/nqbXP7QAhVW0b7bf7edn6kr/A+2JBxLSWrKJGDZNtFbjW3CAooqgURV2XARj9
b2+3llw79dk6H5U+GkWJLD3HxFmCvCOOI+SEON8hp5zZI2fMB+ScOUPec576HPh5jXzksyj/yP3P
yBVniE9cGyOfmVPkmjPoICPuc0Jm/xzPlas/votk/5Tyqz++i1z9sadk/5Ser/54rmT/rEJm/wT9
JftnR2T2TynP/ik5sH9Gbuyf4HeQq39OQ1m/Po4H78/P2IW6O+dHTpeMZo1T7g2I34toR4tl9PsG
rm60AwplbmRzdHJlYW0KZW5kb2JqCgo0MSAwIG9iago8PC9UeXBlL0ZvbnQvU3VidHlwZS9UcnVl
VHlwZS9CYXNlRm9udC9DQUFBQUErTGliZXJhdGlvblNhbnMtQm9sZAovRmlyc3RDaGFyIDAKL0xh
c3RDaGFyIDMxCi9XaWR0aHNbNzUwIDcyMiA2MTAgMjc3IDU1NiA2MTAgMjc3IDMzMyAzMzMgNjEw
IDI3NyAyNzcgNjEwIDM4OSA2MTAgNTU2CjgzMyA1NTYgNTU2IDY2NiA2MTAgNTU2IDY2NiA2MTAg
Mjc3IDc3NyAyNzcgNzIyIDY2NiA4ODkgNzIyIDYxMApdCi9Gb250RGVzY3JpcHRvciAzOSAwIFIK
L1RvVW5pY29kZSA0MCAwIFIKPj4KZW5kb2JqCgo0MiAwIG9iago8PC9MZW5ndGggNDMgMCBSL0Zp
bHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDEzOTI0Pj4Kc3RyZWFtCnic5XpreBvVteheMyPJkmzr
YcmSrMgaRbHzkG05VpzEIYknil+J81BiO7UCiSVb8gNsS5HkhPBoDCQkdUhjAqVAKbg00DTNPcgk
0EBpcXm0l0vD4wItFGh9Wrjt+QqHlFJOL8TyWbM1cuQQ6D33u//uKDOz1tpr7b1ee+29J07EhsIk
lwwTlghdA8Ho4V1XdxJCfkUI6Lt2J/hVm41XIDxJCPM/u6M9A/f++KpPCOHOEKI409O/t7v6zYd+
TUhuLyGWsd5wMFQRfrWKkNIc7GNpLxK6UnsViAuIz+sdSFxbKO/pRzyE+O7+SFfw14H+HYi/g/jq
geC10RqulSFk/hzE+cHgQLi4lmlCfCUh6t3RSDxBUFFCqs6I7dFYOLrh3s7nEX8d6aNIA/yJVy6C
chFnWE4mV+QoVercvHyNVqcvMBgLTWZLkXWOjfx/cMmOECNpkq0iGhKlz1kXe4pYyD2ETH8gYhef
qQ3Tn/2/1CIn/bqbPEzOkCPkLbJDamggPtJHhpCSff2cvIpU8fKR7eQkGfmSbk+Rs9ie5guQo6Il
l7185NvkNPnlrFF8ZIBcj7o8Rt6CxeQFTJUI+RhyyE3keez1Y6RtvFxXTD4+uinYnUV9m3yHOUzW
M+8hco/YwrgZLXmO3Ac7secE2nlkxuKVX+j0ILkRny2kl+xGmF6yVRd+S5TTf0OrbiTryc1kDenP
kngKHmBVGL9W8gD69OeU5s40KprYq5nHGWbqDkRuJz14BwFtZ46wa77EQ//li20jebCQLSHKy7Uy
S4gm9RlTNf0JO4+oSNv0+Qxtunn6b2wwNch1cHNkq7gXv2oM+e3cAEqT6fdT16dCsk2yhzFaJwgR
Gq/c7m9va23ZusW3edPGDc3r1zU1NtTXrfWuEWpXr1p5xYqa5cuWVi+udFeUly2YX1oyzznXYTcb
dFpNfp5apcxRyGUcywAp45MQqE+yJbyuIeisdwabysv4enNvXXlZvbMhkOSDfBJfXKmzqYmSnMEk
H+CTpfgKZpEDSQE5uy/hFNKcwgwnaPmVZKU4hJNPnqtz8mdh+5Z2hI/UOf188kMKb6QwV0qRPEQc
DpSgWona8vXJht29I/UB1BHG1aq1zrVhVXkZGVepEVQjlFzgjI7DgtVAAWZB/YpxhuTkicOipfXB
UNK3pb2+zupw+MvL1iXznXW0iaylXSbla5MK2iXfJ6pODvPjZRMjt53Vks6AKzfkDAWvak+yQZQd
YetHRg4mda7kQmddcuF175nR8nCyzFlXn3SJvTZvnRmn+eKQkJSVaJ38yN8JmuP88IPZlKBEkZdo
/05EMMmsTcLWdod4WRvQ1yMjDU6+YSQwEjw7Pdzp5LXOkfHc3JFoPbqb+Nqxi7PTTx62Jhtu8ye1
gV5Y4ZdMb9janCzYcmV7kilp4HuDSMF/tU7HcqtDN8Pj+7Jmgm5B56CHHQ7RDYfPCqQTkeTwlvY0
zpNO66NEcLv8SSYgtkxkWoxtYstwpmVGPODE2Da3tI8kuZJ1IWc9evxwMDncidl1tRgYpzaZ/6nV
4RzR6/gat5/y8qjVulAfn5SVopNQKlsA80YUGdFSJP/T9OtDKw5QqtPzNU7sRuyn3lkfkP7t7jVj
Bzw6usmVToTW9qRQh4AQlCJWP17pRolgAAPWV0eDmXQ7o0mD0zsTXVGt+r6WdioiiSUNa5Mk0CVJ
Jd31dF7x9SOBurQKYl/OLe1PEM/05PgS3nraQ5YQf53IXLgWs6y0fqQ91J20B6whnHfdfLvVkRT8
GGG/sz3sF9MOPbRw0kqTw09zpbW9ucXZvGV7+3JJkXSD2B1XUn9JN852a7obTMBkTkkO385YWT8y
apHANyDg9K7EZ1JRkoO3Fh1OqWLielfy7WAlGW5UI7mQrw/XSXwiPqtTmZhOa5syvclFFPtZ22R1
+B3pq7yMwWZeGhglckSnNmWasExhQw7m59omShJ9aRaTnm93hp1+Zy+fFHztom2ie6iXJWdQn0ux
ap2FZTkL3UQc2JxBRGcmG1zWbOcmGyk+gzZd0rwu08yP5DibW0bEzp1ShwQ1X5ckYgoLy3VWWgvE
Ce3E2strcUrTCT0yLgjiZO5dIXbiXBcacba0r6TcWE9utF4njqUnzdDc6i0vw9LmHXfCoS3jAhxq
2d7+hBb3hYda2x9lgFkb8PrH52Fb+xM8LhqUyohUkSgivIiIPW1FJIfyW58QCBmmrRwlULzrLBBK
y8nQgHSdZdI0bXqgUjqQQBhs4dItQoabQ1pOmjZMafQaJ6LLBJVMyBGUQi6Tx1jHQSQ9ipQncR+r
BHI6F/LAOo5SWyn5LAyPKwVrmmMYOYS0hofaLg7dtr39dC6uzlb6xIG84oXpYu7FYOOyUs+HxES5
wd87EvCLk40UYmjwHyTBuRrD5FyNishzkypn2JtUO70ivVak16bpcpGuwBSFQkDxYYy9LwliBlzZ
7sApyRe9YB3RfihGyo9FZUT7fjkqh+cIzoF70BxiJhPCMDHKVCqNUVNkUcoDfqUyT69nA369tsOv
Z1WaPE2HP09/tAj2FUGkCNxFoCmC3xfB00XwAKVsLoJaSp+m9JcpsYOyLU/zPU2F05KPULF9VMZO
KTk7d9BrF16xWBZCcbxIrUtHPOZal0unJzVmN76gpkbnEX+LK2FJqQt0nqqlMp3J6Khepptf7eB1
BrmT3X7v4529P/xeatMbUy8+cAo+gw/+97+xyYe+OXXg3k9SXmt1tZW7v6g6NfTSr9EnTdMfsLvY
nxMrKSEDQq0up6SE43NzLRyL25a5qrlb/GajTjfH59fo7Doml9XpSI6qUMH5/AojMfr8RDs8Hzrm
gzAfENixi6pNzPT26GvcHTt3UPVFU1B/k6S/aEBVoVFUfb7cOVe3ZDXUQvWSUudcDTirl4IiH4wG
NG4ZvHrv7UOpVEFs/K/rxu4+0rg+1DJ3+YNAbrm142hdVxX786/fPHXAUr4zBuad169huTuCV7mH
zjlTxZxs52DSbhaPa+2pBvYtzkrmY3EX4H5husztNhnkRatty8mCvDxS6pRZbUUG5RovW+3zm1wu
lcxa6uRYFavidfwVPj+v1VX5/Lo5Z7ww5oU7vTDshYQXQl5o9UKdF5Z4YZ4XDF7gvDDphde9MOEF
ZD5OmffPZk5zEi984oX3KPNzs5lDX+izJpv1eIYpe2zuCwwzQwqUh/cCo6XDnvcKc0UtX6FaJqlJ
o9SkqBcCXqikzDuyrl27OnZdvGJZ184dO2Yz7voSRikpxEzATHan08CVlRA0KWheYwrPna8oBo8D
E8SQD865pdVLli6rgOplIuCpKjQtMykKWUwWh5glhZgmULWUJo8cUbb7mce3NtSyTUuh8O47hv7w
vYkXmgI1m+6//9knSxL2d52H1y5saEzduaj6huEfPJY6PXDlzt6+zgBzy4MPa27RFe9P9N3Xtnug
uqe+4KrqR9e/de8JjSriGm2+0F8jzItUbmu+gRm6cd+BXbH9+6/FIwXx4fxpYJ/HM+4cckTYbgGc
2jlGjdFWbCE4aSx2C04aiyVXry/0YW3JlW3x5xZOFEOyGMaKYbQYhoshWgyBYvAVAymG1fgSiqGy
GPhi0BbDecqHTBmHXnR5lk/N0jyj9SFTIIwGdCJOISP1oQ5dx+uMgD5yLCkFbtW+nqV3VlY+tO3t
F196GvpS3+6NwLGr4C39yD0+vXq5veIDkH36cap7K9x34vjpe8QvG2dwMh2QNeGJqFkoVxCZTJ1L
FFoFr2CVrEJQyYmMlcX9rFnIBZILk7kwlguBXEA0nRyZglZ0DrUVlaV1oESG5atEJ6su8TBx0E+5
oSD1Vzi4xEcrVUOw+neinzehnx9FP6tIIXlSuEknUxMZMZlz8n3+HC1j8PmZQt4MxAyTZvCZodIM
WjOcp+grZpgwQ9IMY2YYNcOwGaJmCJhBMENa5IoHKMlHSZWUqqUN2fJjVDIths8dl2b5zi/MhKys
l+o2BkXrmCtlsSKTsBgj9tFU0+tvvvnOr3975uu33jK056b9w/B2Spf6679f+I+/vfnMk5N//Olz
4oEUSC0646TsQWKFpcKb+sJC1mo1Fag425xCq8Xq81uMxFCA3mALNAp0jVoBVhtwNvjEBj+xwX4b
JGwQsoHLJtGvec8Gr9vgORucscGdlAObm7NkfkTpV1IZA6W/mKFjX602qMvQV/yFdnTcBqNZQy2x
wTzKQWzAnLfBpA1escGYDYZtELWBYAPeBlobJCmqpXyzaknH5erNF2pMVgup9dDVR1o9Ly48NAIF
zuplNAAmo3O+GAEbeIzO9Br6rw8++NC3NnoXl8+trF3y2WcvprjDbPvi+d5XJgvOXW+M3ntf64VP
HeXlDszHBTgXJmV1mI/5ZKvgzuNyQJ4PLG7aNNocWT6bP+QnLAtqhRzMghaIFia1MKaFgBYQzShK
l0iqqCedJKbM5NU5dY5qQNgITnCwi05NnWSOxh9P3S9L8fA+zE+9BfMPsHdfiB1lq6boxyzc30xf
kA3h/kZJTGSD4JYZSJ4hz2wxGTv8Ji7gN7FaQ4dfqwj4tXpigVrBArwFJi0wZoGoRdRpF7oRc5Ym
7eysJQ6nDhNVDzzRIVLipBsO7njq1dSfzlz70Kf/NvUPiEN36gepH6bmnjp1ijkBFpj7+fU5MJd9
PvVY6kwqmXqYS+88yMx8lm2l81kQSi/O57g/R8EY4n7GImTm81hm3s2UkcvMKkan1aOCrJZxzsDS
rHr9nbPX3XpzLDG8/wbm+FQThKAVNkIw9f3UI+CFOalPUv+SOpX6Czhxfh3EuD5P94hb0INyOShY
YJUqmZnDvXfObv9R8fsu/mPkggqICiZVMKaCgAoQnUk/9470psdcKympr0mnns5Bw/mCl109dfIm
pnnqNEdg1cbPtdxx9Ek7+uRZ2QZiIfPItUKjcS4mZx6Rk5JSBHkTn/BrTHYTricmE6tS6eN+kq/N
5/Ox+ubnqxRsEdZei1AKpBQmS2GsFAKlgGi20zwz+zFpxSBivs1eNsT1l9Et0UtTpAIXD4YVC1Zm
kVVo9eyzr/3yDx99/Y/fOna71+mIlh/7fs73j48/merc298T/ca9IzD26h8hAOvfhBXHnX/6ht6a
ej91ftsvp37/3ceOH6tKvZx6W8wBL9p7Cu01k7mivVY14Q0GOZE75xl4vriwOOEnhdpCtBfLnFKp
i/s1efY8dx7am5entLAWtFchzAMyDybnwdg8CMwDRP9P7ZW2oQViLdBjUuOuo9pjEpdMfQG6oBTm
6sTavEzLeP/w0vtvpP79H98/tMbJ9y8bO6W8+7vjL8Kjn1379Ztu2cse/x+/Sz2eGks9kvrO3D+P
asyY+bq21xhj6vg9x3AKg52kzx6yFswrIykmg8Jqo1ZrzbMCyAvzDDq9Lk/O2XktbsIDfqtVySkt
eB5RdPiVrA7knLzDb+D0Wh5e4SHKg8CLJsZIusDNOh/M2mKLhtaka8nMAUHcUckVgLhy5vwAJ16c
euOBU8zaC+eP3QTX3J56OnUQVN/6yY/GT3+b2ZDiMgeGk0/d+mzp1J+t1cwGuPGem6aePYATYfpj
OMnlM1rcZRfiDJAxHMs86Wd/Ki71IG1DHNVc/ufvMdrubvSDAf1wFvcQGqKHDuFjXb5Gw+nztLm5
CoWWYwsMefm6fDyE6XSglcu4XAWnATyIqUD/iQHeM8DrBnjOAGcMcNwAdxpgvwESBggZoNUAdQZY
YoB5BjAYgDPAf5W/5isEsrk5yjNhACZpgDEDjBpg2ABRA/gMIBig0gC8AbQGmKRMlzBsNsClKxjd
XMdmXZfsqi/dV6dXODH2GHxPegUhFTOh19PkrqnBnZUYdkxAGn7WgYXMAedSjXfDCz+Dt09OvXDm
wNT5g3D4f8Fr1WKM//F5jhhruCV1I9c7NZReU9bjHP2T7AgpIDYyLGw2cGpisWg5bbG9QOvzFxg1
ubjLJQo8ICq0FhRgTFtwK0bs0Oizg2CHSjvwdkB8wg7DlJIGApQuGSdZnd4f6jzmmRPkxSJPc6lE
7uSxMmFhKl0FmM5iYgOdpLpSJ8+8tuvbqX2/fb0/Ir8f6hKpf6Tsw/t3bffHUhcatsO//geAyXHg
E3P5Z09YyuHcz34yn/mTju6pWqc/YF7DveUC4heWOBSGojxM04WL8hxYaIt9fqtJy6rRPrZweBFE
F0FgEfgWAb8IHlkEHYtg8yLIhOjizkM851ysq5myWipWGFS3eokbKphZuxDcB5qKWea18f/W8MPK
8sXN1z5zjz98VdUPR3u+415UHdvStnHTHdtrnZBz26hN/6db6h6+bonNUdfVcMNR+7kBt6+uZlNR
VcXabdQenGPs+xgzG+6U9xKDwZKXn6+0KIvttiKf30YMiJgsPn+uyVjAMDKZbqtfph2zwySNjZZG
qwaRUTtEaaCyI2mnzaM0hulWbHqFSibtMJZFz87dS3J718VIzyRy9teN9DqkWI21OP2NAKvXElx4
LhYyaFA0/bj2uhtiqWtufHjnLftSoT23QRX7aW/FwpXfPDh1l6W83MLsPGWbKhAhGWMWv/+4MD/1
uN6osQp/V+gmublync6Ea0sL7tVAy7JGwaj3+TGndRodprXRYALOhJXBBKMmYKImCJjAZwLBBBMm
SJpgjKK8CbQmICY4TynIms05ewqLLuigXpj5ukOKzNqXMse37EOwdE5gLxp9vVBeJghl5YLqeynL
2AFwcb9P48LnK0Q7Wd5SLsYf87mcuwl3Vo3CfFV+vqKAZU1mLleNc1WpUGswP3RbcG19gJ6Kas3g
NktLSlolj0daSmr0NVVVoj4yVEbnrK7FrbK4WaZTDo+VsCnQcf2N4drf/OaKyhUtzv2GWA9zR/n8
N95ondq3xqtdY7bTfOwmT3J27i7cySwWrBxunYhckSNngLg50HC1XIR7mZvmZByxuHfs8njOncva
2hVUg1EJxm72iQu/YRcyR6vgjZ7U3tTeHux3IcZTi3muJA8KUZlapZSjfUQ8heIByPi6Gp5Twxk1
HFfDnWrYr4aEGkJqmKcGgxo4NcaVcoyqMbRqCKjBpwZBDRNqSKphjKJaNRA1nKco8mWzzYqrFNZZ
lXsmwKI1WLsuhjEiRm8MGhpmcjNty91Ygwy47yzXKRSQm2sslOtwt61j8mU6ljFotXk+v1ajyFVh
GFXGjkKwF4JQCLuyvhSKxcfjEU/XmfCll2Dn/LnyrNljwpnF3O1aUfWNqu+lvHv2gF658txK3KgP
WgunvJlMGqq6Kn3mxHkjt6Bui+FRYVqXK58zx0EWLMBzUC7rqVpc4fMv1ixwzNHllrvKfX67xmW0
yOVKpWGrX6mdj6WILdnqZ7W7PbDNA0s9MM8DhR6Qe+BTD7zngdc98AsPHPfAXR7o9AD4PFDngUrK
Z/AA54He8xnGMx5IeEDwwBLajG2feOBtD0x4IEn72O+BkEfqIs2jzbC94oHnPPAjD4xStms8cIUH
+MwYy9MDjHkg4IHWzBgGKvkelbzTA8M4vODKardS2feoAkySMkTp8DiqxjPzhbdj1gp+uVX+8t/N
LopnMWUtkpkSKtXQTBXN/qSGwadVVIx4lQVmSmk+o7hYWUsvKa3NJ4T6IdvGl+vO70213TZWVF9f
a9QdSXkPt7W133IktQ0TpoANuFYsqXF5U3+Rim37qRxVHrd0TQZt8dumLDNFieZRL9YBxxfqAM57
NwMappaJMC8z04yMoXXg3DmPJ6sOLKtWApaCXnYh1oEnnuyBg3CwJ+WqEvvdjkl2FOv6HBIQllm1
zByFkTHaihV6q3hAYsTjkV6vivv1csYK1t1+PJHTb22T9NtagH5wm/2Fij7d9CvV7GV8IVQvW82k
vzVqwKkTC7T4kVIhVzjYoxdefPL0iXW7b62Oupzex/e98+7XzrziDzGP3vHD7z7z0oGbD9nMx4Fx
/fgH0V8+P77hSuqTTtxfJVH3ReSQsGWBvqTEZNLbWXl+PnrJVbagQF+A5zx3ARQUOFlSrC1Ga4qL
nU486zkVrDrujyqGFYxGAQoFnv3KgJTBZBmMlUGgDBCddSIls+1ypw9GGR/rpc1j5gssmz4LiUc+
t2g0XDQac0n8nwZFMbDJf/zxZyfV3vL5R1d/966R248e3dU/NFydKHN6u0Yb4V/uue3xUzDw2K9c
UPRUIT96Yv83FDlblfLhmw9eT31RpEs9fvghg/EH1BfifpP8pu6Fkg7Nyr8z9vTf7PzqDltT5u8x
pj9ONcgtsgfJzB/0pOUUjlQ9+Vo2ZdZlk9cQwsXJFewR0sQR0o5vHw5FED6D9ybmJKnF9wLZL8kV
Io73QZEPb69sm0ib/hjbDIivZ22kFd8Gpoa48DZwt5BufC/EPhbiOC7Ee7F9O+mURh8hF5hFzBj+
fsd2cqVclPuFTC/zyf67fLX8pPwZxb05uTkJJVEmlE8p/6zapLpPPaH+IHd97iuSJcVkDf2TM9E7
WuImWJSZZ9lfII22wuCMvdtmbAfk3CbBDFHgCpyGWTxiDkgwhzyHJFhG8sndEizHs9nDEqwg15HH
JDiHGMAtwUqSD2slWAWDsEWC1WQO8/TMX8BVMG9LcB6pZpUSnE+K2NWi9pz4lzun2HYJBsJznAQz
JJ+bJ8EsWcpVSTCHPL0SLCNzuEMSLCfF3HEJVpBPuGckOAdj+rgEK8kc2e8kWMW8I/tMgtVkec6v
JTiXXKXMl+A8crXyagnOJ0uUr9f19fQl+q4Lh/hQMBHkuyLRvbG+nt4Ev6BrIV9VubiSb4xEevrD
/NpILBqJBRN9kcEK1dpL2ar4rdhFUzBRxq8b7KrY0NcZTvPyLeFYX/fWcM9QfzC2Jt4VHgyFY3w5
fynHpfi2cCwuIlUVlZUViy+2XsrcF+eDfCIWDIUHgrFr+Ej3bEX4WLinL54Ix5DYN8i3VbRU8L5g
IjyY4IODIb51RnBzd3dfV5gSu8KxRBCZI4leVPXqoVhfPNTXJY4Wr5ixIMsdLYnw7jC/MZhIhOOR
QW8wjmOhZq19g5F4Gb+nt6+rl98TjPOhcLyvZxAbO/fys2V4bA2iLYODkd3Y5e5wGerdHQvHe/sG
e/i4aLIkzSd6gwnR6IFwItbXFezv34sxG4iiVCcGaU9fohcHHgjH+U3hPfzWyEBw8GRFWhX0TTc6
le8biMYiu6mO5fGuWDg8iIMFQ8HOvv6+BPbWG4wFu9Bj6La+rjj1CDqCjwYHy+uHYpFoGDX9WuOG
i4yoYNqb8Uj/bhxZ5B4Mh0PiiKj27nA/CuHA/ZHINaI93ZEYKhpK9JZnad4dGUygaIQPhkJoOHor
0jU0IMYJ3ZzIKBfsikWwLdofTGAvA/GK3kQiusLt3rNnT0VQCk0XRqYCe3Z/VVtibzQsxSMm9jLQ
vwHDPyiGbojGVzSiZd0GfnMU/dOAyvESQxmfSc3FFYulIdCNfdFEvCLe118RifW4NzdsIHWkj/Tg
ncD7OhImIcLjHUQ8iFAXiZAo2UtilKsXqTye1Ltwx8yTKlJJFuPNk0bkimB7P8rzZC3CMZQSn0Ha
b4QMkgqioi1f3VsVQlslLZqodBlC61C+C3vYgHKd2JrdL09aKKUP66wo2UOGUI8gUtaQOEqFkSdE
OXhSjvc/6+OftW+jUHympQr1qsRfBWp/Odl/1nMf9sVTXydoi6jrANX/GqRFUO6rPMIjX5jGL44t
YYqFaK9i323I0UK5fFRS9EWCjjZIuVovM+JmHLEb5btoLDOcXbRvMSfSPUcQ7pW8ejV6PEY1CFG5
jG1xHPmLMbh8drRQ7XbTMTdSuojHaZsX8bhkV9pnrVSLCFJFX+xBTcRxeykcpP4MUWkxywYlyU7M
O/4rx+El2aAUl0E6xm5JS1GmTPJ3N33G6biDOAZP9UtHefbYPPVTkHo9HekBbE1Q3i6k9+NvrzTP
BtAr6bE6pZm0h87LXsniAdovTzbhew/NigiN26BjLo3xRa+k86ZbylSeykYRjlArMn4sp7ERLQlT
TUUoSOd+J0r007HTuvXS7AjS2IalWCeoBRl/hSRLRa2jlFJO6mleiDM+LPn0a1gpNly2x7QHs3NT
jEk/1Tee1fcg1TY0Y2Pa2yJXvzRS2uJ+WpGumYlPN823tEdDtLfyL/F5N/VNQho1QjUK4S8d8XRu
RVB2iMYjPZ/S2Zz4gueC1L8RSS5K61JC0mWAzo9emoFRsgL3lm7UTvxV0DzMnjVd0pypkHR2/1/L
iXpFqQez50dsRpcB1HGDNPsHZ2bdUNb8zUSiBWvQBlovolL+NEie4y/pQZw1l1bNxbRezrYinY19
iCeoPnHqywpqQw+2b8YRNhAi7ce/9BpX+tZ0QpgA9EIPKSB2CJBN0EHaYA1ZBQK+BWzz4nst4uK7
AlaRYeRbhfTViK9E+hVYPO34rMV7M95H8ebwTnNUIocb324JL0e8DCVexifQW6TWIlV8r0e8Cd+N
0rsB6fX4rpfwdYjjmwRAIf6RAX0+DZxwGian4OUp4Kdg3+fg+xyGPx79mPnr+YX2R84/fZ7Z/FHH
R498xFZ+BJqPIId8qP3Q92Hgw+iHYx/KVZoPIJf8BXR/nFxu//2qd9t+t+qdNvIuWvZu5bu+d4ff
Tb4rexfYtnfYQrt2gp+onIhODE+8MjE5cX4iZ/hnoz9jfvqU2655yv4UYz+9+fS+02zgBGhO2E8w
vu8EvsOM3gea++z3ue9j772nwn5PY7H923fNt0/edf4u5uz0xOm78nQNT8Fm2EBWoQ83nWan7Y+s
McJGNEuDTzvebrw34x3B+yjeeO5BdjvebtggLGc7vgXqY9ZjrmPXHzt8TBa9dfjW0VvZ4QOjB5hH
dj+9m4n7Ftojgy77YOMiu8VjblN42DY5DoOjC+s6SxY0BDoEewcyXbm90r69caG9wKNvk6HBHDJq
WDtby25mI+xR9mkWz8S+YvsWvCd9532M4FPmNmg22ze7N7NnpyeFcLMDe1sfXT+8nl3XsNDe1Ljc
rmm0N7obX278feNHjfKORngA/zU80vB0Ays0LHQ3CA3FjoY5Tda2Qo+xTQeaNq1H08YABtpD2tya
aQ2j0XRo9mlYDaklzHAhyOAsjI63trhczWcV01ubkzm+K5NwKFnSIj6FLduT8kNJ0rb9yvZxgG/6
Dxw5Qry25mRVS3syYPM3J0MICCIwjIDWNl5IvP54POGiF7hcCA/hk7iGXEjcGU9TyUw7ccUhjjUq
ToXAJTKkccCnS2xDgigHKL0zTsSH2OhKC4nScak7Kpx+UMC88z8BcSRPwAplbmRzdHJlYW0KZW5k
b2JqCgo0MyAwIG9iago4NDM5CmVuZG9iagoKNDQgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRv
ci9Gb250TmFtZS9GQUFBQUErTGliZXJhdGlvblNlcmlmCi9GbGFncyA0Ci9Gb250QkJveFstNTQz
IC0zMDMgMTI3OCA5ODJdL0l0YWxpY0FuZ2xlIDAKL0FzY2VudCA4OTEKL0Rlc2NlbnQgLTIxNgov
Q2FwSGVpZ2h0IDk4MQovU3RlbVYgODAKL0ZvbnRGaWxlMiA0MiAwIFIKPj4KZW5kb2JqCgo0NSAw
IG9iago8PC9MZW5ndGggMzUwL0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nF2STW6DMBBG
95zCy3QRgYFAIiGklASJRX/UtAcgeEiRirEMWXD7embcVuoC9Iy/sR8eh1VzavSwhK926i6wiH7Q
ysI83W0H4gq3QQcyFmroFj+idze2Jghd7WWdFxgb3U9FEYRvbm5e7Co2RzVd4SEIX6wCO+ib2HxU
Fze+3I35ghH0IqKgLIWC3q3z1JrndoSQqraNctPDsm5dyV/gfTUgYhpLVukmBbNpO7CtvkFQRFEp
irouA9Dq31x84JJr33221kWli0bRLiodx8SZRE6Yc+SUeYe8I44pnxEnlM85UyPvmTPkA2dS5CNx
SvzI32mdipn2OjFT7Zn5gFyzZ+xY4u/FkUyQ2T9FB+n9cX3J/jllvP8emf0zXFOyf0559k8qZO9P
zP457cv+2QnZ+5+RvT9lvH9Ch+9PGduA9+SnvaK7W+taS5eJeordHDSI3wtnJoNl9HwD0omvAQpl
bmRzdHJlYW0KZW5kb2JqCgo0NiAwIG9iago8PC9UeXBlL0ZvbnQvU3VidHlwZS9UcnVlVHlwZS9C
YXNlRm9udC9GQUFBQUErTGliZXJhdGlvblNlcmlmCi9GaXJzdENoYXIgMAovTGFzdENoYXIgMjkK
L1dpZHRoc1s3NzcgNTU2IDQ0MyA1MDAgNDQzIDI1MCA1MDAgNTAwIDMzMyA1MDAgNzIyIDUwMCA1
MDAgNTAwIDUwMCA2NjYKNTAwIDcyMiA1MDAgMzg5IDUwMCAyNzcgMjc3IDU2MyAyNzcgMzMzIDc3
NyA1NjMgNTAwIDUwMCBdCi9Gb250RGVzY3JpcHRvciA0NCAwIFIKL1RvVW5pY29kZSA0NSAwIFIK
Pj4KZW5kb2JqCgo0NyAwIG9iago8PC9GMSAzMSAwIFIvRjIgNDEgMCBSL0YzIDI2IDAgUi9GNCAy
MSAwIFIvRjUgNDYgMCBSL0Y2IDM2IDAgUgo+PgplbmRvYmoKCjQ4IDAgb2JqCjw8L0ZvbnQgNDcg
MCBSCi9Qcm9jU2V0Wy9QREYvVGV4dF0KPj4KZW5kb2JqCgoxIDAgb2JqCjw8L1R5cGUvUGFnZS9Q
YXJlbnQgMTYgMCBSL1Jlc291cmNlcyA0OCAwIFIvTWVkaWFCb3hbMCAwIDYxMS45NzE2NTM1NDMz
MDcgNzkxLjk3MTY1MzU0MzMwN10vQW5ub3RzWwoxMyAwIFIgMTQgMCBSIF0KL0dyb3VwPDwvUy9U
cmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRzIDIgMCBSPj4KZW5kb2Jq
Cgo0IDAgb2JqCjw8L1R5cGUvUGFnZS9QYXJlbnQgMTYgMCBSL1Jlc291cmNlcyA0OCAwIFIvTWVk
aWFCb3hbMCAwIDYxMS45NzE2NTM1NDMzMDcgNzkxLjk3MTY1MzU0MzMwN10vR3JvdXA8PC9TL1Ry
YW5zcGFyZW5jeS9DUy9EZXZpY2VSR0IvSSB0cnVlPj4vQ29udGVudHMgNSAwIFI+PgplbmRvYmoK
CjcgMCBvYmoKPDwvVHlwZS9QYWdlL1BhcmVudCAxNiAwIFIvUmVzb3VyY2VzIDQ4IDAgUi9NZWRp
YUJveFswIDAgNjExLjk3MTY1MzU0MzMwNyA3OTEuOTcxNjUzNTQzMzA3XS9Bbm5vdHNbCjE1IDAg
UiBdCi9Hcm91cDw8L1MvVHJhbnNwYXJlbmN5L0NTL0RldmljZVJHQi9JIHRydWU+Pi9Db250ZW50
cyA4IDAgUj4+CmVuZG9iagoKMTAgMCBvYmoKPDwvVHlwZS9QYWdlL1BhcmVudCAxNiAwIFIvUmVz
b3VyY2VzIDQ4IDAgUi9NZWRpYUJveFswIDAgNjExLjk3MTY1MzU0MzMwNyA3OTEuOTcxNjUzNTQz
MzA3XS9Hcm91cDw8L1MvVHJhbnNwYXJlbmN5L0NTL0RldmljZVJHQi9JIHRydWU+Pi9Db250ZW50
cyAxMSAwIFI+PgplbmRvYmoKCjQ5IDAgb2JqCjw8L0NvdW50IDgvRmlyc3QgNTAgMCBSL0xhc3Qg
NTcgMCBSCj4+CmVuZG9iagoKNTAgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDA0OTAwMkUw
MDIwMDA0OTAwNkUwMDc0MDA3MjAwNkYwMDY0MDA3NTAwNjMwMDc0MDA2OTAwNkYwMDZFPgovRGVz
dFsxIDAgUi9YWVogNTYuNyA1OTcgMF0vUGFyZW50IDQ5IDAgUi9OZXh0IDUxIDAgUj4+CmVuZG9i
agoKNTEgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDA0OTAwNDkwMDJFMDAyMDAwNEQwMDZG
MDA3NDAwNjkwMDc2MDA2MTAwNzQwMDY5MDA2RjAwNkUwMDIwMDA2MTAwNkUwMDY0MDAyMDAwNTMw
MDYzMDA2RjAwNzAwMDY1PgovRGVzdFsxIDAgUi9YWVogNTYuNyA1MzQuMSAwXS9QYXJlbnQgNDkg
MCBSL1ByZXYgNTAgMCBSL05leHQgNTIgMCBSPj4KZW5kb2JqCgo1MiAwIG9iago8PC9Db3VudCAw
L1RpdGxlPEZFRkYwMDQ5MDA0OTAwNDkwMDJFMDAyMDAwNTAwMDZGMDA3MzAwNzMwMDY5MDA2MjAw
NkMwMDY1MDAyMDAwNEYwMDYyMDA2QTAwNjUwMDYzMDA3NDAwNjkwMDZGMDA2RTAwNzMwMDIwMDA2
MTAwNkUwMDY0MDAyMDAwNTIwMDY1MDA3MzAwNzAwMDZGMDA2RTAwNzMwMDY1MDA3Mz4KL0Rlc3Rb
NCAwIFIvWFlaIDU2LjcgNzA3LjMgMF0vUGFyZW50IDQ5IDAgUi9QcmV2IDUxIDAgUi9OZXh0IDUz
IDAgUj4+CmVuZG9iagoKNTMgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDA0OTAwNTYwMDJF
MDAyMDAwNDkwMDZEMDA3MDAwNjEwMDYzMDA3NDAwMjAwMDRGMDA2RTAwMjAwMDc0MDA2ODAwNjUw
MDIwMDA1MzAwNzQwMDYxMDA2RTAwNjQwMDYxMDA3MjAwNjQ+Ci9EZXN0WzQgMCBSL1hZWiA1Ni43
IDM0My45IDBdL1BhcmVudCA0OSAwIFIvUHJldiA1MiAwIFIvTmV4dCA1NCAwIFI+PgplbmRvYmoK
CjU0IDAgb2JqCjw8L0NvdW50IDAvVGl0bGU8RkVGRjAwNTYwMDJFMDAyMDAwNDQwMDY1MDA3MzAw
NjkwMDY3MDA2RTAwMjAwMDQ0MDA2NTAwNjMwMDY5MDA3MzAwNjkwMDZGMDA2RTAwNzM+Ci9EZXN0
WzQgMCBSL1hZWiA1Ni43IDI5Mi45IDBdL1BhcmVudCA0OSAwIFIvUHJldiA1MyAwIFIvTmV4dCA1
NSAwIFI+PgplbmRvYmoKCjU1IDAgb2JqCjw8L0NvdW50IDAvVGl0bGU8RkVGRjAwNTYwMDQ5MDAy
RTAwMjAwMDRGMDA3MDAwNjUwMDZFMDAyMDAwNDkwMDczMDA3MzAwNzUwMDY1MDA3Mz4KL0Rlc3Rb
NyAwIFIvWFlaIDU2LjcgMjg2LjYgMF0vUGFyZW50IDQ5IDAgUi9QcmV2IDU0IDAgUi9OZXh0IDU2
IDAgUj4+CmVuZG9iagoKNTYgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDA1NjAwNDkwMDQ5
MDAyRTAwMjAwMDUwMDA3MjAwNkYwMDcwMDA2RjAwNzMwMDY1MDA2NDAwMjAwMDU3MDA2RjAwNzIw
MDY0MDA2OTAwNkUwMDY3PgovRGVzdFsxMCAwIFIvWFlaIDU2LjcgNTk5IDBdL1BhcmVudCA0OSAw
IFIvUHJldiA1NSAwIFIvTmV4dCA1NyAwIFI+PgplbmRvYmoKCjU3IDAgb2JqCjw8L0NvdW50IDAv
VGl0bGU8RkVGRjAwNTYwMDQ5MDA0OTAwNDkwMDJFMDAyMDAwNDEwMDYzMDA2QjAwNkUwMDZGMDA3
NzAwNkMwMDY1MDA2NDAwNjcwMDY1MDA2RDAwNjUwMDZFMDA3NDAwNzM+Ci9EZXN0WzEwIDAgUi9Y
WVogNTYuNyA1NTAuOCAwXS9QYXJlbnQgNDkgMCBSL1ByZXYgNTYgMCBSPj4KZW5kb2JqCgoxNiAw
IG9iago8PC9UeXBlL1BhZ2VzCi9SZXNvdXJjZXMgNDggMCBSCi9NZWRpYUJveFsgMCAwIDYxMSA3
OTEgXQovS2lkc1sgMSAwIFIgNCAwIFIgNyAwIFIgMTAgMCBSIF0KL0NvdW50IDQ+PgplbmRvYmoK
CjEzIDAgb2JqCjw8L1R5cGUvQW5ub3QvU3VidHlwZS9MaW5rL0JvcmRlclswIDAgMF0vUmVjdFsy
NjYuNSA0ODMuMSAzNjEuMyA0OTUuMV0vQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwczov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9UaW1lX3Nlcmllcyk+Pgo+PgplbmRvYmoKCjE0IDAgb2Jq
Cjw8L1R5cGUvQW5ub3QvU3VidHlwZS9MaW5rL0JvcmRlclswIDAgMF0vUmVjdFs2OC40IDE1Ni45
IDI1OS41IDE2OC45XS9BPDwvVHlwZS9BY3Rpb24vUy9VUkkvVVJJKGh0dHBzOi8vZ2l0aHViLmNv
bS9kYW5yYS9zaGlmdF9wcm9wb3NhbCk+Pgo+PgplbmRvYmoKCjE1IDAgb2JqCjw8L1R5cGUvQW5u
b3QvU3VidHlwZS9MaW5rL0JvcmRlclswIDAgMF0vUmVjdFs3My43IDIxNC4zIDE4Ny41IDIyNi40
XS9BPDwvVHlwZS9BY3Rpb24vUy9VUkkvVVJJKGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5yYS9zaGlm
dF9wcm9wb3NhbCk+Pgo+PgplbmRvYmoKCjU4IDAgb2JqCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAx
NiAwIFIKL09wZW5BY3Rpb25bMSAwIFIgL1hZWiBudWxsIG51bGwgMF0KL091dGxpbmVzIDQ5IDAg
UgovTGFuZyhlbi1VUykKPj4KZW5kb2JqCgo1OSAwIG9iago8PC9DcmVhdG9yPEZFRkYwMDU3MDA3
MjAwNjkwMDc0MDA2NTAwNzI+Ci9Qcm9kdWNlcjxGRUZGMDA0QzAwNjkwMDYyMDA3MjAwNjUwMDRG
MDA2NjAwNjYwMDY5MDA2MzAwNjUwMDIwMDAzNTAwMkUwMDM0PgovQ3JlYXRpb25EYXRlKEQ6MjAx
NzA4MjUwMDU1MDUrMDMnMDAnKT4+CmVuZG9iagoKeHJlZgowIDYwCjAwMDAwMDAwMDAgNjU1MzUg
ZiAKMDAwMDA3NTc4OCAwMDAwMCBuIAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDE5NTMgMDAw
MDAgbiAKMDAwMDA3NTk4MyAwMDAwMCBuIAowMDAwMDAxOTc0IDAwMDAwIG4gCjAwMDAwMDUwMTIg
MDAwMDAgbiAKMDAwMDA3NjE1MyAwMDAwMCBuIAowMDAwMDA1MDMzIDAwMDAwIG4gCjAwMDAwMDgy
ODcgMDAwMDAgbiAKMDAwMDA3NjM0MSAwMDAwMCBuIAowMDAwMDA4MzA4IDAwMDAwIG4gCjAwMDAw
MDk2MzggMDAwMDAgbiAKMDAwMDA3ODI2MiAwMDAwMCBuIAowMDAwMDc4NDI0IDAwMDAwIG4gCjAw
MDAwNzg1ODMgMDAwMDAgbiAKMDAwMDA3ODE0MyAwMDAwMCBuIAowMDAwMDA5NjYwIDAwMDAwIG4g
CjAwMDAwMTk1MDEgMDAwMDAgbiAKMDAwMDAxOTUyMyAwMDAwMCBuIAowMDAwMDE5NzE0IDAwMDAw
IG4gCjAwMDAwMjAyMDAgMDAwMDAgbiAKMDAwMDAyMDUyNyAwMDAwMCBuIAowMDAwMDIzODE2IDAw
MDAwIG4gCjAwMDAwMjM4MzggMDAwMDAgbiAKMDAwMDAyNDAzNCAwMDAwMCBuIAowMDAwMDI0Mzc4
IDAwMDAwIG4gCjAwMDAwMjQ1ODIgMDAwMDAgbiAKMDAwMDA0NDI4MiAwMDAwMCBuIAowMDAwMDQ0
MzA1IDAwMDAwIG4gCjAwMDAwNDQ1MDAgMDAwMDAgbiAKMDAwMDA0NTExMiAwMDAwMCBuIAowMDAw
MDQ1NTY3IDAwMDAwIG4gCjAwMDAwNTU3NzMgMDAwMDAgbiAKMDAwMDA1NTc5NiAwMDAwMCBuIAow
MDAwMDU1OTkwIDAwMDAwIG4gCjAwMDAwNTYzOTIgMDAwMDAgbiAKMDAwMDA1NjY0NyAwMDAwMCBu
IAowMDAwMDY1MjU4IDAwMDAwIG4gCjAwMDAwNjUyODAgMDAwMDAgbiAKMDAwMDA2NTQ4MyAwMDAw
MCBuIAowMDAwMDY1OTE1IDAwMDAwIG4gCjAwMDAwNjYyMDYgMDAwMDAgbiAKMDAwMDA3NDczMiAw
MDAwMCBuIAowMDAwMDc0NzU0IDAwMDAwIG4gCjAwMDAwNzQ5NTEgMDAwMDAgbiAKMDAwMDA3NTM3
MSAwMDAwMCBuIAowMDAwMDc1NjUwIDAwMDAwIG4gCjAwMDAwNzU3MzMgMDAwMDAgbiAKMDAwMDA3
NjUxMyAwMDAwMCBuIAowMDAwMDc2NTY5IDAwMDAwIG4gCjAwMDAwNzY3MjUgMDAwMDAgbiAKMDAw
MDA3NjkzMSAwMDAwMCBuIAowMDAwMDc3MTkzIDAwMDAwIG4gCjAwMDAwNzc0MDcgMDAwMDAgbiAK
MDAwMDA3NzU5MyAwMDAwMCBuIAowMDAwMDc3NzYzIDAwMDAwIG4gCjAwMDAwNzc5NTYgMDAwMDAg
biAKMDAwMDA3ODc0MiAwMDAwMCBuIAowMDAwMDc4ODU3IDAwMDAwIG4gCnRyYWlsZXIKPDwvU2l6
ZSA2MC9Sb290IDU4IDAgUgovSW5mbyA1OSAwIFIKL0lEIFsgPEMzODE0NUE4QzIxMTQ5MTQ3RTM4
RTk4QTAzRkI4Qzg0Pgo8QzM4MTQ1QThDMjExNDkxNDdFMzhFOThBMDNGQjhDODQ+IF0KL0RvY0No
ZWNrc3VtIC9CQjVDMUYzNkQzRkY2RTEzNjE4QTVBOEI0RDM1NUFBRAo+PgpzdGFydHhyZWYKNzkw
MzIKJSVFT0YK
------=_Part_1921_1218046591.1503612028212--

.


Author: Dan Raviv <dan.raviv@gmail.com>
Date: Sat, 30 Sep 2017 12:38:33 -0700 (PDT)
Raw View
------=_Part_3509_1344779633.1506800313344
Content-Type: multipart/alternative;
 boundary="----=_Part_3510_1645026934.1506800313345"

------=_Part_3510_1645026934.1506800313345
Content-Type: text/plain; charset="UTF-8"

Hi,

Attached updated proposal draft.

- Added proposed standard wording.
- Decided to allow shift by zero despite a possible minimal performance
penalty.
- Improved formatting and content nits.

Would appreciate any comments as well as possible naming alternatives (see
Open Issues section in the proposal).

Thanks,
Dan

On Friday, August 25, 2017 at 1:00:28 AM UTC+3, Dan Raviv wrote:
>
> Hi!
>
> Attached an updated proposal draft, now with shift_right for forward,
> non-bidirectional iterators, courtesy of Casey Carter! You can check out
> the implementation at https://github.com/danra/shift_proposal .
>
> Also removed the filler functionality, following feedback which has proven
> it to be redundant.
>
> Would appreciate any further comments, as well as opinions on the listed
> open issues.
>
> Thanks,
> Dan
>
>
>
> On Saturday, August 19, 2017 at 2:24:07 AM UTC+3, Dan Raviv wrote:
>>
>> Hi,
>>
>> Attached an updated proposal draft.
>>
>> Would appreciate any comments, as well as opinions on any of the listed
>> open issues.
>>
>> Thanks!
>> Dan
>>
>> On Saturday, July 29, 2017 at 8:19:01 PM UTC+3, Dan Raviv wrote:
>>>
>>> Hi,
>>>
>>> Attached a proposal draft with reasoning and sample implementation (but
>>> still no complete design and standard wording).
>>> Would appreciate any feedback!
>>>
>>> Thanks,
>>> Dan
>>>
>>> On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, d...@soundradix.com
>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> Would anyone be interested in adding std::shift to <algorithm>?
>>>>
>>>> It would be similar to both:
>>>> - std::rotate, but without moving the head elements back to the tail.
>>>> This would allow a more efficient implementation and clearer semantics in
>>>> case rotation is not needed as well as correctness in case rotation is
>>>> undesired.
>>>> - <algorithm>'s std::move/std::move_backward (depending on the shift
>>>> direction).
>>>>
>>>> std::shift should probably accommodate both left and right shifts by
>>>> one of:
>>>> - giving it either begin() and end(), or rbegin() and rend(), similar
>>>> to how std::rotate works for both left and right rotations. The advantage
>>>> is compactness of the implementation.
>>>> - allowing the shift count parameter to be either positive or negative.
>>>> The advantage is compactness, though it might not be clear which direction
>>>> is which - to be consistent with rotate, positive integers should shift to
>>>> the left.
>>>> - having std::shift_right and std::shift_left functions. The advantage
>>>> is clarity when calling the methods, although the same argument could be
>>>> made for having separate std::rotate_left and std::rotate_right instead of
>>>> std::rotate, which we don't have.
>>>>
>>>> Here's a sample implementation of a shift to the right direction:
>>>>
>>>> template<class BidirIt>
>>>> void shift_right(BidirIt first, BidirIt last, unsigned int n = 1)
>>>> {
>>>>     std::move_backward(first, last - n, last);
>>>> }
>>>>
>>>> This demonstrates that while std::shift is implementable with
>>>> std::move/std::move_backward,
>>>> 1) It isn't immediately clear from the code (at least to my eyes) that
>>>> this is a shift right, unless you are intimately familiar with
>>>> std::move_backward.
>>>> 2) Different calls, either to std::move or to std::move_backward, are
>>>> required, depending on the shift direction.
>>>>
>>>> So, implementing std::shift would allow writing more readable code.
>>>>
>>>> Thanks,
>>>> Dan
>>>>
>>>

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c13f1706-5a79-4500-8697-a5fc547a9a6f%40isocpp.org.

------=_Part_3510_1645026934.1506800313345
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>Attached updated proposal draft.</d=
iv><div><br></div><div>- Added proposed standard wording.</div><div>- Decid=
ed to allow shift by zero despite a possible minimal performance penalty.</=
div><div>- Improved formatting and content nits.</div><div><br></div><div>W=
ould appreciate any comments as well as possible naming alternatives (see O=
pen Issues section in the proposal).</div><div><br></div><div>Thanks,</div>=
<div>Dan</div><div><br>On Friday, August 25, 2017 at 1:00:28 AM UTC+3, Dan =
Raviv wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-lef=
t: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">H=
i!<div><br></div><div>Attached an updated proposal draft, now with shift_ri=
ght for forward, non-bidirectional iterators, courtesy of Casey Carter! You=
 can check out the implementation at=C2=A0<a href=3D"https://github.com/dan=
ra/shift_proposal" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.h=
ref=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2Fdanra=
%2Fshift_proposal\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNHiQn6IrMCHhvjPvIg=
88uN8njRO6g&#39;;return true;" onclick=3D"this.href=3D&#39;https://www.goog=
le.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2Fdanra%2Fshift_proposal\x26sa\x3d=
D\x26sntz\x3d1\x26usg\x3dAFQjCNHiQn6IrMCHhvjPvIg88uN8njRO6g&#39;;return tru=
e;">https://github.com/danra/<wbr>shift_proposal</a> .</div><div><br></div>=
<div>Also removed the filler functionality, following feedback which has pr=
oven it to be redundant.</div><div><br></div><div>Would appreciate any furt=
her comments, as well as opinions on the listed open issues.</div><div><br>=
</div><div>Thanks,</div><div>Dan</div><div><br></div><div><br><br>On Saturd=
ay, August 19, 2017 at 2:24:07 AM UTC+3, Dan Raviv wrote:<blockquote class=
=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>Attached an =
updated proposal draft.</div><div><br></div><div>Would appreciate any comme=
nts, as well as opinions on any of the listed open issues.</div><div><br></=
div><div>Thanks!</div><div>Dan</div><div><br>On Saturday, July 29, 2017 at =
8:19:01 PM UTC+3, Dan Raviv wrote:<blockquote class=3D"gmail_quote" style=
=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div dir=3D"ltr">Hi,<div><br></div><div>Attached a proposal draft with rea=
soning and sample implementation (but still no complete design and standard=
 wording).<div>Would appreciate any feedback!</div><div><br></div><div>Than=
ks,</div><div>Dan<br><br>On Wednesday, July 12, 2017 at 12:53:19 PM UTC+3, =
<a>d...@soundradix.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D=
"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr">Hi,<div><br></div><div>Would anyone be interested in adding =
std::shift to &lt;algorithm&gt;?=C2=A0</div><div><br></div><div>It would be=
 similar to both:</div><div>- std::rotate, but without moving the head elem=
ents back to the tail. This would allow a more efficient implementation and=
 clearer semantics in case rotation is not needed as well as correctness in=
 case rotation is undesired.</div><div>- &lt;algorithm&gt;&#39;s std::move/=
std::move_backward (depending on the shift direction).</div><div><br></div>=
<div>std::shift should probably accommodate both left and right shifts by o=
ne of:</div><div>- giving it either begin() and end(), or rbegin() and rend=
(), similar to how std::rotate works for both left and right rotations. The=
 advantage is compactness of the implementation.</div><div>- allowing the s=
hift count parameter to be either positive or negative. The advantage is co=
mpactness, though it might not be clear which direction is which - to be co=
nsistent with rotate, positive integers should shift to the left.<br></div>=
<div><div>- having std::shift_right and std::shift_left functions. The adva=
ntage is clarity when calling the methods, although the same argument could=
 be made for having separate std::rotate_left and std::rotate_right instead=
 of std::rotate, which we don&#39;t have.</div></div><div><br></div><div>He=
re&#39;s a sample implementation of a shift to the right direction:</div><b=
r><div style=3D"background-color:rgb(250,250,250);border:1px solid rgb(187,=
187,187);word-wrap:break-word"><code><div><span style=3D"color:#008">templa=
te</span><span style=3D"color:#660">&lt;</span><span style=3D"color:#008">c=
lass</span><span style=3D"color:#000"> </span><span style=3D"color:#606">Bi=
dirIt</span><span style=3D"color:#660">&gt;</span><span style=3D"color:#000=
"> <br></span><span style=3D"color:#008">void</span><span style=3D"color:#0=
00"> shift_right</span><span style=3D"color:#660">(</span><span style=3D"co=
lor:#606">BidirIt</span><span style=3D"color:#000"> first</span><span style=
=3D"color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"c=
olor:#606">BidirIt</span><span style=3D"color:#000"> </span><span style=3D"=
color:#008">last</span><span style=3D"color:#660">,</span><span style=3D"co=
lor:#000"> </span><span style=3D"color:#008">unsigned</span><span style=3D"=
color:#000"> </span><span style=3D"color:#008">int</span><span style=3D"col=
or:#000"> n </span><span style=3D"color:#660">=3D</span><span style=3D"colo=
r:#000"> </span><span style=3D"color:#066">1</span><span style=3D"color:#66=
0">)</span><span style=3D"color:#000"> <br></span><span style=3D"color:#660=
">{</span><span style=3D"color:#000"> <br>=C2=A0 =C2=A0 std</span><span sty=
le=3D"color:#660">::</span><span style=3D"color:#000">move_backward</span><=
span style=3D"color:#660">(</span><span style=3D"color:#000">first</span><s=
pan style=3D"color:#660">,</span><span style=3D"color:#000"> </span><span s=
tyle=3D"color:#008">last</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#660">-</span><span style=3D"color:#000"> n</span><span style=
=3D"color:#660">,</span><span style=3D"color:#000"> </span><span style=3D"c=
olor:#008">last</span><span style=3D"color:#660">);</span><span style=3D"co=
lor:#000"> <br></span><span style=3D"color:#660">}</span><span style=3D"col=
or:#000"><br></span></div></code></div><div><br></div><div>This demonstrate=
s that while std::shift is implementable with std::move/std::move_backward,=
</div><div>1) It isn&#39;t immediately clear from the code (at least to my =
eyes) that this is a shift right, unless you are intimately familiar with s=
td::move_backward.</div><div>2) Different calls, either to std::move or to =
std::move_backward, are required, depending on the shift direction.</div><d=
iv><br></div><div>So, implementing std::shift would allow writing more read=
able code.</div><div><br></div><div>Thanks,</div><div>Dan</div></div></bloc=
kquote></div></div></div></blockquote></div></div></blockquote></div></div>=
</blockquote></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; 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 />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/c13f1706-5a79-4500-8697-a5fc547a9a6f%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/c13f1706-5a79-4500-8697-a5fc547a9a6f=
%40isocpp.org</a>.<br />

------=_Part_3510_1645026934.1506800313345--

------=_Part_3509_1344779633.1506800313344
Content-Type: application/pdf; name="shift proposal D0769R0.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="shift proposal D0769R0.pdf"
X-Attachment-Id: 6fe54453-8a3a-4d3b-9002-fb47cfd0e837
Content-ID: <6fe54453-8a3a-4d3b-9002-fb47cfd0e837>

JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G
bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHNWltv28gVfuevmKcFjbUZDu9006BpmhYpWqC7FrAP3SKw
LclS1yIVSs42P7Sv/S09w5nvHIoXS3JTIAgCypzhzDnfuZ+ZT+oH9UmF9C/TkcrLSDUL9ZOq1Kt3
O63ud0q3/3b3/TnL9sMsCYoij7TKI5UUURBFaaayVHu9VcwGoaJVPtFy5mf7RR6W6n6jfj9TtHf7
1j5mG/VqNjM7z5be35X/hwt1FQaR8uv7C9X+eNq4Hwv3rPbuh6p47A6DzXU76PmKFiqI5rSzZphn
5Y/hhfqHmv1ZvZ+1bB2hUadxEOqyVKFnSY1aUpVZf/bPkUWyMj2P0VvHDbgCJ5aRdqOrLEly5Ueh
zq/C8ioWFjwj0g4LY7vrLAriJDJ4n8hCob1jslIkq7eQ1RNoX9UOf0t2moY6yD0RKnit1I/4+Xnt
+P+sXs/xsgoa/JTx3114YaCV/wCFwBSs8OhWCqA6NWa+mZR5NsJrVOggzSKS+amAZbmVuTet3IeA
zUEzpF2BZry4NtySHRg9TtIwNpz/xTH43j1/cs8/QRDqt28UTcrjoFS+jHoTCp+B7o5R6iILyjyd
5P1A43QcqSxKnMJHRWvZ7mF1Lbbm0tWWuaN6Lhy2nO7AxcpNAEbLPYHQTtnX7ge9GOPJ0eO0NwzC
MCTHcq+EMp3FQVRmItvE2fPr28eHulnvVxtSFrZsD7Z1yOnQd6RFAbO3KGj7YBS82dKowAfHQCCM
tJzhfQVOG6ABlgHbk4ONFMZ6yj1wwkxaYwwc8tvpiMDJGTvXZr2woXLmqFhhaZaN2sLqttDURm2b
elu7KZ6P9/INPpmz2lcPiod5kyXciLIfeD4s2kgGwIA02Davo/B5zb9WoEW9+/57dXPhWcTAHplK
nAUFGdmvAJOJgT2uFDaqP/NqCycD0IcBTMXfHKqEyGXd8GZgs5mruplQaSO1NIZuTcZOI7W7W1GN
Vql+6e2kfNoJQFYOZeKenW31AMpVvVQv55K0e0oD03gQW3RaBGmZ5pM+px+o0yiEvx03Nkomusb2
welM3+j+CoshE7Le9jP0gEQzbV0tuPBJPBOm2/drN2yp2G7r6CGwJ2BKKONoQ/CRiHIDMllv2YhY
zg8kSOM+xZwg5Bepa6tEpK5fVduAv9iJtQ1STtrHOn8eA2cwUVWLL7KTPR++AHPr6lkbx3RxGA5Z
j32hOAsmZFU/wQPMp803KVxGeESW4BNL4lmzFSvhk9zIxuksWCSfCsFiKaYUc7DmlwtFuTElCQHR
nSYmSXsLVarYRUA/tnUDgLAyezb1xJtAzRQEg8m9GSRU0MMjB/CZwE2olQVVF/S7zMIii8g9BGlO
hkGJWb+6YIg7iUyUULaYmczdZXGagrn1C2AGVIBPwCexCW84/IBHIRxMVvjBGPMc7EMvxN5NEWTq
JO8ggR/jJI7jIClCyckkULMPt5t6/mmRsi8z5XfjgqXSa5McwrzUuUmYfrV14rublu5Q3bzj0uPK
lnjWKzPukYmtlF+rjccc8LtHddP36klOVegJJSLDCjUDvBAW6yYG/gPVxhcEm/X31VzxIAuQc3F8
35cso77dAndMxQ74pK9qdcXkTwdJQmIYJHMdlGlq8tHJKo4K+cgU8sPyO0lzt2IrVVT80EGWpK3u
kyP5hstlZ84xi9Nk3gCDeGaTUAAM+cBlji4vA2iwoBE3gSkHqWRnXVc0LWusgad4UYiK/OXyiWWN
NTBKAWPvlAR6BTfhhK58EINvMZFhYI5rdTFVhCWMttQrUkbGSRpEaW7SHCv2VGkDv9+pV6hTwAVL
txkgK8t6SayDLNfiFSPrFbv9jGfUiAopa6KjatRzZTpzkzuMWY3T9sEcGb/s7xeb7ePtfvH6/vF2
t1N/pET5tpl/2C+a233dvLnwxpnkXYRJU8OGcRgzaP2mzUERa/pZIWrY00jt0aZ2q/Vy//Fxsdz/
7E/RyVt06KTOTBhlycl0xtS0s/iP0RmnQSJBghSlhbVP63Ld7PaXfXgVYb6/nKBdthXao7IMkvJ0
iOPC5ewUxlGWOzWgxzjp+y/bRXW7Wajdfn59vXaa8HHf3K73u9c9xt5cX8/Xy+WiWVT3i4/mU1VN
8cO0CD9JlAapjgW/YzoTZ7CFMYaMgh+q988Xv3F22te+mBqp01IdrtQzlPf/Wtw/7dd19bf6cX3/
5VKdZT+yuWARR0kQpibjmog1Aw6S/7v9xLyF0Gk6m+fZD/WrppEeV8IevN99p7YO554CqpdYFhMk
XCWp0cTiDK+AcvhbMC2mpcPQ2aYVfi3TolbfMwI/alo9CU/FINlFmD47BkUk8WndHJLao83FoGb9
sJoOQrJHh9CsICPKT/fkEQXMaULHjahP7AtMRbYV2s8NQlH27QQhoUX4OTsIRclXs5T4f7KUnpc8
MwhRWehUSrA4OwhFfBBxWkDu66RN4o4YEO8hhOqzDYi+PdeAevh+3SgUMUHC1dlRKAq/IdtiWjoM
nRuFNB/pnKZP0wmerCTkaEpd6GB5Ot+k9ogpxLzRel7TCZ1VodFC7LCe1/B6RxqQb9tWIB2YS/8L
Fe6g9MXZAJfoIzNs2xYDKI65O4O1UWZ3Km/ueHJbGw2F1aDfqHwptyeLbIagmyLxYYqm6wwx9Rg5
30WR3dYdm/bgZ7T4lGVFsFGSB1qX0qiRvmOnHQBmgQ73FAATBvC3g6292CBNxIPeoVDTUVhmMtZZ
kOeppJWpq/yleJ3oI8i6wmVcFEFeUMcOJUKHyyWdDtB/FiIETYdP3QboIe3JMAJQzjM4mQRu/ZYL
H2FhoG5ELSwBnk/dvhMIGAOPCo2MgnOnDQPwTGVqNOTj3e39L6ZhMQXiCIO6pGs0WUx11oDPl6sK
sQkMXsptlFGvsXvpBb2ETog8g8040QGdnxN4QzaNrtxBqHw83EDrYfbgCDNratbaVh/6e+yIMBVL
PKsZ3Vb3oT6OFGaSg0sDHgRCxytFV5G4CflEGgeSqwNpGCVzRxzGJR0/4iAABz3hPDduK5VmntC1
Agx4btkccEPqlWvf4vkASvHJ6ulueJUGs+WuDgFsGcYQ78Temw8lP3avCkgDlYTofBp1FgzMww62
uYBhI544oSijuypp3HFCfNvkkru3dEj3sGIpgLd/22OvbvDgKwydl4Dk7rHXC5ZbAayrfPq25CMF
aAeWsTp5zEIPjlNYxmlRks4Uudoo5hvvvJHjFE03UPqAjWkwaLMBx/NPjUQiPWCKlfiMg4IVEOie
lPJlPQYR1jOH0V5KCmJXJcywFOYw3nABGJgInSxWIgsbivAenvgdfrAfxcJ4zjveWcwd28o9kbmc
OQMbYMWmYY4ZbKJEpyLOcbABgRIsDQIOXMmh30Kb+Uiux15RrnxcqqoGLcaLWaqQnXE0xwCewgBP
qRV78uWF0nmQKX9p53s+Q87wjt0/YQimT8l0mAw8oi7jIM6nG5f9M0dawxpJBy5dZgdriFOdiaQs
OKKlIikrw4EVsQeCLAczMMDAAnqsDeFAl+iICkMwAYat7u13jl3zIrw8aUZ11fXRBzpXHL/aa27j
gHw+S6ernRasPhe8L9h67lTbpJrGHrzRO71M21hWVxa9+GnzHM8/nufwuhKNNLnqNNJS0ZHiuJNS
c/g5nhEbo6uuTsqALFYi/AFqGALQUCS2dQyY3NgduU6b1wiHcWZOmAZn0G1Ngvroh/8CjGwsrgpl
bmRzdHJlYW0KZW5kb2JqCjUgMCBvYmoKMjc3MAplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFn
ZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJjZXMgNiAwIFIgL0NvbnRlbnRzIDQgMCBSIC9NZWRpYUJv
eCBbMCAwIDYxMiA3OTJdCi9Bbm5vdHMgMTQgMCBSID4+CmVuZG9iago2IDAgb2JqCjw8IC9Qcm9j
U2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNyAwIFIgL0NzMiAxMiAwIFIg
Pj4gL0ZvbnQKPDwgL1RUNSAxMyAwIFIgL1RUMyAxMCAwIFIgL1RUMSA4IDAgUiAvVFQyIDkgMCBS
IC9UVDQgMTEgMCBSID4+ID4+CmVuZG9iagoxNCAwIG9iagpbIDE1IDAgUiAxNiAwIFIgXQplbmRv
YmoKMTcgMCBvYmoKPDwgL0xlbmd0aCAxOCAwIFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0Ig
L0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBnZZ3VFPZFofPvTe90BIiICX0GnoJINI7
SBUEUYlJgFAChoQmdkQFRhQRKVZkVMABR4ciY0UUC4OCYtcJ8hBQxsFRREXl3YxrCe+tNfPemv3H
Wd/Z57fX2Wfvfde6AFD8ggTCdFgBgDShWBTu68FcEhPLxPcCGBABDlgBwOFmZgRH+EQC1Py9PZmZ
qEjGs/buLoBku9ssv1Amc9b/f5EiN0MkBgAKRdU2PH4mF+UClFOzxRky/wTK9JUpMoYxMhahCaKs
IuPEr2z2p+Yru8mYlybkoRpZzhm8NJ6Mu1DemiXho4wEoVyYJeBno3wHZb1USZoA5fco09P4nEwA
MBSZX8znJqFsiTJFFBnuifICAAiUxDm8cg6L+TlongB4pmfkigSJSWKmEdeYaeXoyGb68bNT+WIx
K5TDTeGIeEzP9LQMjjAXgK9vlkUBJVltmWiR7a0c7e1Z1uZo+b/Z3x5+U/09yHr7VfEm7M+eQYye
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
321/0wGNA8UHPh4UHLx/yPdQa61BbcVh3OGsw8/rouq6v2d/X39E7Ujxkc9HhUelx8KPddU71Nc3
qDeUNsKNksax43HHb/3g9UN7E6vpUDOjufgEOCE58eLH+B/vngw82XmKfarpJ/2f9rbQWopaodbc
1om2pDZpe0x73+mA050dzh0tP5v/fPSM9pmas8pnS8+RzhWcmzmfd37yQsaF8YuJF4c6V3Q+urTk
0p2usK7ey4GXr17xuXKp2737/FWXq2euOV07fZ19ve2G/Y3WHruell/sfmnpte9tvelws/2W462O
vgV95/pd+y/e9rp95Y7/nRsDiwb67i6+e/9e3D3pfd790QepD14/zHo4/Wj9Y+zjoicKTyqeqj+t
/dX412apvfTsoNdgz7OIZ4+GuEMv/5X5r0/DBc+pzytGtEbqR61Hz4z5jN16sfTF8MuMl9Pjhb8p
/rb3ldGrn353+71nYsnE8GvR65k/St6ovjn61vZt52To5NN3ae+mp4req74/9oH9oftj9MeR6exP
+E+Vn40/d3wJ/PJ4Jm1m5t/3hPP7CmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoKMjYxMgplbmRv
YmoKNyAwIG9iagpbIC9JQ0NCYXNlZCAxNyAwIFIgXQplbmRvYmoKMTkgMCBvYmoKPDwgL0xlbmd0
aCAyMCAwIFIgL04gMSAvQWx0ZXJuYXRlIC9EZXZpY2VHcmF5IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
ID4+CnN0cmVhbQp4AaVXB1iT1xo+/0jCSthTRtjIMqDsGZkBZA9BVGISSBghBoKAuCjFCtYtDhwV
LYpStFoRKC7U4qBuUOu4UEsFpRaruLB6zwmg0Pa59z7Pzf8c/vd8Z3zrPd9/AEBdyJVIsnEAQI44
XxoSy06emZzCpN0DCkAXqAJHoMrl5UnY0dERcAoQ54oF6D3x97ILYEhywwHtNXHsv/YofEEeD846
BVsRP4+XAwDmDQCtjyeR5gOgaAHl5gvyJQiHQqyVFR8bAHEqAAoqo2uhGJiECMQCqYjHDJFyi5gh
3JwcLtPZ0ZkZLc1NF2X/g9Vo0f/zy8mWIbvRzwQ2lbysuHD4doT2l/G5gQi7Q3yYxw2KG8WPC0SJ
kRD7A4CbSfKnx0IcBvE8WVYCG2J7iOvTpcEJEPtCfFsoC0V4GgCETrEwPgliY4jDxPMioyD2hFjI
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
c1hzW4tXy9HvHb/f22raWn1c+/jqE0onyk58OFl8cuiU5NTA6YzTD9vmtt09M/PMzbMxZy+fCz93
/ofgH860s9tPnvc533rB80LzRfeLxy65XmrscOk4+qPLj0cvu15uvOJ2pemqx9WWa97XTlz3u376
RuCNH25ybl7qjOy81pXQdftW6q3u2/zbfXey7zz7qeCn4btL4SW+4r7a/aoHhg9q/jX5Xwe7XbuP
9wT2dPwc9/Pdh7yHT37J++Vdb9mv9F+rHpk8qutz7mvtD+6/+njW494nkifDA+W/qf+27anN0+9+
9/+9Y3DmYO8z6bMPf6x8rv9874tpL9qGoocevMx5Ofyq4rX+631v3N+0v016+2h4wTvau81/Tv6z
5X34+3sfcj58+DctXfAcCmVuZHN0cmVhbQplbmRvYmoKMjAgMCBvYmoKMzM2NwplbmRvYmoKMTIg
MCBvYmoKWyAvSUNDQmFzZWQgMTkgMCBSIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9MZW5ndGggMjMg
MCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AbVbzXLkthG+8ymQG6dKS/OfQyeV
qk2cqmwOjtdW2YfI5ZJESbNei9RS0jrK++R9csk1z5IGga8bJEDOKFUpHTgaAo1G99e/wHxS79Un
ldJfneWqaXM13qgfVK+++ONjpq4fVTb9PV4vx9xOE/O0Suq6UE2xT6q0UnmaJnVT0jNp921bRwtq
adK0VV7vWxX6RKt8ouU0N5nKs1Q1ZaWu79UfzhUxN309PaLze/XF+XlNo85vVfxV2tTtt6n6l3rb
derx8OH2ST0N6neXv9wN44enw/3vd+r8Z/Wnc2JZ77Zukko1uSqbRtVVnlQel9NaM25oeJPmYGZv
mDEPw0wxMRP9TcXvdrS53H8m9ntln98M9sPjTr2ZZvCHD9ObKL6yI36xzxuMBI2/2hcY+PNy4LWZ
EcVPhqaKsWpvh/KioHmJRTCisyPNgCj+FgOYHabxYIeuLuJO+TE6/4vRimid5FzvCXi+0pWRs8aj
Vnp2sSN+oNZPEWCzQiArkqYirRkijSFCynIEaHTw880umpRBkpueIjiShxnz5U79qE7mvd4nZVrn
tLrFrd0Cra6+A8kD1HP7ZNfFF/2dAiukmYmlXl2BS9UNPcl0+lpdvahnVoUz/wi7EdlXmqRpSpK9
diwtz5qk2NcNi62ysn986r788n74TAuzAuiVsVujgGipwXyfJ1nbFEzMkcJFzMySTtdFa4mGeC3S
LKlyhzx4DXqBo3Ap9uSfSjJ4IAawu9iRGZ+86WLfJE1B/hFkcitBB7rkaMmvPNKQpcOp68bueHJd
8MhazIHBVbFhNQT4iKyGIOca74QaBgzZroH3wEDnd4CYRX40MfRppvPA+uRbCVSt2J2j850idNUq
/sGaGxsAwH5Qw+0GGni5EBqyNE+apijZ5ICGo8hlshJwMh0v9kILUFDD6KhxRRhB7vYFESRrg0Pw
uPvp6vL646+XI3neMNYCbBbk4vJUs+27mXvrIcQ7wMtoT2K9h7zEV53q4Gce8F3fMSjU0CvQOeD9
hsqK1vMKGskzv04IZfoMCfaJqoOjGMEY4AJGMGDoz9SvQDRTwuiDwji7WhQr7GAch5HQ2VKSEL95
GMW/JuodVlFwxYjMzPSg7i2iMeQjCPMYdUvQwUzvrQzjTYJUhw9Xy9kcIwZSmVHob6FYs+koHnom
jd3zYNrxmt8tWs+xFG2Z5G1JWZzF2uv8GsVCEx5cvxat+LUM2UDA5/C7oJmZkG85nNnYlCP+NH64
OzxdxJ+Tq5u7D/1FfLE7U5+Tm74zH4uLHYkwbH9Z5kFZR6CmrUkmFtEBmcycRNU2RgyR42tmaYq4
y8+sOQo/K4oieh5TeZOUWUtZ/clM7W0YCbj4Cu+C2cI8w5qJW6cK7NLWBK7eqMKRvxZ+FBS+sCFy
K/b7hAqGdeFH73VFsxJoK9KaD0iSWSjQVlXliTnkxt717CQ6dlvwH7A/7aV20ZpCK9hJCN7VPiny
MhfVksh1jI8dcK/Al7bgmXRWUJQrGp3FWYdMKbVJGXgffbfu3YVmiNmsTpN9XVAitDRHXa399MuN
dvFhbQd4zYs82et0fj3SwVG+OAEOQkc0fJg70SjGC3jQHurCFx05d+NcB/LNNm7iw+1/EG6ubQTA
ghjB9LDwi8RPMNxviLiE1wmJWDDo2d6aaJmeGFJdJvssJZkzDEzGqosVZnELBkwzxCNZaVbUVCGA
uscquwnNc8gHlQgHwrOuU5qq0dX4Mpc4U9ZxRlJiIAeAVjjwQyt4AV3jf6u+SDIUFomg4e4ZYhrx
gdUOQnh2pH5TbA4OTLHsVF9NKXonmQwgBWRyZkO4WfUjuQ00Tm0naJEgwzSRW0F4KsZWwBt2oGST
d/juTPUDSEmhim84J8NwPCWX5CGD5Hu3pl6I4luMZ5GzeEPMnBI380DcpH5W3eoCYj2Yb8STrLAh
wk1wiJb+W1Z5ZYvgI4ieaccWbm/hXQBT3tpwtrlzXUdRwmmlGrEux05rqn9zBUxxlGLRwlSgPIwc
egOIKAYznE9jKKsJ0MGLYWTGOWm9tGbQz5FjHSyPZ7BzQYBVOjWCN8rpLLVwMwRTMB58cQWjqzqO
yNEsZSv3CJwh7yZa89zaijcTeqL7NQ8cO/UmZTOv4It6Gfu0rgXMHnvidcMpV4hPSreSMqcWKkxE
HEmCvlYUPwNCh22MAiUMPfUwsN7tB/HhfvkDLQ7is3y0hEByJiF4eL47nDGQNwJxSWnSsr9Fyvey
EWoumo7KRfw1f9zxgkCg51TZHDq2EKd2w1YhMvF/LLAHvEMmAtCfccTisY7ABva8vSMGrEcGYoKV
zMAy2MEio6KcYblHZ4QhhqngkHcD2lgelIZ+vQQixXi5eVFmiW6+/i+OvKwQGk5x5OVWB46sY8rO
84vdSjpWBubPiyq3bW2kR31/blsbbwl7e1Xbmpb25CZtay+rUu+kkwD1QH/AbqfDDoPMt0Wok9rb
0LTvIaL4TL0Mz2wFGNk7rh0LCxmIAEuM5gtyRohWoDOqq2ebWSgns9ipqkwaFW8ALSAwDbRZGhpo
AKznDGWO7tgpUMsQhyRuSPT5/zd7y8D6281eI9C3u4g+UF+NNbrQkTpZR+RZjAkwxgQAn6Ff6Bur
dDwGbwx8oxgoGm1mo2IAG3P1aceUjSfqz7A6cZh4SaMMW9RQK6YWokQUUHTMYmBIdousWa9FTUlK
3ABnLEGWJbkyZy1u0rJIDqjTfH2vD3lCYJGoTa3OO07n4ZbxxOJ2W9owIWTqCkBGvMNuwARRzwET
WJJ2Hh1OWtHKYJFsz51SrAKe8D9mw/Xgf7x3Yuf6yV05SWl+1JxTFZCVTus/YNGSh7WpotOyUGJg
Heh+KqWj+J+hALAyOwtVtdRagkuDTFlykDtnGYwQSa0wSb5Bz5rhuJShE7dtVg7p9lw2CFCXlslj
QXbw2VtxxRGsCEzDcvHkloycX2AVp6h+fqDeuWELbyEpgW8vljkAZBglJbhhJIpfdopy9XY1TKxo
tMzobMo9WsxNoy0mC/Y7YJoI9UsC2eYMVMqAatkwWZkdBNV3cGpGWdINg/IgcChixBcsCHF1Mwdl
xM4un0ULEZM7A3RA24czl68BPEOjgVdgngnOVGw4YxWDIY+Lj+zsHtgQQNnMjmLdzDGmcTK4BVOc
HyFhP6z48yzdq6LabwBCHPrjLjLJ4WElzEDqL/gAjbJEuCBAtMUeD7xbFrri0ykMghydGgvSYqvF
GFbQR44mIc9iJMyDFV1+mCvRVYNztqnN38wFc9ij01yjrRhifKWCQ9UY2G8wdxS9zYr0SW9leZLe
gCzZJVCxqqhuJVVdW7askiKrqZeKovVoZCvSDd6PRrbA7KATejul3hUlPqdlIwwjyEx3f2yAskqU
3M6FBsuWLY97Shv94DnUuFRlYgLdqbMGswJznMpRmDWkAMqVQkQIkzg+gwwf2nb6xg/CmirG7o3T
uXKSwAkF2VZqAqcRxdw6GCHIFy8Bu+I0cWTfvwXArPary0yfB+WS3QQAuF4sFWl+eoM13x9xl1Nd
Tqe9wQBMwTdEIFyYR8H7ZAaPAMOrCnNa2hcd3yfzC3Pcqjm3RsDO2aZ6UfxvFLeCLYAQ3p/TQrzo
XsSrTTconbtewmGoJUrZc1K280PK6fredBFnHJ4un8gPc9rj3uILST2n8+wmrZxDSjmd4lBlLTqK
IXHvsgfVn7x7GBViP/6HMIwMonh0bPv2uQdtGAmmoTOuuDOONxj5sos208YVwFFpkeT+VTLylCK/
dYPJ6U7uySfceZ16oJt1F+y58LfIGBFKWajuVTKbg/A7DF4vxWh9L9ZId8HrsqLZrGLfl0P41GXC
1Vi3TDBOOBDa2cUy26DExtEt4oTEGUAJOw3ECQarm5nB3BAcAEGphaeLQ1d8unbgtJTjoHcuTSdm
zrm0cUXYi8fghpmXvg8XTCB8qBikIQNOl7GWeSHCYuFg97ATUKLqAK+o0wC7g2yQsWEIq2cUE58v
LYeZvDSWQprFSndsHgtjIR4D6oq8mfW6Zoy0NUCftoKPPN1t+3DaCZoWhlRcrIRX7SxKP7AX5Cfz
rA5F1/ABT55x71pPovv35mHO083ddn179J3d4fc71VIEj3SLdGqKEXKmJwaQmk3tgRvhJBPzBQnS
fHjCHHMHO4r7Ba2ng/2CxGGmYMZ3T0wOk3BJ3b4gh41J9IaP85ykiESX0cWo9coaoI7ic8sHR1Pq
wAGAL6xShrxRv+L4A1iYvp3xOUKKkYBhmN5zyTJKi4JHc94nl4vIyYGGkKfE0TlJY2CpWQwzPAGb
TnsR43lv2DaYxIIYyDUnszKsOxWRfyh3KBp9TVbus+LUMnyj272LLHSl41lSBGncK4tWvRrBnH8c
J1JZIjb12uzdaIRVONwnAKctWZW+YR82MXvO/z0x9IaAqQP79PzKPrUV6O81BPST1DU97+yTLGH6
ny6CTM/lPG147rwlHfrNxvQedOj9yi80suJIRn3sFxpCIKR4apDRT4ecy3zQvLnZNl0WC7sxoSuK
31d0Cb2h35TgBBB2TRI2KCbPs3GjSWgGeU3pGp5zT6Syzbzjl/CErvCa0e8FqtLeIY3oJ04eryrm
CKdL5FBNCNMUV8FGCSuVIg+Dl3Y89w9u2qDvEbNxg+Ar/ANcOTpKW0eJZt3pKHHdiec6tT1+vBHK
/2zsghCQMshFg/4ODg873fBmEyP6BCEEFLoASeWuVnXoBuSaD2KSgpG2JsAVrYntC4zMnLqrNPrZ
11Glyc0gDwz4Ql9uN2Qhsr8jaOCF+T+K/yGx2yQI/AuCkc60MBpkuJ5iMfMbfedyHp/68JrKXxNJ
G7ecH4C6pVols5QL9Buqpt8mnoI5NkFwvJSKc1MGQ3xRMJXN+kZ2ZKQl/SxHlKeRCt2lWmrsRQXO
85g8NnPHurJFiFTlzBXAhQ28eLf+3LN5AISSd7NPP/8CIQwF6/if836wAFLg2jkwVBd8X443xyvK
N453mt8Ya/3kPFQ2QQaStxnoik3yWtgFcyGGLbN5NLYIG/LqMSYDKXkj8AILs+RBG8yL+PQvKfAf
pq/QDVSCmEn5rFvr8p58MwBiKOsHlzB9nzmmwyxKhYkIoLMrA6/XRABWdigAlBndfGjK1wUApij+
v6xS++sxykEd/+82gvT1wLzJdKDQtxCKuqWfMtb0gQJHzT/OXvzUm/Z7+o+z6fZ9oO4UaNc2D/rm
8u6G/KifYedhCgXdVaR+LXK11h6Z/+Y1JCiHqpkCfiRufk3o3ylf4YOuqbj31A0fKnb54GZlkdZH
hGG6lHEe2kVBZyObzRXsoJbZ7/8LpKFdywplbmRzdHJlYW0KZW5kb2JqCjIzIDAgb2JqCjM5ODAK
ZW5kb2JqCjIxIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyAy
NCAwIFIgL0NvbnRlbnRzIDIyIDAgUiAvTWVkaWFCb3gKWzAgMCA2MTIgNzkyXSA+PgplbmRvYmoK
MjQgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9UZXh0IF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA3
IDAgUiAvQ3MyIDEyIDAgUiA+PiAvRm9udAo8PCAvVFQyIDkgMCBSIC9UVDggMjcgMCBSIC9UVDcg
MjYgMCBSIC9UVDMgMTAgMCBSIC9UVDEgOCAwIFIgL1RUNSAxMyAwIFIgL1RUNgoyNSAwIFIgL1RU
OSAyOCAwIFIgPj4gPj4KZW5kb2JqCjMwIDAgb2JqCjw8IC9MZW5ndGggMzEgMCBSIC9GaWx0ZXIg
L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ab1cW2/sSBF+969o3ibSWe/4Pl4hJFgQF/HAciLxQNDq
JJNkAjn2OZNkd8OvRKx45bdQ7e7vq7bddiYBoTxMZsaurutX1dXl+Wy+MZ/NVv7qLDdNm5vjtfmT
6cyXXz9k5urBZMPfw9X0mpvhxnxbpXVdmKbYpdW2Mvl2m9ZNKa9pu2vbOplQ26ZNW+X1rjWx/2SV
z7Kc5SYzebY1TVmZq4/mF+dGmBs+Hl6S84/my/PzWq46vzGbX26buv3j1vzD/Hy/Nw+Hu5tH89ib
n364v+2Pd4+Hjz87M+d/Nb86F5attLXw2tR1bZrclE2Z7sq6MXWVzZgdlhwxJXc02zbGk3E8WXWd
3yR/Npubp+7qTMTMzebRv975174z+Ojaf/TRv3669/988K+PZ8lAAxea78/MF8Mn/ROu3ZvLHgQP
YkB/6+cnLOg/SjYG3/2A649YyIDbvtvjPlyE932Hq+89WwY89Le4CHQMru32Bt91uJwfOIaEM3wD
Dh8gJ/8h8yDMb0DN0Ug2z9TvAdeqyg9YwZyZv5jz3znHUMcTG9et97tk5HcjGxuxMRn4BJoQHhz9
G1JcQWFULu2Ee+baNlzgAII37qpE105fFiMInywr0yKTUN16afLERZFoA0EisZ/b2N+aqfPXOwGF
ISCHaAJI2NC0FydjLUpYRaJ3psVfQ0eQ8btrr6zAaLAjlDRy+WUN1E3iWNim2+1WJL0KdNE0aV2V
BVVReUAZIOTb+2ura+hkKpknq/6Rla1AYU1iDgmsl4SB8EZOsyZP2za36OdwZszq8e72EPIqJnUg
an05YoW8ylOBbntVCFsjZhUzPh3772CaPRx9/45BTZNEoYkuDCQDKQQ8Xs0laJtPPe/iP7jtEkHO
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
uvlts5nzy3xTXW7tZOvkcCz4jRroHLrzLOvxGXPq5Ao8vaTSQg2syhxtfe4fduq7IKkuBHNE9dlO
3Df86Qt/UihFe5CGsMh8ZjL8OSQyMG3Acd3otsT+ZkbRKJjNGjsLE3KkGmxBsixt7ITkzDYedgSB
VmY1SDHGZ1HITzg0pRoeE2R8aDnWgAo7WySvDJeC/jIdqL88EjmoFfdss6atW/O9+62wr997+77/
mqOIX2T2N7bkwV8BqIQ+WsvDwHUmvzrx0dDQ/OzevPc/05U3MvhdFHaIt6hbOcep5Z+ikMdc/xe/
LiamjXTepJHnYx4/LvaHD7fXQQJT5M3jFES2nR80tODduuOUzU80B75MQnas2nlxjEgWlf3TK4hI
Ty58wFj5iBwcyunggjK8x0IZRYyBotjK3TNI0p4o7q717m/+A/5ile0KZW5kc3RyZWFtCmVuZG9i
agozMSAwIG9iago0NjM1CmVuZG9iagoyOSAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDMg
MCBSIC9SZXNvdXJjZXMgMzIgMCBSIC9Db250ZW50cyAzMCAwIFIgL01lZGlhQm94ClswIDAgNjEy
IDc5Ml0gL0Fubm90cyAzMyAwIFIgPj4KZW5kb2JqCjMyIDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BE
RiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNyAwIFIgL0NzMiAxMiAwIFIgPj4gL0ZvbnQK
PDwgL1RUMiA5IDAgUiAvVFQxIDggMCBSIC9UVDYgMjUgMCBSIC9UVDkgMjggMCBSIC9UVDggMjcg
MCBSIC9UVDUgMTMgMCBSID4+Cj4+CmVuZG9iagozMyAwIG9iagpbIDM0IDAgUiBdCmVuZG9iagoz
NiAwIG9iago8PCAvTGVuZ3RoIDM3IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
eAHtW0tz28gRvuNXdC5bYJUMY/AkvF5X5bGpOJd4EyV7sF0uSSQlxRIgg9TazK/MIbnmt6QHM18P
HgOK3N0kl5QOpICZnn58/Zie4Sf6jj5RzH+FSqisEmrX9D3V9PzXW0VXW1Ld3/ZqPGbTTUziPCqK
lMp0GeVxTkkcR0WZ8WdULauqCEbU4qis8qRYVuT7xqt84uU0N4oSFVOZ5XR1T786J2aue9x9BOf3
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
ySO8OHnkst7RAuWICj6BpvB+t+BWblelTKwqlBw7cilvjp3uXmevm51k5UkQHnnbt1/WV4+726Z+
09zdXu353NTvhDPg9mQfuXM5J8FEDXyzc1IBCrinCh3Z/ygnlCV6mj7ZCfl4YJ5PP5JH6v3qK75G
YvQ8B1FZxOYqnWYqPiLuOhLY/49TTxCOU8+WixKTI+QLAv7BrGQ7zj8pK9kMFoS6N2CYQBaSXHO/
Re6SgkrynO7/DjJeEErqE2nkCehI3tSdOjO9lUHyko81zTspxLY6M86kOd1SMyZ3uJGrwaj0xxFw
4qFyO8IXMCxuRruGMcYPBm9/d4CbACh+JPE8FbzHrKvKxjqu9/Ut0e4KhLimH/L/qeAtvPQu3pwc
vNVyWJsMBZrGmvng7Sg5aJwcvFV5Wv0xCt4jlLyaiSm8ygTFT5ZK4yit5NjbB4Wp5ka82SjdncvO
1kpujZ5Ocdv82HSiuP93apgeM3vQ3fyp0C3reH/K3SY6ltt4Ph3/l91NeHHynO5u/NOLeVtMQXPA
3YSSY+d0d1M/yd1GyfzEWknxxYpJLsHPLI4GN/+25hSFjoFtTpie8EJZo6fqU72wOt0JR+p9ulaS
Nf5fKhEqpP9ZqeSMIdWGq5S4btVnEU9VSuWhnZULf5rUj9rl+gulUppEwvlTgZvrJH0Fli9L8cFm
qn8bkBYVNy0L/pKmfCn05/hVIGdt/gHaOGRw0LS1In4U+Obies21/bQRzqeYPgop98GXpv2mNVmZ
Nlb4i1NI8O8K3c1Xw0gQmhPNo/ngzmjB5+QIfY4PT4JN48InissgUEbmk4IvIfLsSTU8nV242d/9
Gxp3rqwKZW5kc3RyZWFtCmVuZG9iagozNyAwIG9iagozNTM5CmVuZG9iagozNSAwIG9iago8PCAv
VHlwZSAvUGFnZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJjZXMgMzggMCBSIC9Db250ZW50cyAzNiAw
IFIgL01lZGlhQm94ClswIDAgNjEyIDc5Ml0gPj4KZW5kb2JqCjM4IDAgb2JqCjw8IC9Qcm9jU2V0
IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNyAwIFIgL0NzMiAxMiAwIFIgPj4g
L0ZvbnQKPDwgL1RUMiA5IDAgUiAvVFQ4IDI3IDAgUiAvVFQ3IDI2IDAgUiAvVFQxMCAzOSAwIFIg
L1RUMyAxMCAwIFIgL1RUMSA4IDAgUgovVFQ1IDEzIDAgUiAvVFQ2IDI1IDAgUiAvVFQ5IDI4IDAg
UiA+PiA+PgplbmRvYmoKNDEgMCBvYmoKPDwgL0xlbmd0aCA0MiAwIFIgL0ZpbHRlciAvRmxhdGVE
ZWNvZGUgPj4Kc3RyZWFtCngB7Vxbb9zGFX7nr5i8BFRqM+QMr64TIE0dwAWKJqnaPliGoUgre1tp
Je+uk/hf5qF97W/pN5dzDi9DatcXBGgLP2hNDs+c+20O+Vp9p16rHP/qQqum02q7Un9TG/X517tC
XexU4f7tLsZrrtyDOq+yujaqMW1W5ZXSeZ7VTYm/Wdd2XZ2MoOVZ01W6bjsV+4VdXmM7i02hdJGr
pqzUxY363akCcu6y+5Oc3qjPT09rrDq9Uunv86buvs/VL+qry0u1e7W+2qv9rXp8fv3ydrvev7r5
8kSd/l09OQXKltq6U41WJdCsqzyrpjiWVZ53xuLYtYXRusYvLDe5KRRwxMNN3ipTdaBZNxY3kHll
r9cdkDI6y3VR4boF7a+3Jf6b5XnR2euy3oDUts5ywB5cL1pV1BZObR/E+sTDyWuluy4ru8HyqitV
qausKswAfNXq6LZVkyujyyyvHPqMZlWNt/XoV2WtysrCd3Qw+pUZ7+vRrHR837JrstZA+mWNjXRW
1EVhGFrZQpmaplGmbrOuACfDCsavbAxwqIFMCT0zltkTIHXhl2hjssZAJ3vsLss667SB8Osqyzts
VZRZ1RnjFNVxuIT0DFgMfuZZUUCmtETwLBpArisHRddGoLgliVWu3GQFQHlCwx4MwLTAsexat4ep
IGKNCxYNWVIDU3unrJusagCJ0GBmmAqY1lDJoiyyOrf8mmxkgGndNU54hbFK1V9iMTVFDShYUoCV
LfYBKiWjoTu7h70bUVLd5uEm5AVDsCrJ2MHI/c2Iuuoq7BnTWV2WAarYi0C10rH49LRXkIXEPLKC
j9zMAz49PWawRbeAEHR+ghCDLUBK0zg5CXMFbgn1bI0odJ/71l8UGtJtocei0JMlkAs8qcGSDspb
dCxD3qZrszLXcAklNKGt4CMGYnaeM7eeS7wr9m7gYL1zzeGY8iI5vVC45Nws3EOVwfnmyrtaWJFz
tfu3d6vN+c1K7faXjx6t96vt+f52+2K/PV/vd4+/ud3+dL69VOHv03BbnSTkfgcI1LCAPgJqgIDF
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
dXJjZXMgNDMgMCBSIC9Db250ZW50cyA0MSAwIFIgL01lZGlhQm94ClswIDAgNjEyIDc5Ml0gPj4K
ZW5kb2JqCjQzIDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8
IC9DczEgNyAwIFIgL0NzMiAxMiAwIFIgPj4gL0ZvbnQKPDwgL1RUMTAgMzkgMCBSIC9UVDIgOSAw
IFIgL1RUNSAxMyAwIFIgL1RUNiAyNSAwIFIgL1RUOSAyOCAwIFIgL1RUOCAyNyAwIFIKL1RUMTEg
NDQgMCBSIC9UVDEgOCAwIFIgPj4gPj4KZW5kb2JqCjQ2IDAgb2JqCjw8IC9MZW5ndGggNDcgMCBS
IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AbVayZLbyBG94yvKN7TdDQEorIoZR4w0
si0fPB6Z4YnwyKFokb1wRiRbYLek/su5+Opv8aslX4FYyPYWCgXRQFVW5su1suqj+l59VCn+VVmu
6jZX3ZX6QW3Vs5f7TC33KrP/9svhmGs7MU/LpKq0qnWTlGmp8jRNqrrAb9I2bVtFA2ppUrdlXjWt
mnrCKh+xnOEmU3mWqroo1XKjXiwUmLOv7U+02Khni0WFUYtrFX+b1lX7JlW/qG9WK7W/XV/fq/ud
+uryw82uW9/fbn57phY/qVcLsGykreqkVHWuirpWVZkmZZHqMaNFmaatNoy2TabzvMJTURc61ZkC
o5hfQ/girSpVlG2StlWtsiIpW62t2NdmSNWmCWZrDMmTNk0LDjE4uyF1meQyBErQKgOm4XMFRLO2
VUXVcLLh1k0uqiTNwYIGL1lRlRwSCORFUmidY0iT5GkDYB2TdkRkmEzbpNFtowqNT3UNlXs5SKRs
waQhXzeJhoiBlTCk1klVApy8LJKsaWEMfiFyWwKEtDQLQcQctsMhgYoGylVVqAIC1TXQECpktwS7
QN1AWSW11rC2LCkcBWMjqVFPsCOjKJiSNyM3AH/jnzcj/GHt6EcV52fqIk1yFaszaBu/r67PVFYn
tYrxYN9cyZDlvX+zf34WyaS/q8UfnaHNMADyaZrmarFUjgnzUxRJ3tSZsfzFJoJlA15r2a+vwYiY
7gzFQAboVkC1tmSMg5SRI7P9d4g0IAJrIhHHSwR0BJS1QLCXN3fyZicPew4SmPji09VZdIjypcwC
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
kGg25RchsNNogrS+Uoa0F+ovjuEovpO1RRT4suUFqrO/wr4SH7yVL9ufwaXDCB9dpNwBI1zVqFT8
wxkuMhmwZLgQEjqycKde+aUS9aLbfRYFbNU1Tj9uhZ+wlnC62/h58isUt7LEXmgpYWK7UjcPQnLF
t0JSKCg6bSeDRUL5e3sTEOG0O6FIWDuxmb6rHx6oTmmtyHDSmzehN3KqEsRFqVG8OKp6nBEL2yK9
iHbplSkaC4KKeIeqd4ayUy/lM3WFSybWiB7DNx6xyOrdE/UcxUf0LHYoHBg9ywJbeeh2D54z9PVE
6N1KPodXNCBq//2D2JSAtMMBvnvGIZEQE8QeVjIMZiI8wTXmopS0NoEW7xJMeLDUevZ23btufXML
riY3BjglGZkD3DHP8l5TKQQELwlyrnepO5HEgXMEe5FujI/VK3yYvuSGouJenavtbnvxXkAiWqa2
sAYjgI6pynqOQShSiMhQIWEOEi0t+bDraJd9Zzzsxk0Bpws0KsvQjDvpi7nUoaGYnfZFCZYLz+pM
bDVyRLGJrYP8c6glFZsth5V5S6vu1N/8O/m29k4puBAVQe7TmaqKpMWFqvGKdN/bh059J/H1H99K
JqCyH4UaIiB2bqWh9qJ7FMXKV/V7mflBUojZx1shejP/IKOQH7yvizjdSvGr2MJ2KzGMrnyu/iQz
ZZTwshMY1Qs+CvUQMOa9F5tS12E6rm5HEtFipd4I+cfAu7wSFxQUyJxJh6KzW/fVVmMOK+VfKRYc
d9cPnEtRhbr8yirAyYVqWoPabYfLoRHxpAyHww5zmyxHdaxRdEP9GndwzUVc8zfufsnNZHNftH/P
eeI+MriS28oHN0pztJIKae1NAS8Xk/98eXMFO178NNwVzlDA3demd2Wxnegv8p7WHAlcewxnI8KI
2k2fsTgio3ANV69wD09q1Sk+wJqJKxluFeP+8yQYfr8jPFRT+UJr3H6dnO378G52FPdmf/8vI/Gt
aQplbmRzdHJlYW0KZW5kb2JqCjQ3IDAgb2JqCjMxNjEKZW5kb2JqCjQ1IDAgb2JqCjw8IC9UeXBl
IC9QYWdlIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyA0OCAwIFIgL0NvbnRlbnRzIDQ2IDAgUiAv
TWVkaWFCb3gKWzAgMCA2MTIgNzkyXSA+PgplbmRvYmoKNDggMCBvYmoKPDwgL1Byb2NTZXQgWyAv
UERGIC9UZXh0IF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA3IDAgUiA+PiAvRm9udCA8PCAvVFQyIDkg
MCBSCi9UVDEwIDM5IDAgUiAvVFQ2IDI1IDAgUiAvVFQ5IDI4IDAgUiAvVFQ3IDI2IDAgUiAvVFQz
IDEwIDAgUiAvVFQ1IDEzIDAgUiAvVFQxCjggMCBSIC9UVDggMjcgMCBSIC9UVDExIDQ0IDAgUiA+
PiA+PgplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94IFswIDAgNjEyIDc5
Ml0gL0NvdW50IDYgL0tpZHMgWyAyIDAgUiAyMSAwIFIgMjkgMCBSCjM1IDAgUiA0MCAwIFIgNDUg
MCBSIF0gPj4KZW5kb2JqCjQ5IDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAzIDAgUiA+
PgplbmRvYmoKMzQgMCBvYmoKPDwgL0EgNTAgMCBSIC9Cb3JkZXIgWyAwIDAgMCBdIC9UeXBlIC9B
bm5vdCAvU3VidHlwZSAvTGluayAvUmVjdCBbMTQ4LjY1NjIgODcuODEyNSAyNjAuOTM3NSAxMDEu
ODQzOF0KPj4KZW5kb2JqCjUwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24gL1MgL1VSSSAvVVJJIDUx
IDAgUiA+PgplbmRvYmoKNTEgMCBvYmoKKGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5yYS9zaGlmdF9w
cm9wb3NhbCkKZW5kb2JqCjE2IDAgb2JqCjw8IC9BIDUyIDAgUiAvQm9yZGVyIFsgMCAwIDAgXSAv
VHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzE0OS4zMTI1IDEyOS40MDYyIDMzOC45
Njg4IDE0My40MDYyXQo+PgplbmRvYmoKNTIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbiAvUyAvVVJJ
IC9VUkkgNTEgMCBSID4+CmVuZG9iagoxNSAwIG9iago8PCAvQSA1MyAwIFIgL0JvcmRlciBbIDAg
MCAwIF0gL1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9SZWN0IFszMTIuMTU2MiA0ODEuNTYy
NSA0MDUuNDY4OCA0OTUuNTYyNV0KPj4KZW5kb2JqCjUzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24g
L1MgL1VSSSAvVVJJIDU0IDAgUiA+PgplbmRvYmoKNTQgMCBvYmoKKGh0dHBzOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL1RpbWVfc2VyaWVzKQplbmRvYmoKMzkgMCBvYmoKPDwgL1R5cGUgL0ZvbnQg
L1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvWVVGWFpSK0hlbHZldGljYS1PYmxpcXVlIC9G
b250RGVzY3JpcHRvcgo1NSAwIFIgL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nIC9GaXJzdENo
YXIgMzIgL0xhc3RDaGFyIDEyMSAvV2lkdGhzIFsgMjc4CjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAy
NzggMCAyNzggMjc4IDAgNTU2IDU1NiA1NTYgMCAwIDAgMCAwIDAgMjc4IDAgNTg0IDAKNTg0IDAg
MCAwIDAgNzIyIDAgNjY3IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDcyMiAwIDAgMCAwIDAgMCAw
IDAgMjc4IDAgMjc4CjAgMCAwIDU1NiAwIDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAwIDUw
MCAyMjIgODMzIDU1NiA1NTYgNTU2IDU1NiAzMzMKNTAwIDI3OCA1NTYgNTAwIDAgNTAwIDUwMCBd
ID4+CmVuZG9iago1NSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9Z
VUZYWlIrSGVsdmV0aWNhLU9ibGlxdWUgL0ZsYWdzIDk2IC9Gb250QkJveApbLTkzMyAtNDgxIDE1
NzEgMTEzOF0gL0l0YWxpY0FuZ2xlIC02IC9Bc2NlbnQgNzcwIC9EZXNjZW50IC0yMzAgL0NhcEhl
aWdodAo3MTcgL1N0ZW1WIDk4IC9YSGVpZ2h0IDUyMyAvU3RlbUggODUgL0F2Z1dpZHRoIC00NDEg
L01heFdpZHRoIDE1MDAgL0ZvbnRGaWxlMgo1NiAwIFIgPj4KZW5kb2JqCjU2IDAgb2JqCjw8IC9M
ZW5ndGggNTcgMCBSIC9MZW5ndGgxIDEzOTY0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVh
bQp4Ab1bCXiTVbr+zr8kaZouaWnTJW2SphtdKG2lLYsQSlvKIkvZ2graAi1lKVSEAg4wHYVBKqKA
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
0ilEAt1vBf3W1P3U/vM1tWfPqRjwz9bU4czA19RY9jL2+WE24bpzMJNvvuJ86VP2pZTl3MLWyb23
ev/AdjqXC/x9KMOcPkF6A3ZG/RNN3LYU8vi+/pnGs3HiCXj1yc+oPJoIgeBC4E9C4E9C4E9C4E9C
oIkQaCIEmgiBJkKgiRBoIgSaCPFqIgSaCFE0EYVVlUcTuSrMuQIm3eQU5f0Tf4WZL+aGS1L3qKsH
Fn19+EByqtGaMTg0Jy9CPS/yucu1UtYi5w7nFy87a9tUml8FqSxRmicSpSk9cJp4W+3C/xhx1eBH
u3/vLxmJImzg75ndb5njcEpgwe4hFceuo/FGsYhK0KRSmoDfwvMfAE/B/8DgP1Euw8+OZ+LHwLPR
2HIs7++muUoFDCUxJcTPyKhiVkl5ZVl6ac2yxppVixdUZ06dv2zxffifOLxvvH/PInAMOAPwHRv/
PzBfAD24SQcYgQxgFDAZmAssA9YD24ADwDHgDHAZuAF8AfSAAB1gBDKAUcBkYC6wDFgPbAMOAMeA
M8Bl4AbwhcvzBzuoL8ywYhkYz/CLD/GLK8PF5/lsv/wcv3iuX3yEX3yUX3y0X1x5pexTX7Fffplf
/G6/OP7X0ID2VvvFF/jFF/rFFZ351F/rl8/fMvjyWecXX+wXX+oXX+YXV/5flk99fDftW/4Kv7hy
JOZz/31++Sv94vf7xVf5xVf7xRv94mv94ut4/P8AAihdggplbmRzdHJlYW0KZW5kb2JqCjU3IDAg
b2JqCjc4OTgKZW5kb2JqCjEwIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlw
ZSAvQmFzZUZvbnQgL0tXVkxQWCtIZWx2ZXRpY2EtQm9sZCAvRm9udERlc2NyaXB0b3IKNTggMCBS
IC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMTgg
L1dpZHRocyBbIDI3OAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDI3OCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA3MjIgMCAwCjcyMiAwIDAgMCAwIDI3OCAwIDAgMCA4MzMg
MCA3NzggNjY3IDAgNzIyIDY2NyAwIDAgNjY3IDAgMCAwIDAgMCAwIDAgMCAwIDAKNTU2IDYxMSA1
NTYgNjExIDU1NiAzMzMgNjExIDYxMSAyNzggMjc4IDAgMjc4IDg4OSA2MTEgNjExIDYxMSAwIDM4
OSA1NTYgMzMzCjYxMSA1NTYgXSA+PgplbmRvYmoKNTggMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNj
cmlwdG9yIC9Gb250TmFtZSAvS1dWTFBYK0hlbHZldGljYS1Cb2xkIC9GbGFncyAzMiAvRm9udEJC
b3gKWy0xMDE4IC00ODEgMTQzNiAxMTU5XSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDc3MCAvRGVz
Y2VudCAtMjMwIC9DYXBIZWlnaHQKNzIwIC9TdGVtViAxNDkgL1hIZWlnaHQgNTMyIC9TdGVtSCAx
MjQgL0F2Z1dpZHRoIDYyMSAvTWF4V2lkdGggMTUwMCAvRm9udEZpbGUyCjU5IDAgUiA+PgplbmRv
YmoKNTkgMCBvYmoKPDwgL0xlbmd0aCA2MCAwIFIgL0xlbmd0aDEgMTIyNjAgL0ZpbHRlciAvRmxh
dGVEZWNvZGUgPj4Kc3RyZWFtCngBxXoLeFNltuj69zOPNk3SvNs0SZM0faTvNy1tWtpSKIVSXi22
0gJlCgKCVhAQpwIKFB11RgGRM44Djg7qGIqDQY4cDocZn5xPRQ8OouiIT+ww41QRITt3/TuhQq/X
y/ddv7nZWfmf+//XXu/1Z/fddEsPxEM/sNAyu3vZApA/2V0AzIZ5S7qXRduG17D887wVfc5om/cD
sJsWLPvZkmhb8SyAetvPFq+K3W98B8B0qbene350HC5hWdKLHdE2KcLS07uk79Zo2zAJy/7FN86L
jRsfwHbtku5bY/vDKWw7l3Yv6YnOzy7DMn3ZjTf3Rdv+t7Ccv+ymnth80ob4HQeCvU5YDUpYDApg
QIsXYih+pt4GHI7ScYT/rFfvmJNQ+TXoFPJyv/Xl9NPK8fUvLjp/6pJPfbuyAecp5fl0AO8RMqQM
gDiC4++qbx8ZoaP04wxBR1YIWhEaEaoQihAys/YqAs+T+8DQORxQEgcHasc71r8dIjnIg0/k3yDJ
CcTFg3Le+krHvPXrGzNqlKQJSjkCDlIPHrmsG/Q86QiRqkGPG4ux0YIZLLVjCwLKUo8jXDrXcak0
pCCBJMe3nl85ziN846l2fO3Jd7yB814vHe84VoPjg45XM0MMFq94QhwJJDhe8tzh+GNphuPZ0grH
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
2aj2TaPaN49q941q3zKqvYK2/xfpcePkCmVuZHN0cmVhbQplbmRvYmoKNjAgMCBvYmoKNzgxNApl
bmRvYmoKMjUgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9u
dCAvSllHRE5PK0hlbHZldGljYU5ldWUgL0ZvbnREZXNjcmlwdG9yCjYxIDAgUiAvRW5jb2Rpbmcg
L01hY1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMjA4IC9XaWR0aHMgWyAy
NzgKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDAgNTU2IDU1NiA1NTYgNTU2IDU1
NiA1NTYgMCA1NTYgMCAwIDYwMAowIDYwMCAwIDAgNjQ4IDAgMCA3MDQgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDY0OCAwIDY4NSAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgNTM3IDAgMCA1OTMg
NTM3IDI5NiA1NzQgNTU2IDIyMiAwIDAgMjIyIDg1MyAwIDU3NCAwIDAgMzMzIDUwMCAzMTUKMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCA1MDAgXSA+PgplbmRvYmoKNjEgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9y
IC9Gb250TmFtZSAvSllHRE5PK0hlbHZldGljYU5ldWUgL0ZsYWdzIDMyIC9Gb250QkJveApbLTk1
MSAtNDgxIDE5ODcgMTA3N10gL0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA5NTIgL0Rlc2NlbnQgLTIx
MyAvQ2FwSGVpZ2h0CjcxNCAvU3RlbVYgOTUgL0xlYWRpbmcgMjggL1hIZWlnaHQgNTE3IC9TdGVt
SCA4MCAvQXZnV2lkdGggNDQ3IC9NYXhXaWR0aCAyMjI1Ci9Gb250RmlsZTIgNjIgMCBSID4+CmVu
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
yjNjZFPYoQPUg8fppi3SeEjnBz68RrzUXI+tgEkmMU9UWsax2clF7Yo+XUXtn4qlutuqC1NxtdtR
7RmcUgvVsGfP0JkxQRCv/4bPdg5qvd641tN4ls9OLHTFtRC43+kbTXqz2lBfbRdhZtYeYWDmQ/z+
Ccm/wfpBfRDID8H84D+5/NKPUXuxNp1mbedEbeds1XZOOKYT2DlR2zlR2zlR2zlR2zlR2zlRRjhR
RjhR2zlR2zlR2znNSrwTr5FnU7xWmnlHIb9qwdhaxbfspTuEL/ZkxrHBxUa3eT0gTR+arKxOS9L0
amXy0LTEhdzicDg8vJjLLebD4fxibvTYYn//4rHR0eOLmrZ43PC5STjebsGH5aiSz5lbAfKGdqDX
nmvG47amzdtIMm/B2OfpaVQd+mTVn1kozB+IG1Z7c3h3MXpAmJjCT+ycxbE//jlsM8aeoVKcxt5E
DWdmMwkK58FLhqflc6i1XkfDW1TymKfTeUCTB6J5IJoHonkgmgeieSCaB6J5IJoHonkgmgeieWMv
4GrmEg3XAMgFXSYojhZRcxLSRUycopoZPBVrNhBDR7NwQ8a/6UgIBXRrT0v1dDO+bh1wn6P6ac+A
undKjeUmpd6JobhfUn2B/kS3ULUkRndmEvMlZXiptjQcSmX84bwa+tbQtv6uznQllxqW/SipfLFu
f0+nrc0v9+SmUp1epawOl+PeQEIOxT02Z1AFbPjViMeEbyB/ohr4YHSiHEr2suNKOSkIVch2FLG2
8mlnM7WRl9HvUaS7cVqDjiI6Bmjt6sghgYIXjjbOdaPEhKVfqNZqHbGcPKP6ezrEuwXxa19baryY
zITalizOrk4+Q0eCEIqxd/g1XoELuYz9JRl7KO8NyDo1Ly/TWjU+N/6MzmM+4oO/acDbPuR7Ok4M
wfhhlNRxnDUlsbYLOPCdQ+W8AEfYib8h2MX2smV2G6si1+5nzxvjcfwORpIwWBp/arCzvmNuz96B
hbXT962dO3X86J41/JUI+x++nXz5CmVuZHN0cmVhbQplbmRvYmoKNjMgMCBvYmoKNTI0NQplbmRv
YmoKMjggMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAv
TlRGV0ZKK0hlbHZldGljYU5ldWUgL0ZvbnREZXNjcmlwdG9yCjY0IDAgUiAvVG9Vbmljb2RlIDY1
IDAgUiAvRmlyc3RDaGFyIDMzIC9MYXN0Q2hhciAzMyAvV2lkdGhzIFsgMCBdID4+CmVuZG9iago2
NSAwIG9iago8PCAvTGVuZ3RoIDY2IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
eAFdkMFuwyAMhu88hY/doSLpGSFNnSrlsHZa1gcg4ERICyCHHPL2MyztpCH5wP/7Mz+W5+6tCz6D
/KBoe8ww+uAIl7iSRRhw8kG0J3De5v1WNTubJCTD/bZknLswRlBKAMhPRpZMGxxeXRzwpWg3ckg+
THC4n/uq9GtK3zhjyNAIrcHhyOPeTbqaGUFW9Ng59n3ejkz9dXxtCYETMdH+RrLR4ZKMRTJhQqGa
RqvLRQsM7p+1A8O4d55arUo1fGr/wylo+eIzkl2JOE3dQw1aAviAz1WlmMqDtX4AbZpwEAplbmRz
dHJlYW0KZW5kb2JqCjY2IDAgb2JqCjIyMwplbmRvYmoKNjQgMCBvYmoKPDwgL1R5cGUgL0ZvbnRE
ZXNjcmlwdG9yIC9Gb250TmFtZSAvTlRGV0ZKK0hlbHZldGljYU5ldWUgL0ZsYWdzIDQgL0ZvbnRC
Qm94ClstOTUxIC00ODEgMTk4NyAxMDc3XSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDk1MiAvRGVz
Y2VudCAtMjEzIC9DYXBIZWlnaHQKNzE0IC9TdGVtViA5NSAvTGVhZGluZyAyOCAvWEhlaWdodCA1
MTcgL1N0ZW1IIDgwIC9BdmdXaWR0aCA0NDcgL01heFdpZHRoIDIyMjUKL0ZvbnRGaWxlMiA2NyAw
IFIgPj4KZW5kb2JqCjY3IDAgb2JqCjw8IC9MZW5ndGggNjggMCBSIC9MZW5ndGgxIDE3ODAgL0Zp
bHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBrVXPT9NwFH/fthsMUJhMRYraZmIIm5mKPyIx
ZonbghDIFBJbD8oyKpthsuA0eDDZhUsPxosmGI8ePNaLKV5Y4kFjMDHh6h/g0QPe+OHn2zYNQySL
4bv0+97nvfd9/fST9q0y99igNqqSSMl8KVcmZwV+wXTnn1QUF7N3sF33y9MlD9eIpL7pmaf3XRyM
wL4oGLkpF9M67KUCAi5mF2BPFUqVeRcHfsI2z8zmvXywDThYys1796cfwMrDXMlw64MrsH3l2UcV
D7918Jzh1TMNeLRch8VVYogK9IpCVCAJHl8neEjqw/MyJ4+atPwhf6/96m8WFjkv+nB9khtaHV1Y
XL+xebLpk3QRMOR1IH5OtLdi1NP8Hvlq0yenk3PG2wSbIjH2EScEOhJjy7jdNbpMMTpJnSjpidEy
MsP1oY8gKZEcs4kp6WfFrpRNLQA4RQSBIzRCd+CGtwapVQhQm/CVwkjHR2wKZbX3jD3Xbba1YKfo
+BLYivfunkGruKKkiymLTQIIcQT6VXhiXMlYYm/mlhbVFVMxb0yZSkYp5KYsqdexSBimnlAsGteK
2Cc01Urqsu8auj6IPhLvgyMoN3V0eOB1gHVCiQ0UBeIjiiWezmo3Nauakq1kSpdVVUlbtaxm1VKy
quuoCvpMwZg/vsu5CZyD/cg3u13G0QMtdNPkPYGE06pVM03ZxJM4kahqM/ICeFJeI/ambZbMajyV
jKoyD0TVqAoeegq9Q/GRcS0NJipn0vKXpJTaJmmrTxS1baDX6kh6YJ8kPdiIpO0NSdrhM62TNAzO
HVzSQ7tLGt1DUF/h5C4KV12Fq7so3FmncGRvhQ/7vEHyCNgedhQ+uk8KdzWi8LGGFO72mdYpLINz
N1e4x1c4KVvkv7RQuLrjlaV/vsP/K/nxbZKzNRrA7ODLnXuEqR/ERaT6EaIh/PiAHCDGVoQvGFtN
ZPBZhs8vgVmDq7kD3+N3XIklFIpriHYsYW5xL/SDMGDSGuZCQubBlmu6FwjwQIAkHpBwAHfBgQA8
zMi1s+eYGlY7w2qYLW5+YwMDm9PC642XwuLGFeEzKpy19YbOu96Onef5rOf7Ic8L8pE5NpG5nRmO
DRkzT4xKMZ8bM/BvR38AGzWprQplbmRzdHJlYW0KZW5kb2JqCjY4IDAgb2JqCjg0NgplbmRvYmoK
OSAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9CWVRP
TUsrVGltZXNOZXdSb21hblBTTVQgL0ZvbnREZXNjcmlwdG9yCjY5IDAgUiAvRW5jb2RpbmcgL01h
Y1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMzIgL1dpZHRocyBbIDI1MApd
ID4+CmVuZG9iago2OSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9C
WVRPTUsrVGltZXNOZXdSb21hblBTTVQgL0ZsYWdzIDMyIC9Gb250QkJveApbLTU2OCAtMzA3IDIw
MDAgMTAwNl0gL0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA4OTEgL0Rlc2NlbnQgLTIxNiAvQ2FwSGVp
Z2h0CjY2MiAvU3RlbVYgOTQgL0xlYWRpbmcgNDIgL1hIZWlnaHQgNDQ3IC9TdGVtSCAzNiAvQXZn
V2lkdGggNDAxIC9NYXhXaWR0aCAyMDAwCi9Gb250RmlsZTIgNzAgMCBSID4+CmVuZG9iago3MCAw
IG9iago8PCAvTGVuZ3RoIDcxIDAgUiAvTGVuZ3RoMSA3OTc2IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
ID4+CnN0cmVhbQp4AaVZC3xUxbn/Zuac3c1jk+UdCOTs5mQhkI0JAQXClmweGx7LI0CAXUrNLiG8
BBNMQLFgsIpiQEGlKK0CanlUsJxshG7ASrS1vWotWB9VrxWsWh+tLfV12wo59z9nV5T++rv3d393
J9/3zfeYmW++mfOdmZO269Y2USZtIkGBxtWxFrJ+eeNBhjSua3Mnedc+IvsbS1uWrU7yORuI1M5l
q9YvTfJ5i0DXLW+KLUnydAH0quUQJHk2FrRg+eq2G5J8XimoY1VzY0qfVw/etjp2Q2p8ehO8+9rY
6qaUvezP19Lc2pbiXwYtbLmuKWXPwkTZwct58RIxWHH6hPz0INlRc1EJzYfnf1D+RCp4qVf59vP9
Wxc2ZPs/dwx2WN0//M6wp2Xl5/YbtnzZdnGbixxZYNMse6lAO7unN0gLXPRl2z/PuiyJVFz68W6q
F3/uEqO0isoB4l2Kig9pr3iPzgIUckHiQq0C0IK6CVDNHvF2VzBYFkiAFl1h0XjhyLJuqYgPGVr2
M/E2P0IjSIPgbHxgrqV5K15VlapcNT5Z6RpVXHa2Ml28RX8FcPGWOEuFyVZdhVeUna90QsDETZTN
GGm0T/yeDACngHijq2B42d5T4tfQPyeepSVWs2fjzj5l6PBX4qfUlzRxXBxLaY51ZfUpo8pWcSdi
0gN8BnAOcB6gULM4SO2A7YCjAIWygTVACWCWlIjD4jD83I/22cAlgGbAdoCCED4K+TUSi0NiJeWj
7TaxkwaAbhX3WvRHoEPAPwx5HuhD4CXdm+J/CCr1P0jJd4MfCP7+FL0P8lzwu8BL+v0Uv06stdq1
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
3LRYd7v0jm4RFuGOliAyVnL5E+aJrblG7bYIprKclWOTc6rq1NmW2Z0BtmXuwnA3Pn65t9SH45zx
6mhVRMaLV9eHU/5akYfHciWw5LYJbKj8RIYfjpIWzcRpNBM19yUJ4f4yERLOhuKkMVT+uwNn4Bmd
nJ3kT8Lazk/FSVUS/MnHBaXbZeUYo8EOm3oKek6CjaQ0dg27mnKKXF/4L/pnuj7zz7jopwrUXReA
Rpd6+nj6eIHYUIUuuEXPhYBKX+LE0iPHBeBnevD2/Xc/qReWguGMn5yFDWcGfKmonzUjVFS/YnVT
68ym6+c0r45dWzd3Bv47/d8G3d5RCmVuZHN0cmVhbQplbmRvYmoKNzEgMCBvYmoKNTQyNQplbmRv
YmoKMjYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAv
QVpHVUNIK1RpbWVzLUJvbGQgL0ZvbnREZXNjcmlwdG9yCjcyIDAgUiAvRW5jb2RpbmcgL01hY1Jv
bWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMTE5IC9XaWR0aHMgWyAyNTAKMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyNTAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDMzMyAwIDAg
MCAwIDAgMCA3MjIgMAowIDAgMCAwIDAgMCAzODkgMCAwIDAgMCAwIDc3OCA2MTEgMCA3MjIgMCAw
IDAgNzIyIDEwMDAgMCAwIDAgMCAwIDAgMCAwIDAgMAo1NTYgNDQ0IDU1NiA0NDQgMCA1MDAgMCAy
NzggMzMzIDU1NiAyNzggODMzIDU1NiA1MDAgNTU2IDAgNDQ0IDM4OSAzMzMgNTU2CjAgNzIyIF0g
Pj4KZW5kb2JqCjcyIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0Fa
R1VDSCtUaW1lcy1Cb2xkIC9GbGFncyAzMiAvRm9udEJCb3gKWy0yMjggLTQwNyAxNzc4IDEyOTVd
IC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgNzUwIC9EZXNjZW50IC0yNTAgL0NhcEhlaWdodAo2OTMg
L1N0ZW1WIDE2NSAvWEhlaWdodCA0NzQgL1N0ZW1IIDQ2IC9NYXhXaWR0aCAxODAzIC9Gb250Rmls
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
Bq+fKXbpBKpEHgNNv0AtxuItBc0FJSpdxBPyhUVUH25Zrlune1tH65p1Jb6yklLwqh7WVQzWwGuI
wQr7q/Y4eFjtH+rAnLYOxgcraj60W1EtOJ0txPUMJwDLcIPRrkHieq6+FKmJWrlqBbhaqWq2hoME
Q1ysKy47pcHDCobDD3hYJYVO8lLD+7usfxV/KuTLlTvU691qLi+GP84vY1X9OdtoWUkRNvuj5vRv
428ovy1OvxXwRehni2mLkGO2pJfh6exik1PLFBdTentu0JO+D29U6cEnKysuZv2VF49TS0e3Uenr
y8CxKvE8CVHmFrRZivx9kAcZNLznzoM9kQ/f0pWA35tI3UbUhJpRC3xVOxm+zpyKrkHT4Avda9EM
8LbMRnPgfX0HPInh/TiWmpRDG6iuo3nWhJbozIGlvTfF6pctWYD+Ezvffo8KZW5kc3RyZWFtCmVu
ZG9iago3NCAwIG9iagoxMDI2OAplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlw
ZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9OTFdJRE0rVGltZXMtUm9tYW4gL0ZvbnREZXNjcmlwdG9y
Cjc1IDAgUiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENo
YXIgMjIyIC9XaWR0aHMgWyAyNTAKMCAwIDAgMCAwIDAgMCAzMzMgMzMzIDAgNTY0IDI1MCAzMzMg
MjUwIDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwCjAgNTAwIDI3OCAyNzggNTY0
IDU2NCA1NjQgMCA5MjEgNzIyIDY2NyA2NjcgNzIyIDYxMSAwIDcyMiA3MjIgMzMzIDAgMCA2MTEK
MCA3MjIgNzIyIDAgMCA2NjcgNTU2IDYxMSA3MjIgMCA5NDQgMCAwIDYxMSAzMzMgMCAzMzMgMCA1
MDAgMCA0NDQgNTAwIDQ0NAo1MDAgNDQ0IDMzMyA1MDAgNTAwIDI3OCAyNzggNTAwIDI3OCA3Nzgg
NTAwIDUwMCA1MDAgNTAwIDMzMyAzODkgMjc4IDUwMCA1MDAKNzIyIDUwMCA1MDAgNDQ0IDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDQ0
NCA0NDQgMzMzIDMzMyAwIDAgMCAwIDAgMCAwIDAKNTU2IF0gPj4KZW5kb2JqCjc1IDAgb2JqCjw8
IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL05MV0lETStUaW1lcy1Sb21hbiAvRmxh
Z3MgMzIgL0ZvbnRCQm94ClstMjAzIC00MjggMTcwMCAxMjcyXSAvSXRhbGljQW5nbGUgMCAvQXNj
ZW50IDc1MCAvRGVzY2VudCAtMjUwIC9DYXBIZWlnaHQKNjc2IC9TdGVtViAxMDIgL1hIZWlnaHQg
NDYxIC9TdGVtSCA0NCAvTWF4V2lkdGggMTcyMSAvRm9udEZpbGUyIDc2IDAgUiA+PgplbmRvYmoK
NzYgMCBvYmoKPDwgL0xlbmd0aCA3NyAwIFIgL0xlbmd0aDEgMjUyNTIgL0ZpbHRlciAvRmxhdGVE
ZWNvZGUgPj4Kc3RyZWFtCngB1LwJdFXV+Ti69xnuOXee5/Hc+ebOuUlubsaTORDmMUHDjAKKGEQQ
FcQRRK2oVRGtSOs8lICAwZEqTpW2tlVrcWxFa9V0+BVpLeTk/+1zE9T++976r7feemu93Jy995n3
/vY3f98+a9dcvAxp0GZEI3HJqkUXIvnP9DeE8B1L1q0NlPd5D0KM75wLz11V3tc0IMRuPff8DeeU
961w3aSHly9btLS8j05DXbMcDpT3cRXU4eWr1l5S3jcegeenzl+9ZOy8ZSsc37Fq0SVj70fvw37g
gkWrlpWvX7wZ6vCFqy9aW95f9BrUQxeuWTZ2Pe5FSPHS9/fp3yIMV/WgAaRAdyAlopABfvUIcZ8r
XkIMnCXn4e/5c+b9eYG+4Wts5OX9nzSeJddvNvzycWnh6du0O1UpOKAcv57UCiTBIe3L0kJpoXbn
mTPyfVD0DKF8cgjFkqJe+atZWD8LN7+ZwLtmYbFFi0/B5Tm5DMilQS4RPiWqMQrg7RzersB/a5lK
kT7+laKhPEyR3g7iUTQIrRcoHuZrD7T2QItCuyiykdYVFIKN1Dy6Gdo3Q3szxULNIw6thiOr4chq
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
QFtRr8rDM0RFhIdRRTVWgdOXk5WLhZGR0Trwn12CnqaboYR7m7a07z87GWazLKZptjcZmSNs5HVX
Gzob5U5hYWEU4ODmNNQS0xL7+zLTgktGjhOoSsZdlRloxN/4aEVR0Gg0qMwAA+B6q1QIC40EbZpi
Bo6/8QDXgYFOsEM+vw52eh1o3h90ch1opwXstDp14PyWFrh/og8+mQ52Kp0V+Dw6B2AKAJ1EBzvb
zQu4v9uHwRc4Ju7PEAA8YzcIeOZvCEMoeJ44Anj6bxRDNPCE41jgScigU3a3MxwAugo0E8kIdi0b
aE7Szyfc08VXOyQzN7VYNyg/NzEPAHre5OIKZW5kc3RyZWFtCmVuZG9iago3NyAwIG9iagoxODkz
NAplbmRvYmoKMjcgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNl
Rm9udCAvVkRFUFNDK0hlbHZldGljYSAvRm9udERlc2NyaXB0b3IKNzggMCBSIC9FbmNvZGluZyAv
TWFjUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAyMjIgL1dpZHRocyBbIDI3
OAowIDAgMCAwIDAgMCAwIDMzMyAzMzMgMCAwIDI3OCAzMzMgMjc4IDI3OCA1NTYgMCAwIDAgNTU2
IDAgMCAwIDAgMCAwIDAgNTg0CjAgNTg0IDAgMCAwIDAgMCAwIDY2NyAwIDAgMCAyNzggMCAwIDAg
MCAwIDc3OCAwIDAgMCAwIDYxMSAwIDAgMCAwIDAgMCAyNzgKMCAyNzggMCAwIDAgNTU2IDU1NiA1
MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMCA1MDAgMjIyIDgzMyA1NTYgNTU2IDU1Ngo1NTYg
MzMzIDUwMCAyNzggNTU2IDUwMCA3MjIgNTAwIDUwMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDM1MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIyMgoyMjIgMCAwIDAg
MCAwIDAgMCAwIDUwMCBdID4+CmVuZG9iago3OCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0
b3IgL0ZvbnROYW1lIC9WREVQU0MrSGVsdmV0aWNhIC9GbGFncyAzMiAvRm9udEJCb3ggWy05NTEg
LTQ4MSAxNDQ1IDExMjJdCi9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgNzcwIC9EZXNjZW50IC0yMzAg
L0NhcEhlaWdodCA3MTcgL1N0ZW1WIDk4IC9YSGVpZ2h0CjUyMyAvU3RlbUggODUgL0F2Z1dpZHRo
IDQ0MSAvTWF4V2lkdGggMTUwMCAvRm9udEZpbGUyIDc5IDAgUiA+PgplbmRvYmoKNzkgMCBvYmoK
PDwgL0xlbmd0aCA4MCAwIFIgL0xlbmd0aDEgMTQ3OTYgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K
c3RyZWFtCngBvXt5fJTVuf857z5LJjOT2ZfMTCYzkz0hIYGYQMaQhDWIIJAgwQQIm1ABMYgFbupS
JFIsIovL1WotIIgMIUIAtZSiiNq6o8Xl2lu0ttf87O0PrZVk5n7PO0kk6fLxj977Tp6zvu95n/Oc
53nO8zznzZrVt7SSFNJOeDJtTsvKRUS9yooI4R9esKJlZbKetpwQunNB2xp/si5moX/5opWLVyTr
yv2EaL2Ll6/rf966kBB/1pLWFuTq1Yu0bAkaklU6EnnmkhVrbk3WzV3Iu5fftKC/3yqgPm9Fy639
7ycfoO7/XsuK1uT9ZXrkmStvunlNsl66BXn7ytWt/ffTBuD3GqFoLSD3EQ25kciEI0b8mgiRP9N6
iYBe1o/rpqj+kRtSK78kJkWt31B/r5q/dcfZJV+39kZ025S/okEzcD/Lpex4NiF6iv4e3bbBHvU5
JAXdZEZuN5kIqAKUAnJzr3aQdrqH/BjwEwBPltJ7yDrAZsADAGGw9CRqx+k9nYISPUHXERedFNUJ
vussTp9Dq/O92U2lrkd8v3H87iR1YvV+S52dKURztZb+hD5KFhIf/RkJ0dvIBJJFHzySvdzXjK4n
yUpAO4BXU0qf7Ewv9j1P80hIoHgmTNIFetT3+xH5vk9GdHO003c60i0g+0U6atFU3ynvI76fexf7
ngccSHbtz8YdR31Pepf7tqd30wc7ffd5uyme2ZbMbvHi0aO+Fdk7fQtHqP1TdnZzBzp95eifFdX5
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
dHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9TTEdRR04rSGVsdmV0aWNhIC9Gb250RGVzY3JpcHRv
cgo4MSAwIFIgL1RvVW5pY29kZSA4MiAwIFIgL0ZpcnN0Q2hhciAzMyAvTGFzdENoYXIgMzMgL1dp
ZHRocyBbIDAgXSA+PgplbmRvYmoKODIgMCBvYmoKPDwgL0xlbmd0aCA4MyAwIFIgL0ZpbHRlciAv
RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZC9bsQgEIR7nmLLS3HCdpUCIUUXneQiP4qTB8CwtpDO
C1rjwm8fIM5FSrEFM/PBsPLSP/fkE8h3DnbABJMnx7iGjS3CiLMn0XbgvE3HqWp2MVHIDA/7mnDp
aQqglACQHxlZE+9wenJhxIeivbFD9jTD6esyVGXYYrzhgpSgEVqDwylf92Liq1kQZEXPvcu+T/s5
U3+Jzz0i5EaZaH8q2eBwjcYiG5pRqKbR6nrVAsn9sw5gnI5k12pVp+kea/7XKWj54r2S3Zhzm7qH
WrQU8IT3VcUQy4N1vgFxMnAcCmVuZHN0cmVhbQplbmRvYmoKODMgMCBvYmoKMjI0CmVuZG9iago4
MSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9TTEdRR04rSGVsdmV0
aWNhIC9GbGFncyA0IC9Gb250QkJveCBbLTk1MSAtNDgxIDE0NDUgMTEyMl0KL0l0YWxpY0FuZ2xl
IDAgL0FzY2VudCA3NzAgL0Rlc2NlbnQgLTIzMCAvQ2FwSGVpZ2h0IDcxNyAvU3RlbVYgOTggL1hI
ZWlnaHQKNTIzIC9TdGVtSCA4NSAvQXZnV2lkdGggNDQxIC9NYXhXaWR0aCAxNTAwIC9Gb250Rmls
ZTIgODQgMCBSID4+CmVuZG9iago4NCAwIG9iago8PCAvTGVuZ3RoIDg1IDAgUiAvTGVuZ3RoMSA1
MDY4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ab1Yf3AU1R3/vv1xdyGhJgHk8uPY
vS6X3xESlQZCYUnuQkICBgL0DkHukly8xEQyGFLBQm8UrBxIVYQqOCj9YQWKbC4ZuoFKI6OjTqui
jlatM0r91enI2F90VDTbz+4lJ2GUyR+M++bt9+d77/M+793b3etZvyFMEylKPDWuCnW3kXVNegyi
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
b2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMjA4IC9XaWR0aHMgWyA2MDAKMCAwIDAgMCAw
IDYwMCAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAwIDYwMCA2MDAgMCA2MDAgMCAwIDAg
MCAwIDAgNjAwCjYwMCA2MDAgNjAwIDYwMCAwIDAgNjAwIDAgNjAwIDAgNjAwIDYwMCAwIDAgNjAw
IDAgMCAwIDYwMCAwIDAgNjAwIDAgMCA2MDAKMCAwIDYwMCAwIDAgMCAwIDYwMCAwIDAgMCA2MDAg
MCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAwIDYwMAo2MDAgNjAwIDYwMCA2
MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDAgMCAwIDAgMCAwIDAg
MCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCA2MDAgXSA+PgplbmRv
YmoKODYgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQUtMVERLK0Nv
dXJpZXIgL0ZsYWdzIDMyIC9Gb250QkJveCBbLTY1NSAtNDA5IDEwNjMgMTA5MF0KL0l0YWxpY0Fu
Z2xlIDAgL0FzY2VudCA3NTQgL0Rlc2NlbnQgLTI0NiAvQ2FwSGVpZ2h0IDU5NSAvU3RlbVYgNzYg
L1hIZWlnaHQKNDYyIC9TdGVtSCA2NyAvTWF4V2lkdGggODIzIC9Gb250RmlsZTIgODcgMCBSID4+
CmVuZG9iago4NyAwIG9iago8PCAvTGVuZ3RoIDg4IDAgUiAvTGVuZ3RoMSAyMTQ3MiAvRmlsdGVy
IC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHVnHl8W+WZ78/RkWXLu7VYsSVZ+2bJli2viROTxXFC
nIQUaLAphSSEbCRACEso7YVchmYjUEpLAg0dhtIQ+DAQAhcSJ6XQDpTOQIHbKUtvmE57hxb6YbhM
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
2HAec4kx5XzlK/ze6qD+3Sppo6q3bCQayqyRhecOjaTnXH71lWsvudJ8R97+V/AeOIEg+N2Myl+z
UjNgOlgILgDrwdfBLWAveBgcBS+CY+A9cIJ6TTXwgQyYDhaCC8B68HVwC9gLHgZHwYvgGHgPnEBA
1cAHMmA6WAguAOvB18EtYC94GBwFL4Jj4D1wAv9eDXwgc8r8x7iUYluFfqefxyeds8HgtPv1rWAT
Pt866f30pPPMpPO2Seftk871lHNC/52T3u+adD5t0vnApPPpk85nTDofnHQ+a9L5nEnncyedD086
P3PS+aJJ50smnZ8z6XzppPOvTDq/aNL58knnKyadXzzpnL0Yp+nzkknnqyadr550zvr5aZ9fO+n8
0knn6yedU+867fOXTTq/fNL5FZPO+TuKp33+yknnmyad63+7cgKfrp70vu6bJrwvSxIT7YNi1Wnn
151+HpS/kKf8Xwa8d4YKZW5kc3RyZWFtCmVuZG9iago4OCAwIG9iagoxMjMwMgplbmRvYmoKMTEg
MCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvT1RWUFVJ
K0NvdXJpZXItQm9sZCAvRm9udERlc2NyaXB0b3IKODkgMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5F
bmNvZGluZyAvRmlyc3RDaGFyIDYwIC9MYXN0Q2hhciAxMTYgL1dpZHRocyBbIDYwMAowIDYwMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwCjYwMCAwIDAgMCAwIDAgNjAwIDYwMCA2MDAgMCAwIDYwMCA2MDAgMCA2MDAgMCAw
IDYwMCAwIDYwMCBdID4+CmVuZG9iago4OSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3Ig
L0ZvbnROYW1lIC9PVFZQVUkrQ291cmllci1Cb2xkIC9GbGFncyAzMiAvRm9udEJCb3gKWy02NTYg
LTQwMyAxMDc0IDExMTldIC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgNzU0IC9EZXNjZW50IC0yNDYg
L0NhcEhlaWdodAo1OTUgL1N0ZW1WIDEyNiAvWEhlaWdodCA0NjIgL1N0ZW1IIDEwOCAvTWF4V2lk
dGggODIzIC9Gb250RmlsZTIgOTAgMCBSID4+CmVuZG9iago5MCAwIG9iago8PCAvTGVuZ3RoIDkx
IDAgUiAvTGVuZ3RoMSA0NzEyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa1Ye2yT
1xU/159fIcaxQ+KEOAk2iZ2H4zh+vwLkYafQUEgJpTbi0UASQpsQGqCwB1roiopCy6qtpUVqp/Uh
NLX7I626yUlatZXaalvbLe0KbKLTVG3rxNSxDthEO3D2O58d4wbUv/ZJx/fcc+937znnd8659/P+
sQMDtJjGSaKezX17B0l+jPvRXNk50rc305eeRjux84H9lkxffIK2cnDvrpFs/yqR2Ldr+FvZ95Ux
It37QwN9/ZlxuoY2MARBdr4Pbe3QyP5Dmb40jLZleHRndlxZj37FSN+h7P7E+1n29I0MZOYb16Kt
3zu6j/XEYzTgp3Xv2EB2vkig/xAJ/OqEhwrou6SSe0SLiBQkrYK9QpZgzpldR89uL2r9t1iqxQtE
219cPc7th1PSsa/euvau9pT2MuaqsyvAVCK1No3J6pNfvfXVr7WnciP8Gj+6FJGDpiFXkMIhprGd
xMwbaJqpliqpFF4n0jreICXdSR3kIxuZshIVNXxtDr2BhXxY0Jr3mmLBa9hNjbU0DmxtiR/eXR6j
RjpPj9B/6BFRgpWXpfeREkhWKJ8jKyY1dadI3ZN4WYgTyZSYO5qiWNUU1pC2b3OmSDRZLPHdsUlx
DzqKJggareCkJkvXpGTr2pCoSVomLBNr+icsXZahvv5JpU1uMTAwkXRZJqk3sRu/GxPWybakOccO
JJMRrKPkdfAKpk8kscK92RXQyiLXdUxSNXVbJiV7T+LOxOR4zDzZFkuarVZLfPLNnsTkmzGzNZnE
LHVOU2jMdmd01kBndSPGtZlVehOTbeZJSk5M8Jq9iRrr5PjEhHkCdmT7KXpzgUDQQkFbVgBPYA14
Ip4S4z1YDE2N1cyCGmuNFXomY9i7oKm7NxGHptakk5Qf0CCoDrQFNASKgdaBToNOKj+Yu4i2C3QQ
1APMMjGKeAIu30W/lcKQcQj/Px4pbxElMkQt9zXEaVAg88gWKpQ5ogg9QK+IxxQbpHLpQek3yrOq
LaqLas54BQ2mTyoHVS8gujV0G1zuAnggrQFxNgvivmEKw8or6IFTypyE8YJPaAZdtkjpmOF84Th2
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
zeTDSwnD6prFihuplL3EKazCzRU8/duO3nUf1zZE0xde3vW001q5LRYOxbeFOzrCUj9bOkfDPZvb
m+/4XshXv/f7JnxbR6Puv8dDoXjuyyr9B3qNQ+SmRwfJMrggRrejTq2l9fhO20B3wQp+BAKcv8/w
1wAtIVq/cVPPXWscnaMHxnYPjDk7RoflP0QyM3hWCIT/SmgjiIf4/4yHQI+DXgC9Cnob9DHoL3PZ
BzzleIFvwq/3Vy7o9y3o71rQ54td/nq7F/T5v5n8cfk/n7z9RxeMjy3os030PwYWI94KZW5kc3Ry
ZWFtCmVuZG9iago5MSAwIG9iagoyODUwCmVuZG9iago5MiAwIG9iagooc2hpZnQgcHJvcG9zYWwg
RDA3NjlSMC5wYWdlcykKZW5kb2JqCjkzIDAgb2JqCihNYWMgT1MgWCAxMC4xMi42IFF1YXJ0eiBQ
REZDb250ZXh0KQplbmRvYmoKOTQgMCBvYmoKKFBhZ2VzKQplbmRvYmoKOTUgMCBvYmoKKEQ6MjAx
NzA5MzAxOTMxNDRaMDAnMDAnKQplbmRvYmoKMSAwIG9iago8PCAvVGl0bGUgOTIgMCBSIC9Qcm9k
dWNlciA5MyAwIFIgL0NyZWF0b3IgOTQgMCBSIC9DcmVhdGlvbkRhdGUgOTUgMCBSIC9Nb2REYXRl
Cjk1IDAgUiA+PgplbmRvYmoKeHJlZgowIDk2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDEyNTM3
MCAwMDAwMCBuIAowMDAwMDAyODg2IDAwMDAwIG4gCjAwMDAwMzExOTEgMDAwMDAgbiAKMDAwMDAw
MDAyMiAwMDAwMCBuIAowMDAwMDAyODY2IDAwMDAwIG4gCjAwMDAwMDMwMDUgMDAwMDAgbiAKMDAw
MDAwNTkzMSAwMDAwMCBuIAowMDAwMDc0MjQxIDAwMDAwIG4gCjAwMDAwNTcyMjggMDAwMDAgbiAK
MDAwMDA0MDcxNCAwMDAwMCBuIAowMDAwMTIxNjkyIDAwMDAwIG4gCjAwMDAwMDk0NTkgMDAwMDAg
biAKMDAwMDEwODQxNCAwMDAwMCBuIAowMDAwMDAzMTYxIDAwMDAwIG4gCjAwMDAwMzE3NzIgMDAw
MDAgbiAKMDAwMDAzMTU5NCAwMDAwMCBuIAowMDAwMDAzMTk1IDAwMDAwIG4gCjAwMDAwMDU5MTAg
MDAwMDAgbiAKMDAwMDAwNTk2NyAwMDAwMCBuIAowMDAwMDA5NDM4IDAwMDAwIG4gCjAwMDAwMTM1
NzMgMDAwMDAgbiAKMDAwMDAwOTQ5NiAwMDAwMCBuIAowMDAwMDEzNTUyIDAwMDAwIG4gCjAwMDAw
MTM2ODAgMDAwMDAgbiAKMDAwMDA0OTMxMSAwMDAwMCBuIAowMDAwMDYzMjE2IDAwMDAwIG4gCjAw
MDAwOTQyMzAgMDAwMDAgbiAKMDAwMDA1NTUyMSAwMDAwMCBuIAowMDAwMDE4NjA1IDAwMDAwIG4g
CjAwMDAwMTM4NzMgMDAwMDAgbiAKMDAwMDAxODU4NCAwMDAwMCBuIAowMDAwMDE4NzI3IDAwMDAw
IG4gCjAwMDAwMTg4OTYgMDAwMDAgbiAKMDAwMDAzMTM1OSAwMDAwMCBuIAowMDAwMDIyNTU5IDAw
MDAwIG4gCjAwMDAwMTg5MjMgMDAwMDAgbiAKMDAwMDAyMjUzOCAwMDAwMCBuIAowMDAwMDIyNjY2
IDAwMDAwIG4gCjAwMDAwMzIwMTAgMDAwMDAgbiAKMDAwMDAyNzMxNyAwMDAwMCBuIAowMDAwMDIy
ODcyIDAwMDAwIG4gCjAwMDAwMjcyOTYgMDAwMDAgbiAKMDAwMDAyNzQyNCAwMDAwMCBuIAowMDAw
MTA0ODUyIDAwMDAwIG4gCjAwMDAwMzA4NzcgMDAwMDAgbiAKMDAwMDAyNzYxOSAwMDAwMCBuIAow
MDAwMDMwODU2IDAwMDAwIG4gCjAwMDAwMzA5ODQgMDAwMDAgbiAKMDAwMDAzMTMwOSAwMDAwMCBu
IAowMDAwMDMxNDgwIDAwMDAwIG4gCjAwMDAwMzE1MzYgMDAwMDAgbiAKMDAwMDAzMTcxNiAwMDAw
MCBuIAowMDAwMDMxODk0IDAwMDAwIG4gCjAwMDAwMzE5NTAgMDAwMDAgbiAKMDAwMDAzMjQ0NCAw
MDAwMCBuIAowMDAwMDMyNzA0IDAwMDAwIG4gCjAwMDAwNDA2OTMgMDAwMDAgbiAKMDAwMDA0MTEy
NyAwMDAwMCBuIAowMDAwMDQxMzg1IDAwMDAwIG4gCjAwMDAwNDkyOTAgMDAwMDAgbiAKMDAwMDA0
OTg5OSAwMDAwMCBuIAowMDAwMDUwMTY1IDAwMDAwIG4gCjAwMDAwNTU1MDAgMDAwMDAgbiAKMDAw
MDA1NjAwNyAwMDAwMCBuIAowMDAwMDU1Njg4IDAwMDAwIG4gCjAwMDAwNTU5ODcgMDAwMDAgbiAK
MDAwMDA1NjI3MiAwMDAwMCBuIAowMDAwMDU3MjA4IDAwMDAwIG4gCjAwMDAwNTc0MTAgMDAwMDAg
biAKMDAwMDA1NzY4MCAwMDAwMCBuIAowMDAwMDYzMTk1IDAwMDAwIG4gCjAwMDAwNjM2MjIgMDAw
MDAgbiAKMDAwMDA2Mzg2MCAwMDAwMCBuIAowMDAwMDc0MjE5IDAwMDAwIG4gCjAwMDAwNzQ5NDQg
MDAwMDAgbiAKMDAwMDA3NTE4MyAwMDAwMCBuIAowMDAwMDk0MjA4IDAwMDAwIG4gCjAwMDAwOTQ4
NzQgMDAwMDAgbiAKMDAwMDA5NTEyNCAwMDAwMCBuIAowMDAwMTA0ODMxIDAwMDAwIG4gCjAwMDAx
MDUzMzUgMDAwMDAgbiAKMDAwMDEwNTAxNSAwMDAwMCBuIAowMDAwMTA1MzE1IDAwMDAwIG4gCjAw
MDAxMDU1ODQgMDAwMDAgbiAKMDAwMDEwODM5MyAwMDAwMCBuIAowMDAwMTA5MDQ0IDAwMDAwIG4g
CjAwMDAxMDkyNzcgMDAwMDAgbiAKMDAwMDEyMTY3MCAwMDAwMCBuIAowMDAwMTIyMDAzIDAwMDAw
IG4gCjAwMDAxMjIyNDMgMDAwMDAgbiAKMDAwMDEyNTE4MyAwMDAwMCBuIAowMDAwMTI1MjA0IDAw
MDAwIG4gCjAwMDAxMjUyNTEgMDAwMDAgbiAKMDAwMDEyNTMwNCAwMDAwMCBuIAowMDAwMTI1MzI4
IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgOTYgL1Jvb3QgNDkgMCBSIC9JbmZvIDEgMCBSIC9J
RCBbIDwyN2U4NjNkZTI2ZWMwMWZiMmE1NDY4OWE5M2Y5YzQ0ZT4KPDI3ZTg2M2RlMjZlYzAxZmIy
YTU0Njg5YTkzZjljNDRlPiBdID4+CnN0YXJ0eHJlZgoxMjU0NzUKJSVFT0YK
------=_Part_3509_1344779633.1506800313344--

.


Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Sat, 30 Sep 2017 22:47:45 +0300
Raw View
On 30 September 2017 at 22:38, Dan Raviv <dan.raviv@gmail.com> wrote:
> Hi,
>
> Attached updated proposal draft.
>
> - Added proposed standard wording.
> - Decided to allow shift by zero despite a possible minimal performance
> penalty.
> - Improved formatting and content nits.
>
> Would appreciate any comments as well as possible naming alternatives (see
> Open Issues section in the proposal).


Looks ready for LEWG consumption, based on my reading of it.

--
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.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAFk2RUa4Zxh%3DhozpZm6myfAvNZ69mL0rdTOHH0zS58p5%3DVGs_A%40mail.gmail.com.

.