www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - String Switch Lowering

reply Benjamin Thaut <code benjamin-thaut.de> writes:
X0Q2b2JqZWN0X19UOF9fc3dpdGNoVHlhVnhBeWFhN180MzUzNTQzNjQzNDQ1NFZ4UXdhN180
NTUzNTQzNTQ1NDQ1NFZ4UUJyYTdfNDU3NDYzMmY0NzRkNTRWeFFDbmE3XzRkNTM1NDM3NGQ0
NDU0VnhRRGphN181MDUzNTQzODUwNDQ1NFZ4UUVmYTlfNDE3MzY5NjEyZjQxNjQ2NTZlVnhR
RmZhOV80MTczNjk2MTJmNDI2MTZiNzVWeFFHZmE5XzQxNzM2OTYxMmY0NDY5NmM2OVZ4UUhm
YTlfNDE3MzY5NjEyZjQ4NmY3NjY0VnhRSWZhOV80MTczNjk2MTJmNGY2ZDczNmJWeFFKZmE5
XzQxNzM2OTYxMmY0ZjcyNjE2Y1Z4UUtmYTlfNDU3NDYzMmY0NzRkNTQyYjMxVnhRTGZhOV80
NTc0NjMyZjQ3NGQ1NDJiMzJWeFFNZmE5XzQ1NzQ2MzJmNDc0ZDU0MmIzM1Z4UU5mYTlfNDU3
NDYzMmY0NzRkNTQyYjM0VnhRT2ZhOV80NTc0NjMyZjQ3NGQ1NDJiMzVWeFFQZmE5XzQ1NzQ2
MzJmNDc0ZDU0MmIzNlZ4UVFmYTlfNDU3NDYzMmY0NzRkNTQyYjM3VnhRUmZhOV80NTc0NjMy
ZjQ3NGQ1NDJiMzhWeFFTZmE5XzQ1NzQ2MzJmNDc0ZDU0MmIzOVZ4UVRmYTlfNDU3NDYzMmY0
NzRkNTQyZDMxVnhRVWZhOV80NTc0NjMyZjQ3NGQ1NDJkMzJWeFFWZmE5XzQ1NzQ2MzJmNDc0
ZDU0MmQzM1Z4UVdmYTlfNDU3NDYzMmY0NzRkNTQyZDM0VnhRWGZhOV80NTc0NjMyZjQ3NGQ1
NDJkMzVWeFFZZmE5XzQ1NzQ2MzJmNDc0ZDU0MmQzNlZ4UVpmYTlfNDU3NDYzMmY0NzRkNTQy
ZDM3VnhRQkFmYTlfNDU3NDYzMmY0NzRkNTQyZDM4VnhRQkJnYTlfNDU3NDYzMmY0NzRkNTQy
ZDM5VnhRQkNoYTEwXzQxNzM2OTYxMmY0MTZkNmQ2MTZlVnhRQkRsYTEwXzQxNzM2OTYxMmY0
MTcxNzQ2MTc1VnhRQkVwYTEwXzQxNzM2OTYxMmY0MzY4Njk3NDYxVnhRQkZ0YTEwXzQxNzM2
OTYxMmY0NDY4NjE2YjYxVnhRQkd4YTEwXzQxNzM2OTYxMmY0NDc1NjI2MTY5VnhRQkliYTEw
XzQxNzM2OTYxMmY0YjYxNjI3NTZjVnhRQkpmYTEwXzQxNzM2OTYxMmY0ZDYxNjM2MTc1VnhR
QktqYTEwXzQxNzM2OTYxMmY1MTYxNzQ2MTcyVnhRQkxuYTEwXzQxNzM2OTYxMmY1MzY1NmY3
NTZjVnhRQk1yYTEwXzQxNzM2OTYxMmY1NDZmNmI3OTZmVnhRQk52YTEwXzQxNzM2OTYxMmY1
NDZmNmQ3MzZiVnhRQk96YTEwXzQ1NzQ2MzJmNDc0ZDU0MmIzMTMwVnhRQlFkYTEwXzQ1NzQ2
MzJmNDc0ZDU0MmIzMTMxVnhRQlJoYTEwXzQ1NzQ2MzJmNDc0ZDU0MmIzMTMyVnhRQlNsYTEw
XzQ1NzQ2MzJmNDc0ZDU0MmQzMTMwVnhRQlRwYTEwXzQ1NzQ2MzJmNDc0ZDU0MmQzMTMxVnhR
QlV0YTEwXzQ1NzQ2MzJmNDc0ZDU0MmQzMTMyVnhRQlZ4YTEwXzQ1NzQ2MzJmNDc0ZDU0MmQz
MTMzVnhRQlhiYTEwXzQ1NzQ2MzJmNDc0ZDU0MmQzMTM0VnhRQllmYTExXzQxNjY3MjY5NjM2
MTJmNGE3NTYyNjFWeFFCWmxhMTFfNDE2NjcyNjk2MzYxMmY0YzZmNmQ2NVZ4UUNBcmExMV80
MTczNjk2MTJmNDE2YzZkNjE3NDc5VnhRQ0J4YTExXzQxNzM2OTYxMmY0MTZlNjE2NDc5NzJW
eFFDRGRhMTFfNDE3MzY5NjEyZjQxNzE3NDZmNjI2NVZ4UUNFamExMV80MTczNjk2MTJmNDI2
NTY5NzI3NTc0VnhRQ0ZwYTExXzQxNzM2OTYxMmY0MjcyNzU2ZTY1NjlWeFFDR3ZhMTFfNDE3
MzY5NjEyZjQ4NjU2MjcyNmY2ZVZ4UUNJYmExMV80MTczNjk2MTJmNGI3NTc3NjE2OTc0VnhR
Q0poYTExXzQxNzM2OTYxMmY0ZDYxNmU2OTZjNjFWeFFDS25hMTFfNDE3MzY5NjEyZjRkNzU3
MzYzNjE3NFZ4UUNMdGExMV80MTczNjk2MTJmNTI2OTc5NjE2NDY4VnhRQ016YTExXzQxNzM2
OTYxMmY1MzYxNjk2NzZmNmVWeFFDT2ZhMTFfNDE3MzY5NjEyZjU0NjE2OTcwNjU2OVZ4UUNQ
bGExMV80MTczNjk2MTJmNTQ2NTY4NzI2MTZlVnhRQ1FyYTExXzQxNzM2OTYxMmY1NTcyNzU2
ZDcxNjlWeFFDUnhhMTFfNDU3NTcyNmY3MDY1MmY0YjY5NjU3NlZ4UUNUZGExMV80NTc1NzI2
ZjcwNjUyZjRmNzM2YzZmVnhRQ1VqYTExXzQ1NzU3MjZmNzA2NTJmNTI2OTY3NjFWeFFDVnBh
MTFfNDU3NTcyNmY3MDY1MmY1MjZmNmQ2NVZ4UUNXdmExMV80OTZlNjQ2OTYxNmUyZjRkNjE2
ODY1VnhRQ1liYTEyXzQxNjY3MjY5NjM2MTJmNDE2MzYzNzI2MVZ4UUNaamExMl80MTY2NzI2
OTYzNjEyZjQzNjE2OTcyNmZWeFFEQXJhMTJfNDE2NjcyNjk2MzYxMmY0MzY1NzU3NDYxVnhR
REJ6YTEyXzQxNjY3MjY5NjM2MTJmNDQ2MTZiNjE3MlZ4UUREaGExMl80MTY2NzI2OTYzNjEy
ZjRjNjE2NzZmNzNWeFFERXBhMTJfNDE2NjcyNjk2MzYxMmY1NDc1NmU2OTczVnhRREZ4YTEy
XzQxNmQ2NTcyNjk2MzYxMmY0MTY0NjE2YlZ4UURIZmExMl80MTZkNjU3MjY5NjM2MTJmNGM2
OTZkNjFWeFFESW5hMTJfNDE2ZDY1NzI2OTYzNjEyZjRlNmY2ZDY1VnhRREp2YTEyXzQxNzM2
OTYxMmY0MjYxNjc2ODY0NjE2NFZ4UURMZGExMl80MTczNjk2MTJmNDI2MTY4NzI2MTY5NmVW
eFFETWxhMTJfNDE3MzY5NjEyZjQyNjE2ZTY3NmI2ZjZiVnhRRE50YTEyXzQxNzM2OTYxMmY0
MjYxNzI2ZTYxNzU2Y1Z4UURQYmExMl80MTczNjk2MTJmNDI2OTczNjg2YjY1NmJWeFFEUWph
MTJfNDE3MzY5NjEyZjQzNmY2YzZmNmQ2MjZmVnhRRFJyYTEyXzQxNzM2OTYxMmY0OTcyNmI3
NTc0NzM2YlZ4UURTemExMl80MTczNjk2MTJmNGE2MTZiNjE3Mjc0NjFWeFFEVWhhMTJfNDE3
MzY5NjEyZjRiNjE3MjYxNjM2ODY5VnhRRFZwYTEyXzQxNzM2OTYxMmY0Yjc1NjM2ODY5NmU2
N1Z4UURXeGExMl80MTczNjk2MTJmNGQ2MTY3NjE2NDYxNmVWeFFEWWZhMTJfNDE3MzY5NjEy
ZjRlNjk2MzZmNzM2OTYxVnhRRFpuYTEyXzQxNzM2OTYxMmY1MjYxNmU2NzZmNmY2ZVZ4UUVB
dmExMl80MTczNjk2MTJmNTQ2MjY5NmM2OTczNjlWeFFFQ2RhMTJfNDE3MzY5NjEyZjU0Njg2
OTZkNzA2ODc1VnhRRURsYTEyXzQxNzM2OTYxMmY1OTYxNmI3NTc0NzM2YlZ4UUVFdGExMl80
MTczNjk2MTJmNTk2NTcyNjU3NjYxNmVWeFFFR2JhMTJfNDU3NTcyNmY3MDY1MmY0ZDYxNmM3
NDYxVnhRRUhqYTEyXzQ1NzU3MjZmNzA2NTJmNGQ2OTZlNzM2YlZ4UUVJcmExMl80NTc1NzI2
ZjcwNjUyZjUwNjE3MjY5NzNWeFFFSnphMTJfNDU3NTcyNmY3MDY1MmY1MzZmNjY2OTYxVnhR
RUxoYTEyXzQ1NzU3MjZmNzA2NTJmNTY2MTY0NzU3YVZ4UUVNcGExMl80OTZlNjQ2OTYxNmUy
ZjQzNmY2MzZmNzNWeFFFTnhhMTJfNTA2MTYzNjk2NjY5NjMyZjQxNzA2OTYxVnhRRVBmYTEy
XzUwNjE2MzY5NjY2OTYzMmY0NjY5NmE2OVZ4UUVRbmExMl81MDYxNjM2OTY2Njk2MzJmNDc3
NTYxNmRWeFFFUnZhMTJfNTA2MTYzNjk2NjY5NjMyZjRlNjk3NTY1VnhRRVRkYTEyXzUwNjE2
MzY5NjY2OTYzMmY1NDcyNzU2YlZ4UUVVbGExMl81MDYxNjM2OTY2Njk2MzJmNTc2MTZiNjVW
eFFFVnRhMTNfNDE2NjcyNjk2MzYxMmY0MTczNmQ2NTcyNjFWeFFFWGRhMTNfNDE2NjcyNjk2
MzYxMmY0MjYxNmQ2MTZiNmZWeFFFWW5hMTNfNDE2NjcyNjk2MzYxMmY0MjYxNmU2Nzc1NjlW
eFFFWnhhMTNfNDE2NjcyNjk2MzYxMmY0MjYxNmU2YTc1NmNWeFFGQmhhMTNfNDE2NjcyNjk2
MzYxMmY0MjY5NzM3MzYxNzVWeFFGQ3JhMTNfNDE2NjcyNjk2MzYxMmY0NDZmNzU2MTZjNjFW
eFFGRWJhMTNfNDE2NjcyNjk2MzYxMmY0ODYxNzI2MTcyNjVWeFFGRmxhMTNfNDE2NjcyNjk2
MzYxMmY0YjY5Njc2MTZjNjlWeFFGR3ZhMTNfNDE2NjcyNjk2MzYxMmY0Yzc1NjE2ZTY0NjFW
eFFGSWZhMTNfNDE2NjcyNjk2MzYxMmY0Yzc1NzM2MTZiNjFWeFFGSnBhMTNfNDE2NjcyNjk2
MzYxMmY0ZDYxNmM2MTYyNmZWeFFGS3phMTNfNDE2NjcyNjk2MzYxMmY0ZDYxNzA3NTc0NmZW
eFFGTWphMTNfNDE2NjcyNjk2MzYxMmY0ZDYxNzM2NTcyNzVWeFFGTnRhMTNfNDE2NjcyNjk2
MzYxMmY0ZTY5NjE2ZDY1NzlWeFFGUGRhMTNfNDE2ZDY1NzI2OTYzNjEyZjQxNzI3NTYyNjFW
eFFGUW5hMTNfNDE2ZDY1NzI2OTYzNjEyZjQyNjE2ODY5NjFWeFFGUnhhMTNfNDE2ZDY1NzI2
OTYzNjEyZjQyNjU2YzY1NmRWeFFGVGhhMTNfNDE2ZDY1NzI2OTYzNjEyZjQyNmY2OTczNjVW
eFFGVXJhMTNfNDE2ZDY1NzI2OTYzNjEyZjRhNzU2YTc1NzlWeFFGV2JhMTNfNDE2ZDY1NzI2
OTYzNjEyZjUzNjk3NDZiNjFWeFFGWGxhMTNfNDE2ZDY1NzI2OTYzNjEyZjU0Njg3NTZjNjVW
eFFGWXZhMTNfNDE3MzY5NjEyZjQxNzM2ODY3NjE2MjYxNzRWeFFHQWZhMTNfNDE3MzY5NjEy
ZjQzNjE2YzYzNzU3NDc0NjFWeFFHQnBhMTNfNDE3MzY5NjEyZjQ0NjE2ZDYxNzM2Mzc1NzNW
eFFHQ3phMTNfNDE3MzY5NjEyZjQ0NzU3MzY4NjE2ZTYyNjVWeFFHRWphMTNfNDE3MzY5NjEy
ZjRhNjE3OTYxNzA3NTcyNjFWeFFHRnRhMTNfNDE3MzY5NjEyZjRiNjE3NDZkNjE2ZTY0NzVW
eFFHSGRhMTNfNDE3MzY5NjEyZjRiNjg2MTZlNjQ3OTY3NjFWeFFHSW5hMTNfNDE3MzY5NjEy
ZjRkNjE2YjYxNzM3MzYxNzJWeFFHSnhhMTNfNDE3MzY5NjEyZjUzNjE2YjY4NjE2YzY5NmVW
eFFHTGhhMTNfNDE3MzY5NjEyZjUzNjg2MTZlNjc2ODYxNjlWeFFHTXJhMTNfNDE3MzY5NjEy
ZjU0NjE3MzY4NmI2NTZlNzRWeFFHT2JhMTNfNDE3MzY5NjEyZjU1NzM3NDJkNGU2NTcyNjFW
eFFHUGxhMTNfNDU3NTcyNmY3MDY1MmY0MTc0Njg2NTZlNzNWeFFHUXZhMTNfNDU3NTcyNmY3
MDY1MmY0MjY1NzI2YzY5NmVWeFFHU2ZhMTNfNDU3NTcyNmY3MDY1MmY0NDc1NjI2YzY5NmVW
eFFHVHBhMTNfNDU3NTcyNmY3MDY1MmY0YTY1NzI3MzY1NzlWeFFHVXphMTNfNDU3NTcyNmY3
MDY1MmY0YzY5NzM2MjZmNmVWeFFHV2phMTNfNDU3NTcyNmY3MDY1MmY0YzZmNmU2NDZmNmVW
eFFHWHRhMTNfNDU3NTcyNmY3MDY1MmY0ZDYxNjQ3MjY5NjRWeFFHWmRhMTNfNDU3NTcyNmY3
MDY1MmY0ZDZmNmU2MTYzNmZWeFFIQW5hMTNfNDU3NTcyNmY3MDY1MmY0ZDZmNzM2MzZmNzdW
eFFIQnhhMTNfNDU3NTcyNmY3MDY1MmY1MDcyNjE2Nzc1NjVWeFFIRGhhMTNfNDU3NTcyNmY3
MDY1MmY1MzYxNmQ2MTcyNjFWeFFIRXJhMTNfNDU3NTcyNmY3MDY1MmY1MzZiNmY3MDZhNjVW
eFFIR2JhMTNfNDU3NTcyNmY3MDY1MmY1NDY5NzI2MTZlNjVWeFFISGxhMTNfNDU3NTcyNmY3
MDY1MmY1NjY5NjU2ZTZlNjFWeFFISXZhMTNfNDU3NTcyNmY3MDY1MmY1NzYxNzI3MzYxNzdW
eFFIS2ZhMTNfNDU3NTcyNmY3MDY1MmY1YTYxNjc3MjY1NjJWeFFITHBhMTNfNDU3NTcyNmY3
MDY1MmY1YTc1NzI2OTYzNjhWeFFITXphMTNfNDk2ZTY0Njk2MTZlMmY0MzY4NjE2NzZmNzNW
eFFIT2phMTNfNDk2ZTY0Njk2MTZlMmY0MzZmNmQ2ZjcyNmZWeFFIUHRhMTNfNTA2MTYzNjk2
NjY5NjMyZjQ1NjY2MTc0NjVWeFFIUmRhMTNfNTA2MTYzNjk2NjY5NjMyZjRlNjE3NTcyNzVW
eFFIU25hMTNfNTA2MTYzNjk2NjY5NjMyZjUwNjE2YzYxNzVWeFFIVHhhMTRfNDE2NjcyNjk2
MzYxMmY0MTYyNjk2NDZhNjE2ZVZ4UUhWamExNF80MTY2NzI2OTYzNjEyZjQxNmM2NzY5NjU3
MjczVnhRSFd2YTE0XzQxNjY3MjY5NjM2MTJmNDM2ZjZlNjE2YjcyNzlWeFFIWWhhMTRfNDE2
NjcyNjk2MzYxMmY0YjYxNmQ3MDYxNmM2MVZ4UUhadGExNF80MTY2NzI2OTYzNjEyZjRkNjI2
MTYyNjE2ZTY1VnhRSUJmYTE0XzQxNjY3MjY5NjM2MTJmNGU2MTY5NzI2ZjYyNjlWeFFJQ3Jh
MTRfNDE2NjcyNjk2MzYxMmY1NDcyNjk3MDZmNmM2OVZ4UUlFZGExNF80MTZkNjU3MjY5NjM2
MTJmNDI2NTZjNjk3YTY1VnhRSUZwYTE0XzQxNmQ2NTcyNjk2MzYxMmY0MjZmNjc2Zjc0NjFW
eFFJSGJhMTRfNDE2ZDY1NzI2OTYzNjEyZjQzNjE2ZTYzNzU2ZVZ4UUlJbmExNF80MTZkNjU3
MjY5NjM2MTJmNDM2MTc5NmQ2MTZlVnhRSUp6YTE0XzQxNmQ2NTcyNjk2MzYxMmY0Mzc1Njk2
MTYyNjFWeFFJTGxhMTRfNDE2ZDY1NzI2OTYzNjEyZjQ0NjE3NzczNmY2ZVZ4UUlNeGExNF80
MTZkNjU3MjY5NjM2MTJmNDQ2NTZlNzY2NTcyVnhRSU9qYTE0XzQxNmQ2NTcyNjk2MzYxMmY0
Nzc1Nzk2MTZlNjFWeFFJUHZhMTRfNDE2ZDY1NzI2OTYzNjEyZjQ4NjE3NjYxNmU2MVZ4UUlS
aGExNF80MTZkNjU3MjY5NjM2MTJmNDk2ZTc1NzY2OTZiVnhRSVN0YTE0XzQxNmQ2NTcyNjk2
MzYxMmY0YTc1NmU2NTYxNzVWeFFJVWZhMTRfNDE2ZDY1NzI2OTYzNjEyZjRjNjE1ZjUwNjE3
YVZ4UUlWcmExNF80MTZkNjU3MjY5NjM2MTJmNGQ2MTYzNjU2OTZmVnhRSVhkYTE0XzQxNmQ2
NTcyNjk2MzYxMmY0ZDYxNmU2MTc1NzNWeFFJWXBhMTRfNDE2ZDY1NzI2OTYzNjEyZjRkNjU3
MjY5NjQ2MVZ4UUpBYmExNF80MTZkNjU3MjY5NjM2MTJmNGU2MTczNzM2MTc1VnhRSkJuYTE0
XzQxNmQ2NTcyNjk2MzYxMmY1MDYxNmU2MTZkNjFWeFFKQ3phMTRfNDE2ZDY1NzI2OTYzNjEy
ZjUyNjU2MzY5NjY2NVZ4UUpFbGExNF80MTZkNjU3MjY5NjM2MTJmNTI2NTY3Njk2ZTYxVnhR
SkZ4YTE0XzQxNzM2OTYxMmY0ODZmNmU2NzVmNGI2ZjZlNjdWeFFKSGphMTRfNDE3MzY5NjEy
ZjRhNjU3Mjc1NzM2MTZjNjU2ZFZ4UUpJdmExNF80MTczNjk2MTJmNGI2MTZkNjM2ODYxNzQ2
YjYxVnhRSktoYTE0XzQxNzM2OTYxMmY1MDZmNmU3NDY5NjE2ZTYxNmJWeFFKTHRhMTRfNDE3
MzY5NjEyZjUwNzk2ZjZlNjc3OTYxNmU2N1Z4UUpOZmExNF80MTczNjk2MTJmNTE3OTdhNzk2
YzZmNzI2NDYxVnhRSk9yYTE0XzQxNzM2OTYxMmY1MzYxNmQ2MTcyNmI2MTZlNjRWeFFKUWRh
MTRfNDE3MzY5NjEyZjUzNjk2ZTY3NjE3MDZmNzI2NVZ4UUpScGExNF80MTczNjk2MTJmNTY2
OTY1NmU3NDY5NjE2ZTY1VnhRSlRiYTE0XzQ1NzU3MjZmNzA2NTJmNDE2ZTY0NmY3MjcyNjFW
eFFKVW5hMTRfNDU3NTcyNmY3MDY1MmY1NDYxNmM2YzY5NmU2ZVZ4UUpWemExNF80NTc1NzI2
ZjcwNjUyZjU2NjE3NDY5NjM2MTZlVnhRSlhsYTE0XzQ1NzU3MjZmNzA2NTJmNTY2OTZjNmU2
OTc1NzNWeFFKWXhhMTRfNDk2ZTY0Njk2MTZlMmY0ZDYxNzk2Zjc0NzQ2NVZ4UUtBamExNF80
OTZlNjQ2OTYxNmUyZjUyNjU3NTZlNjk2ZjZlVnhRS0J2YTE0XzUwNjE2MzY5NjY2OTYzMmY0
NTYxNzM3NDY1NzJWeFFLRGhhMTRfNTA2MTYzNjk2NjY5NjMyZjRiNmY3MzcyNjE2NVZ4UUtF
dGExNF81MDYxNjM2OTY2Njk2MzJmNGQ2MTZhNzU3MjZmVnhRS0dmYTE0XzUwNjE2MzY5NjY2
OTYzMmY0ZDY5NjQ3NzYxNzlWeFFLSHJhMTRfNTA2MTYzNjk2NjY5NjMyZjRlNmY3NTZkNjU2
MVZ4UUtKZGExNF81MDYxNjM2OTY2Njk2MzJmNTA2ZjZlNjE3MDY1VnhRS0twYTE0XzUwNjE2
MzY5NjY2OTYzMmY1MzYxNjk3MDYxNmVWeFFLTWJhMTRfNTA2MTYzNjk2NjY5NjMyZjU0NjE2
ODY5NzQ2OVZ4UUtObmExNF81MDYxNjM2OTY2Njk2MzJmNTQ2MTcyNjE3NzYxVnhRS096YTE0
XzUwNjE2MzY5NjY2OTYzMmY1NzYxNmM2YzY5NzNWeFFLUWxhMTVfNDE2NjcyNjk2MzYxMmY0
MjZjNjE2ZTc0Nzk3MjY1VnhRS1J6YTE1XzQxNjY3MjY5NjM2MTJmNDQ2YTY5NjI2Zjc1NzQ2
OVZ4UUtUbmExNV80MTY2NzI2OTYzNjEyZjQ1NmM1ZjQxNjE2OTc1NmVWeFFLVmJhMTVfNDE2
NjcyNjk2MzYxMmY0NjcyNjU2NTc0NmY3NzZlVnhRS1dwYTE1XzQxNjY3MjY5NjM2MTJmNDc2
MTYyNmY3MjZmNmU2NVZ4UUtZZGExNV80MTY2NzI2OTYzNjEyZjRiNjg2MTcyNzQ2Zjc1NmRW
eFFLWnJhMTVfNDE2NjcyNjk2MzYxMmY0YjY5NmU3MzY4NjE3MzYxVnhRTEJmYTE1XzQxNjY3
MjY5NjM2MTJmNGQ2ZjZlNzI2Zjc2Njk2MVZ4UUxDdGExNV80MTY2NzI2OTYzNjEyZjRlNjQ2
YTYxNmQ2NTZlNjFWeFFMRWhhMTVfNDE2NjcyNjk2MzYxMmY1MzYxNmY1ZjU0NmY2ZDY1VnhR
TEZ2YTE1XzQxNjY3MjY5NjM2MTJmNTc2OTZlNjQ2ODZmNjU2YlZ4UUxIamExNV80MTZkNjU3
MjY5NjM2MTJmNDE2ZTc0Njk2Nzc1NjFWeFFMSXhhMTVfNDE2ZDY1NzI2OTYzNjEyZjQzNjE3
MjYxNjM2MTczVnhRTEtsYTE1XzQxNmQ2NTcyNjk2MzYxMmY0MzYxNzk2NTZlNmU2NVZ4UUxM
emExNV80MTZkNjU3MjY5NjM2MTJmNDM2ODY5NjM2MTY3NmZWeFFMTm5hMTVfNDE2ZDY1NzI2
OTYzNjEyZjQzNmY3MjY0NmY2MjYxVnhRTFBiYTE1XzQxNmQ2NTcyNjk2MzYxMmY0MzcyNjU3
Mzc0NmY2ZVZ4UUxRcGExNV80MTZkNjU3MjY5NjM2MTJmNDM3NTcyNjE2MzYxNmZWeFFMU2Rh
MTVfNDE2ZDY1NzI2OTYzNjEyZjQ0NjU3NDcyNmY2OTc0VnhRTFRyYTE1XzQxNmQ2NTcyNjk2
MzYxMmY0NzZmNjQ3NDY4NjE2MlZ4UUxWZmExNV80MTZkNjU3MjY5NjM2MTJmNDc3MjY1NmU2
MTY0NjFWeFFMV3RhMTVfNDE2ZDY1NzI2OTYzNjEyZjQ4NjE2YzY5NjY2MTc4VnhRTFloYTE1
XzQxNmQ2NTcyNjk2MzYxMmY0OTcxNjE2Yzc1Njk3NFZ4UUxadmExNV80MTZkNjU3MjY5NjM2
MTJmNGE2MTZkNjE2OTYzNjFWeFFNQmphMTVfNDE2ZDY1NzI2OTYzNjEyZjRkNjE2ZTYxNjc3
NTYxVnhRTUN4YTE1XzQxNmQ2NTcyNjk2MzYxMmY0ZDYxNzI2OTY3NmY3NFZ4UU1FbGExNV80
MTZkNjU3MjY5NjM2MTJmNGQ2NTZlNjQ2ZjdhNjFWeFFNRnphMTVfNDE2ZDY1NzI2OTYzNjEy
ZjRkNmY2ZTYzNzQ2ZjZlVnhRTUhuYTE1XzQxNmQ2NTcyNjk2MzYxMmY0ZTY5NzA2OTY3NmY2
ZVZ4UU1KYmExNV80MTZkNjU3MjY5NjM2MTJmNGU2ZjcyNmY2ZTY4NjFWeFFNS3BhMTVfNDE2
ZDY1NzI2OTYzNjEyZjRmNmE2OTZlNjE2NzYxVnhRTU1kYTE1XzQxNmQ2NTcyNjk2MzYxMmY1
MDY4NmY2NTZlNjk3OFZ4UU1OcmExNV80MTZkNjU3MjY5NjM2MTJmNTQ2OTZhNzU2MTZlNjFW
eFFNUGZhMTVfNDE2ZDY1NzI2OTYzNjEyZjU0NmY3MjZmNmU3NDZmVnhRTVF0YTE1XzQxNmQ2
NTcyNjk2MzYxMmY1NDZmNzI3NDZmNmM2MVZ4UU1TaGExNV80MTZkNjU3MjY5NjM2MTJmNTk2
MTZiNzU3NDYxNzRWeFFNVHZhMTVfNDE3MzY5NjEyZjQzNjg2ZjY5NjI2MTZjNzM2MTZlVnhR
TVZqYTE1XzQxNzM2OTYxMmY1MDY4NmU2ZjZkNWY1MDY1NmU2OFZ4UU1XeGExNV80MTc0NmM2
MTZlNzQ2OTYzMmY0MTdhNmY3MjY1NzNWeFFNWWxhMTVfNDE3NDZjNjE2ZTc0Njk2MzJmNDM2
MTZlNjE3Mjc5VnhRTVp6YTE1XzQxNzQ2YzYxNmU3NDY5NjMyZjQ2NjE2NTcyNmY2NVZ4UU5C
bmExNV80MTc1NzM3NDcyNjE2YzY5NjEyZjQ1NzU2MzZjNjFWeFFORGJhMTVfNDE3NTczNzQ3
MjYxNmM2OTYxMmY1MDY1NzI3NDY4VnhRTkVwYTE1XzQ1NzU3MjZmNzA2NTJmNDI2NTZjNjc3
MjYxNjQ2NVZ4UU5HZGExNV80NTc1NzI2ZjcwNjUyZjQyNzI3NTczNzM2NTZjNzNWeFFOSHJh
MTVfNDU3NTcyNmY3MDY1MmY0Mjc1NjQ2MTcwNjU3Mzc0VnhRTkpmYTE1XzQ1NzU3MjZmNzA2
NTJmNDI3NTczNjk2ZTY3NjU2ZVZ4UU5LdGExNV80NTc1NzI2ZjcwNjUyZjQzNjg2OTczNjk2
ZTYxNzVWeFFOTWhhMTVfNDU3NTcyNmY3MDY1MmY0Nzc1NjU3MjZlNzM2NTc5VnhRTk52YTE1
XzQ1NzU3MjZmNzA2NTJmNDg2NTZjNzM2OTZlNmI2OVZ4UU5QamExNV80NTc1NzI2ZjcwNjUy
ZjQ5NzM3NDYxNmU2Mjc1NmNWeFFOUXhhMTVfNDU3NTcyNmY3MDY1MmY1MzYxNzI2MTZhNjU3
NjZmVnhRTlNsYTE1XzQ1NzU3MjZmNzA2NTJmNTU3YTY4Njc2ZjcyNmY2NFZ4UU5UemExNV80
OTZlNjQ2OTYxNmUyZjRkNjE2YzY0Njk3NjY1NzNWeFFOVm5hMTVfNTA2MTYzNjk2NjY5NjMy
ZjQzNjg2MTc0Njg2MTZkVnhRTlhiYTE1XzUwNjE2MzY5NjY2OTYzMmY0NjYxNmI2MTZmNjY2
ZlZ4UU5ZcGExNV81MDYxNjM2OTY2Njk2MzJmNGU2ZjcyNjY2ZjZjNmJWeFFPQWRhMTZfNDE2
NjcyNjk2MzYxMmY0Mjc1NmE3NTZkNjI3NTcyNjFWeFFPQnRhMTZfNDE2NjcyNjk2MzYxMmY0
ZDZmNjc2MTY0Njk3MzY4NzVWeFFPRGphMTZfNDE2ZDY1NzI2OTYzNjEyZjQxNmU2Nzc1Njk2
YzZjNjFWeFFPRXphMTZfNDE2ZDY1NzI2OTYzNjEyZjQxNzI2Nzc1NjE2OTZlNjFWeFFPR3Bh
MTZfNDE2ZDY1NzI2OTYzNjEyZjQxNzM3NTZlNjM2OTZmNmVWeFFPSWZhMTZfNDE2ZDY1NzI2
OTYzNjEyZjQyNjE3MjYyNjE2NDZmNzNWeFFPSnZhMTZfNDE2ZDY1NzI2OTYzNjEyZjQ0NmY2
ZDY5NmU2OTYzNjFWeFFPTGxhMTZfNDE2ZDY1NzI2OTYzNjEyZjQ1NjQ2ZDZmNmU3NDZmNmVW
eFFPTmJhMTZfNDE2ZDY1NzI2OTYzNjEyZjQ1Njk3Mjc1NmU2NTcwNjVWeFFPT3JhMTZfNDE2
ZDY1NzI2OTYzNjEyZjRkNjE3YTYxNzQ2YzYxNmVWeFFPUWhhMTZfNDE2ZDY1NzI2OTYzNjEy
ZjRkNjk3MTc1NjU2YzZmNmVWeFFPUnhhMTZfNDE2ZDY1NzI2OTYzNjEyZjRkNmY2ZTc0NzI2
NTYxNmNWeFFPVG5hMTZfNDE2ZDY1NzI2OTYzNjEyZjRlNjU3NzVmNTk2ZjcyNmJWeFFPVmRh
MTZfNDE2ZDY1NzI2OTYzNjEyZjUyNjU3MzZmNmM3NTc0NjVWeFFPV3RhMTZfNDE2ZDY1NzI2
OTYzNjEyZjUzNjE2ZTc0NjE3MjY1NmRWeFFPWWphMTZfNDE2ZDY1NzI2OTYzNjEyZjUzNjE2
ZTc0Njk2MTY3NmZWeFFPWnphMTZfNDE2ZDY1NzI2OTYzNjEyZjUzNzQ1ZjRhNmY2ODZlNzNW
eFFQQnBhMTZfNDE2ZDY1NzI2OTYzNjEyZjUzNzQ1ZjRiNjk3NDc0NzNWeFFQRGZhMTZfNDE2
ZDY1NzI2OTYzNjEyZjUzNzQ1ZjRjNzU2MzY5NjFWeFFQRXZhMTZfNDE2ZDY1NzI2OTYzNjEy
ZjU3Njk2ZTZlNjk3MDY1NjdWeFFQR2xhMTZfNDE2ZTc0NjE3MjYzNzQ2OTYzNjEyZjQzNjE3
MzY1NzlWeFFQSWJhMTZfNDE2ZTc0NjE3MjYzNzQ2OTYzNjEyZjQ0NjE3NjY5NzNWeFFQSnJh
MTZfNDE2ZTc0NjE3MjYzNzQ2OTYzNjEyZjUzNzk2Zjc3NjFWeFFQTGhhMTZfNDE3MzY5NjEy
ZjRiNzI2MTczNmU2Zjc5NjE3MjczNmJWeFFQTXhhMTZfNDE3MzY5NjEyZjRlNmY3NjZmNzM2
OTYyNjk3MjczNmJWeFFQT25hMTZfNDE3MzY5NjEyZjU1NmM2MTYxNmU2MjYxNjE3NDYxNzJW
eFFQUWRhMTZfNDE3MzY5NjEyZjU2NmM2MTY0Njk3NjZmNzM3NDZmNmJWeFFQUnRhMTZfNDE3
NDZjNjE2ZTc0Njk2MzJmNDI2NTcyNmQ3NTY0NjFWeFFQVGphMTZfNDE3NDZjNjE2ZTc0Njk2
MzJmNGQ2MTY0NjU2OTcyNjFWeFFQVXphMTZfNDE3NDZjNjE2ZTc0Njk2MzJmNTM3NDYxNmU2
YzY1NzlWeFFQV3BhMTZfNDE3NTczNzQ3MjYxNmM2OTYxMmY0Mzc1NzI3MjY5NjVWeFFQWWZh
MTZfNDE3NTczNzQ3MjYxNmM2OTYxMmY0NDYxNzI3NzY5NmVWeFFQWnZhMTZfNDE3NTczNzQ3
MjYxNmM2OTYxMmY0ODZmNjI2MTcyNzRWeFFRQmxhMTZfNDE3NTczNzQ3MjYxNmM2OTYxMmY1
Mzc5NjQ2ZTY1NzlWeFFRRGJhMTZfNDU3NTcyNmY3MDY1MmY0MTZkNzM3NDY1NzI2NDYxNmRW
eFFRRXJhMTZfNDU3NTcyNmY3MDY1MmY0MTczNzQ3MjYxNmI2ODYxNmVWeFFRR2hhMTZfNDU3
NTcyNmY3MDY1MmY0Mjc1NjM2ODYxNzI2NTczNzRWeFFRSHhhMTZfNDU3NTcyNmY3MDY1MmY0
NzY5NjI3MjYxNmM3NDYxNzJWeFFRSm5hMTZfNDU3NTcyNmY3MDY1MmY0YzZhNzU2MjZjNmE2
MTZlNjFWeFFRTGRhMTZfNDU3NTcyNmY3MDY1MmY0ZDYxNzI2OTY1Njg2MTZkNmVWeFFRTXRh
MTZfNDU3NTcyNmY3MDY1MmY1MDZmNjQ2NzZmNzI2OTYzNjFWeFFRT2phMTZfNDU3NTcyNmY3
MDY1MmY1Mzc0NmY2MzZiNjg2ZjZjNmRWeFFRUHphMTZfNDU3NTcyNmY3MDY1MmY1NjZmNmM2
NzZmNjc3MjYxNjRWeFFRUnBhMTZfNDk2ZTY0Njk2MTZlMmY0MzY4NzI2OTczNzQ2ZDYxNzNW
eFFRVGZhMTZfNDk2ZTY0Njk2MTZlMmY0YjY1NzI2Nzc1NjU2YzY1NmVWeFFRVXZhMTZfNDk2
ZTY0Njk2MTZlMmY0ZDYxNzU3MjY5NzQ2OTc1NzNWeFFRV2xhMTZfNTA2MTYzNjk2NjY5NjMy
ZjQxNzU2MzZiNmM2MTZlNjRWeFFRWWJhMTZfNTA2MTYzNjk2NjY5NjMyZjQ2NzU2ZTYxNjY3
NTc0NjlWeFFRWnJhMTZfNTA2MTYzNjk2NjY5NjMyZjQ4NmY2ZTZmNmM3NTZjNzVWeFFSQmhh
MTZfNTA2MTYzNjk2NjY5NjMyZjRhNmY2ODZlNzM3NDZmNmVWeFFSQ3hhMTdfNDE2NjcyNjk2
MzYxMmY0MzYxNzM2MTYyNmM2MTZlNjM2MVZ4UVJFcGExN180MTY2NzI2OTYzNjEyZjRjNjk2
MjcyNjU3NjY5NmM2YzY1VnhRUkdoYTE3XzQxNjY3MjY5NjM2MTJmNGM3NTYyNzU2ZDYyNjE3
MzY4NjlWeFFSSHphMTdfNDE2NjcyNjk2MzYxMmY0ZTZmNzU2MTZiNjM2ODZmNzQ3NFZ4UVJK
cmExN180MTY2NzI2OTYzNjEyZjUwNmY3Mjc0NmYyZDRlNmY3NjZmVnhRUkxqYTE3XzQxNmQ2
NTcyNjk2MzYxMmY0MTZlNjM2ODZmNzI2MTY3NjVWeFFSTmJhMTdfNDE2ZDY1NzI2OTYzNjEy
ZjQxNzI2MTY3NzU2MTY5NmU2MVZ4UVJPdGExN180MTZkNjU3MjY5NjM2MTJmNDI2ZjYxNWY1
NjY5NzM3NDYxVnhRUlFsYTE3XzQxNmQ2NTcyNjk2MzYxMmY0MzYxNzQ2MTZkNjE3MjYzNjFW
eFFSU2RhMTdfNDE2ZDY1NzI2OTYzNjEyZjQzNjg2OTY4NzU2MTY4NzU2MVZ4UVJUdmExN180
MTZkNjU3MjY5NjM2MTJmNDY2ZjcyNzQ2MTZjNjU3YTYxVnhRUlZuYTE3XzQxNmQ2NTcyNjk2
MzYxMmY0NzZjNjE2MzY1NWY0MjYxNzlWeFFSWGZhMTdfNDE2ZDY1NzI2OTYzNjEyZjQ3NmY2
ZjczNjU1ZjQyNjE3OVZ4UVJZeGExN180MTZkNjU3MjY5NjM2MTJmNDc3NTYxNzQ2NTZkNjE2
YzYxVnhRU0FwYTE3XzQxNmQ2NTcyNjk2MzYxMmY0Nzc1NjE3OTYxNzE3NTY5NmNWeFFTQ2hh
MTdfNDE2ZDY1NzI2OTYzNjEyZjRkNjE3NDYxNmQ2ZjcyNmY3M1Z4UVNEemExN180MTZkNjU3
MjY5NjM2MTJmNGQ2NTZlNmY2ZDY5NmU2NTY1VnhRU0ZyYTE3XzQxNmQ2NTcyNjk2MzYxMmY0
ZDZmNmU3NDY1NzI3MjY1NzlWeFFTSGphMTdfNDE2ZDY1NzI2OTYzNjEyZjUzNjE2ZjVmNTA2
MTc1NmM2ZlZ4UVNKYmExN180MTZkNjU3MjY5NjM2MTJmNTM3NDVmNTQ2ODZmNmQ2MTczVnhR
U0t0YTE3XzQxNmQ2NTcyNjk2MzYxMmY1NjYxNmU2MzZmNzU3NjY1NzJWeFFTTWxhMTdfNDE2
ZTc0NjE3MjYzNzQ2OTYzNjEyZjRkNjE3NzczNmY2ZVZ4UVNPZGExN180MTZlNzQ2MTcyNjM3
NDY5NjM2MTJmNTA2MTZjNmQ2NTcyVnhRU1B2YTE3XzQxNmU3NDYxNzI2Mzc0Njk2MzYxMmY1
NjZmNzM3NDZmNmJWeFFTUm5hMTdfNDE3MzY5NjEyZjRiNzU2MTZjNjE1ZjRjNzU2ZDcwNzU3
MlZ4UVNUZmExN180MTczNjk2MTJmNGU2Zjc2NmY2Yjc1N2E2ZTY1NzQ3MzZiVnhRU1V4YTE3
XzQ1NzU3MjZmNzA2NTJmNDI3MjYxNzQ2OTczNmM2MTc2NjFWeFFTV3BhMTdfNDU3NTcyNmY3
MDY1MmY0MzZmNzA2NTZlNjg2MTY3NjU2ZVZ4UVNZaGExN180NTc1NzI2ZjcwNjUyZjRjNzU3
ODY1NmQ2MjZmNzU3MjY3VnhRU1p6YTE3XzQ1NzU3MjZmNzA2NTJmNTM2MTZlNWY0ZDYxNzI2
OTZlNmZWeFFUQnJhMTdfNDU3NTcyNmY3MDY1MmY1MzY5NmQ2NjY1NzI2ZjcwNmY2Y1Z4UVRE
amExN180NTc1NzI2ZjcwNjUyZjVhNjE3MDZmNzI2ZjdhNjg3OTY1VnhRVEZiYTE3XzUwNjE2
MzY5NjY2OTYzMmY0NTZlNjQ2NTcyNjI3NTcyNzlWeFFUR3RhMTdfNTA2MTYzNjk2NjY5NjMy
ZjQ3NjE2YzYxNzA2MTY3NmY3M1Z4UVRJbGExN181MDYxNjM2OTY2Njk2MzJmNGI3NzYxNmE2
MTZjNjU2OTZlVnhRVEtkYTE3XzUwNjE2MzY5NjY2OTYzMmY0ZDYxNzI3MTc1NjU3MzYxNzNW
eFFUTHZhMTdfNTA2MTYzNjk2NjY5NjMyZjUwNjE2NzZmNWY1MDYxNjc2ZlZ4UVRObmExN181
MDYxNjM2OTY2Njk2MzJmNTI2MTcyNmY3NDZmNmU2NzYxVnhRVFBmYTE3XzUwNjE2MzY5NjY2
OTYzMmY1NDZmNmU2NzYxNzQ2MTcwNzVWeFFUUXhhMThfNDE2NjcyNjk2MzYxMmY0MTY0NjQ2
OTczNWY0MTYyNjE2MjYxVnhRVFNyYTE4XzQxNjY3MjY5NjM2MTJmNDI3MjYxN2E3YTYxNzY2
OTZjNmM2NVZ4UVRVbGExOF80MTY2NzI2OTYzNjEyZjRmNzU2MTY3NjE2NDZmNzU2NzZmNzVW
eFFUV2ZhMThfNDE2ZDY1NzI2OTYzNjEyZjQzNmY3Mzc0NjE1ZjUyNjk2MzYxVnhRVFh6YTE4
XzQxNmQ2NTcyNjk2MzYxMmY0NzcyNjE2ZTY0NWY1NDc1NzI2YlZ4UVRadGExOF80MTZkNjU3
MjY5NjM2MTJmNDc3NTYxNjQ2NTZjNmY3NTcwNjVWeFFVQm5hMThfNDE2ZDY1NzI2OTYzNjEy
ZjQ4NjU3MjZkNmY3MzY5NmM2YzZmVnhRVURoYTE4XzQxNmQ2NTcyNjk2MzYxMmY0YjcyNjE2
YzY1NmU2NDY5NmE2YlZ4UVVGYmExOF80MTZkNjU3MjY5NjM2MTJmNGM2Zjc1Njk3Mzc2Njk2
YzZjNjVWeFFVR3ZhMThfNDE2ZDY1NzI2OTYzNjEyZjRkNjE3Mjc0Njk2ZTY5NzE3NTY1VnhR
VUlwYTE4XzQxNmQ2NTcyNjk2MzYxMmY0ZDZmNmU3NDY1NzY2OTY0NjU2ZlZ4UVVLamExOF80
MTZkNjU3MjY5NjM2MTJmNGQ2ZjZlNzQ3MzY1NzI3MjYxNzRWeFFVTWRhMThfNDE2ZDY1NzI2
OTYzNjEyZjUwNjE3MjYxNmQ2MTcyNjk2MjZmVnhRVU54YTE4XzQxNmQ2NTcyNjk2MzYxMmY1
MjY5NmY1ZjQyNzI2MTZlNjM2ZlZ4UVVQcmExOF80MTZkNjU3MjY5NjM2MTJmNTM3NDVmNTY2
OTZlNjM2NTZlNzRWeFFVUmxhMThfNDE2ZDY1NzI2OTYzNjEyZjU3Njg2OTc0NjU2ODZmNzI3
MzY1VnhRVVRmYTE4XzQxNmU3NDYxNzI2Mzc0Njk2MzYxMmY0ZDYzNGQ3NTcyNjQ2ZlZ4UVVV
emExOF80MTZlNzQ2MTcyNjM3NDY5NjM2MTJmNTI2Zjc0Njg2NTcyNjFWeFFVV3RhMThfNDE3
MzY5NjEyZjUzNzI2NTY0NmU2NTZiNmY2Yzc5NmQ3MzZiVnhRVVluYTE4XzQxNzM2OTYxMmY1
OTY1NmI2MTc0NjU3MjY5NmU2Mjc1NzI2N1Z4UVZBaGExOF80MTc0NmM2MTZlNzQ2OTYzMmY1
MjY1Nzk2YjZhNjE3NjY5NmJWeFFWQ2JhMThfNDE3NDZjNjE2ZTc0Njk2MzJmNTM3NDVmNDg2
NTZjNjU2ZTYxVnhRVkR2YTE4XzQxNzU3Mzc0NzI2MTZjNjk2MTJmNDE2NDY1NmM2MTY5NjQ2
NVZ4UVZGcGExOF80MTc1NzM3NDcyNjE2YzY5NjEyZjQyNzI2OTczNjI2MTZlNjVWeFFWSGph
MThfNDE3NTczNzQ3MjYxNmM2OTYxMmY0YzY5NmU2NDY1NmQ2MTZlVnhRVkpkYTE4XzQ1NzU3
MjZmNzA2NTJmNDk3MzZjNjU1ZjZmNjY1ZjRkNjE2ZVZ4UVZLeGExOF80NTc1NzI2ZjcwNjUy
ZjRiNjE2YzY5NmU2OTZlNjc3MjYxNjRWeFFWTXJhMThfNTA2MTYzNjk2NjY5NjMyZjRiNjk3
MjY5NzQ2OTZkNjE3NDY5VnhRVk9sYTE5XzQxNjY3MjY5NjM2MTJmNGE2ZjY4NjE2ZTZlNjU3
MzYyNzU3MjY3VnhRVlFoYTE5XzQxNmQ2NTcyNjk2MzYxMmY0NTZjNWY1MzYxNmM3NjYxNjQ2
ZjcyVnhRVlNkYTE5XzQxNmQ2NTcyNjk2MzYxMmY0YzZmNzM1ZjQxNmU2NzY1NmM2NTczVnhR
VlR6YTE5XzQxNmQ2NTcyNjk2MzYxMmY0ZDY1Nzg2OTYzNmY1ZjQzNjk3NDc5VnhRVlZ2YTE5
XzQxNmQ2NTcyNjk2MzYxMmY1MDYxNmU2NzZlNjk3Mjc0NzU2ZTY3VnhRVlhyYTE5XzQxNmQ2
NTcyNjk2MzYxMmY1MDZmNzI3NDZmNWY1NjY1NmM2ODZmVnhRVlpuYTE5XzQxNmQ2NTcyNjk2
MzYxMmY1MDc1NjU3Mjc0NmY1ZjUyNjk2MzZmVnhRV0JqYTE5XzQxNmQ2NTcyNjk2MzYxMmY1
MjYxNjk2ZTc5NWY1MjY5NzY2NTcyVnhRV0RmYTE5XzQxNmQ2NTcyNjk2MzYxMmY1NDY1Njc3
NTYzNjk2NzYxNmM3MDYxVnhRV0ZiYTE5XzQxNmQ2NTcyNjk2MzYxMmY1NDY4NzU2ZTY0NjU3
MjVmNDI2MTc5VnhRV0d4YTE5XzQxNmQ2NTcyNjk2MzYxMmY1OTY1NmM2YzZmNzc2YjZlNjk2
NjY1VnhRV0l0YTE5XzQxNzI2Mzc0Njk2MzJmNGM2ZjZlNjc3OTY1NjE3MjYyNzk2NTZlVnhR
V0twYTE5XzQxNzQ2YzYxNmU3NDY5NjMyZjQzNjE3MDY1NWY1NjY1NzI2NDY1VnhRV01sYTE5
XzQxNzU3Mzc0NzI2MTZjNjk2MTJmNGM2ZjcyNjQ1ZjQ4NmY3NzY1VnhRV09oYTE5XzQxNzU3
Mzc0NzI2MTZjNjk2MTJmNGQ2NTZjNjI2Zjc1NzI2ZTY1VnhRV1FkYTE5XzQ5NmU2NDY5NjE2
ZTJmNDE2ZTc0NjE2ZTYxNmU2MTcyNjk3NjZmVnhRV1J6YTE5XzUwNjE2MzY5NjY2OTYzMmY0
Nzc1NjE2NDYxNmM2MzYxNmU2MTZjVnhRV1R2YTIwXzQxNjY3MjY5NjM2MTJmNDQ2MTcyNWY2
NTczNWY1MzYxNmM2MTYxNmRWeFFXVnRhMjBfNDE2ZDY1NzI2OTYzNjEyZjQyNmM2MTZlNjMy
ZDUzNjE2MjZjNmY2ZVZ4UVdYcmEyMF80MTZkNjU3MjY5NjM2MTJmNDI3NTY1NmU2ZjczNWY0
MTY5NzI2NTczVnhRV1pwYTIwXzQxNmQ2NTcyNjk2MzYxMmY0MzYxNmQ3MDZmNWY0NzcyNjE2
ZTY0NjVWeFFYQm5hMjBfNDE2ZDY1NzI2OTYzNjEyZjQ0NjE2ZTZkNjE3MjZiNzM2ODYxNzY2
ZVZ4UVhEbGEyMF80MTZkNjU3MjY5NjM2MTJmNDQ2MTc3NzM2ZjZlNWY0MzcyNjU2NTZiVnhR
WEZqYTIwXzQxNmQ2NTcyNjk2MzYxMmY0OTZlNjQ2OTYxNmU2MTJmNGI2ZTZmNzhWeFFYSGhh
MjBfNDE2ZDY1NzI2OTYzNjEyZjQ5NmU2NDY5NjE2ZTYxNzA2ZjZjNjk3M1Z4UVhKZmEyMF80
MTZkNjU3MjY5NjM2MTJmNTI2MTZlNmI2OTZlNWY0OTZlNmM2NTc0VnhRWExkYTIwXzQxNmQ2
NTcyNjk2MzYxMmY1MzYxNmU3NDYxNWY0OTczNjE2MjY1NmNWeFFYTmJhMjBfNDE2ZDY1NzI2
OTYzNjEyZjUzNjM2ZjcyNjU3MzYyNzk3Mzc1NmU2NFZ4UVhPemEyMF80MTZlNzQ2MTcyNjM3
NDY5NjM2MTJmNGQ2MTYzNzE3NTYxNzI2OTY1VnhRWFF4YTIwXzUwNjE2MzY5NjY2OTYzMmY0
MjZmNzU2NzYxNjk2ZTc2Njk2YzZjNjVWeFFYU3ZhMjBfNTA2MTYzNjk2NjY5NjMyZjUwNmY3
Mjc0NWY0ZDZmNzI2NTczNjI3OVZ4UVhVdGEyMV80MTZkNjU3MjY5NjM2MTJmNDM2MTZkNjI3
MjY5NjQ2NzY1NWY0MjYxNzlWeFFYV3RhMjFfNDE2ZDY1NzI2OTYzNjEyZjQzNmY3MjYxNmM1
ZjQ4NjE3MjYyNmY3NTcyVnhRWFl0YTIxXzQxNmQ2NTcyNjk2MzYxMmY0OTZlNjQ2OTYxNmU2
MTJmNTY2NTc2NjE3OVZ4UVlBdGEyMV80MTZkNjU3MjY5NjM2MTJmNGM2Zjc3NjU3MjVmNTA3
MjY5NmU2MzY1NzNWeFFZQ3RhMjFfNDE2ZDY1NzI2OTYzNjEyZjUwNmY3Mjc0NWY2ZjY2NWY1
MzcwNjE2OTZlVnhRWUV0YTIxXzQxNmQ2NTcyNjk2MzYxMmY1MzYxNmU3NDZmNWY0NDZmNmQ2
OTZlNjc2ZlZ4UVlHdGEyMV80MTZkNjU3MjY5NjM2MTJmNTM3NDVmNDI2MTcyNzQ2ODY1NmM2
NTZkNzlWeFFZSXRhMjFfNDE2ZDY1NzI2OTYzNjEyZjUzNzc2OTY2NzQ1ZjQzNzU3MjcyNjU2
ZTc0VnhRWUt0YTIxXzQxNzU3Mzc0NzI2MTZjNjk2MTJmNDI3MjZmNmI2NTZlNWY0ODY5NmM2
Y1Z4UVlNdGEyMl80MTZkNjU3MjY5NjM2MTJmNDI2MTY4Njk2MTVmNDI2MTZlNjQ2NTcyNjE3
M1Z4UVlPdmEyMl80MTZkNjU3MjY5NjM2MTJmNTA2ZjcyNzQyZDYxNzUyZDUwNzI2OTZlNjM2
NVZ4UVlReGEyMl80MTc0NmM2MTZlNzQ2OTYzMmY1MzZmNzU3NDY4NWY0NzY1NmY3MjY3Njk2
MVZ4UVlTemEyM180MTZkNjU3MjY5NjM2MTJmNDE3MjY3NjU2ZTc0Njk2ZTYxMmY1MzYxNmM3
NDYxVnhRWVZkYTIzXzQxNmQ2NTcyNjk2MzYxMmY0OTZlNjQ2OTYxNmU2MTJmNGQ2MTcyNjU2
ZTY3NmZWeFFZWGhhMjNfNDE2ZDY1NzI2OTYzNjEyZjQ5NmU2NDY5NjE2ZTYxMmY1NzY5NmU2
MTZkNjE2M1Z4UVlabGEyNV80MTZkNjU3MjY5NjM2MTJmNDE3MjY3NjU2ZTc0Njk2ZTYxMmY1
NDc1NjM3NTZkNjE2ZVZ4UVpCdGEyNV80MTZkNjU3MjY5NjM2MTJmNDE3MjY3NjU2ZTc0Njk2
ZTYxMmY1NTczNjg3NTYxNjk2MVZ4UVpFYmEyNV80MTZkNjU3MjY5NjM2MTJmNDk2ZTY0Njk2
MTZlNjEyZjU0NjU2YzZjNWY0MzY5NzQ3OVZ4UVpHamEyNV80MTZkNjU3MjY5NjM2MTJmNDk2
ZTY0Njk2MTZlNjEyZjU2Njk2ZTYzNjU2ZTZlNjU3M1Z4UVpJcmEyNV80MTZlNzQ2MTcyNjM3
NDY5NjM2MTJmNDQ3NTZkNmY2ZTc0NDQ1NTcyNzY2OTZjNmM2NVZ4UVpLemEyNl80MTZkNjU3
MjY5NjM2MTJmNDE3MjY3NjU2ZTc0Njk2ZTYxMmY0YzYxNWY1MjY5NmY2YTYxVnhRWk5qYTI2
XzQxNmQ2NTcyNjk2MzYxMmY0MTcyNjc2NTZlNzQ2OTZlNjEyZjUzNjE2ZTVmNGE3NTYxNmVW
eFFaUHRhMjZfNDE2ZDY1NzI2OTYzNjEyZjQxNzI2NzY1NmU3NDY5NmU2MTJmNTM2MTZlNWY0
Yzc1Njk3M1Z4UVpTZGEyNl80MTZkNjU3MjY5NjM2MTJmNDk2ZTY0Njk2MTZlNjEyZjUwNjU3
NDY1NzI3MzYyNzU3MjY3VnhRWlVuYTI3XzQxNmQ2NTcyNjk2MzYxMmY0YjY1NmU3NDc1NjM2
Yjc5MmY0ZDZmNmU3NDY5NjM2NTZjNmM2ZlZ4UVpXemEyN180MTZkNjU3MjY5NjM2MTJmNGU2
ZjcyNzQ2ODVmNDQ2MTZiNmY3NDYxMmY0MjY1NzU2YzYxNjhWeFFaWmxhMjdfNDE2ZDY1NzI2
OTYzNjEyZjRlNmY3Mjc0Njg1ZjQ0NjE2YjZmNzQ2MTJmNDM2NTZlNzQ2NTcyVnhRQkFCeGEz
MF80MTZkNjU3MjY5NjM2MTJmNDE3MjY3NjU2ZTc0Njk2ZTYxMmY1MjY5NmY1ZjQ3NjE2YzZj
NjU2NzZmNzNWeFFCQUVxYTMwXzQxNmQ2NTcyNjk2MzYxMmY0ZTZmNzI3NDY4NWY0NDYxNmI2
Zjc0NjEyZjRlNjU3NzVmNTM2MTZjNjU2ZFpRQkFId0ZOYU5iTmlOZk14UUJBSHlaaSANCg0K
DQpUaGUgZmlyc3QgdGltZSBJIGVuY291bnRlcmVkIHRoaXMgc3ltYm9sIGluIHBob2JvcyBJ
IHRob3VnaDogV1RGPyBUaGVuIEkgDQp0cmllZCB0byBkZW1hbmdsZSBpdDoNCmNvcmUuZXhj
ZXB0aW9uLlJhbmdlRXJyb3JAc3JjXGNvcmVcZGVtYW5nbGUuZCgyMzApOiBSYW5nZSB2aW9s
YXRpb24NCg0KSSB3YXMgdGhlbiBxdWlja2x5IGluZm9ybWVkIGJ5IFJhaW5lciBTY2hldXR6
ZSB3aGF0IHRoZSBjb3JyZWN0IA0KZGVtYW5nbGluZyBmb3IgdGhpcyBzeW1ib2xzIGlzOg0K
DQpwdXJlIG5vdGhyb3cgQG5vZ2MgQHNhZmUgaW50IG9iamVjdC5fX3N3aXRjaCEoaW1tdXRh
YmxlKGNoYXIpLCANCiJDU1Q2Q0RUIiwgIkVTVDVFRFQiLCAiRXRjL0dNVCIsICJNU1Q3TURU
IiwgIlBTVDhQRFQiLCAiQXNpYS9BZGVuIiwgDQoiQXNpYS9CYWt1IiwgIkFzaWEvRGlsaSIs
ICJBc2lhL0hvdmQiLCAiQXNpYS9PbXNrIiwgIkFzaWEvT3JhbCIsIA0KIkV0Yy9HTVQrMSIs
ICJFdGMvR01UKzIiLCAiRXRjL0dNVCszIiwgIkV0Yy9HTVQrNCIsICJFdGMvR01UKzUiLCAN
CiJFdGMvR01UKzYiLCAiRXRjL0dNVCs3IiwgIkV0Yy9HTVQrOCIsICJFdGMvR01UKzkiLCAi
RXRjL0dNVC0xIiwgDQoiRXRjL0dNVC0yIiwgIkV0Yy9HTVQtMyIsICJFdGMvR01ULTQiLCAi
RXRjL0dNVC01IiwgIkV0Yy9HTVQtNiIsIA0KIkV0Yy9HTVQtNyIsICJFdGMvR01ULTgiLCAi
RXRjL0dNVC05IiwgIkFzaWEvQW1tYW4iLCAiQXNpYS9BcXRhdSIsIA0KIkFzaWEvQ2hpdGEi
LCAiQXNpYS9EaGFrYSIsICJBc2lhL0R1YmFpIiwgIkFzaWEvS2FidWwiLCAiQXNpYS9NYWNh
dSIsIA0KIkFzaWEvUWF0YXIiLCAiQXNpYS9TZW91bCIsICJBc2lhL1Rva3lvIiwgIkFzaWEv
VG9tc2siLCAiRXRjL0dNVCsxMCIsIA0KIkV0Yy9HTVQrMTEiLCAiRXRjL0dNVCsxMiIsICJF
dGMvR01ULTEwIiwgIkV0Yy9HTVQtMTEiLCAiRXRjL0dNVC0xMiIsIA0KIkV0Yy9HTVQtMTMi
LCAiRXRjL0dNVC0xNCIsICJBZnJpY2EvSnViYSIsICJBZnJpY2EvTG9tZSIsICJBc2lhL0Fs
bWF0eSIsIA0KIkFzaWEvQW5hZHlyIiwgIkFzaWEvQXF0b2JlIiwgIkFzaWEvQmVpcnV0Iiwg
IkFzaWEvQnJ1bmVpIiwgDQoiQXNpYS9IZWJyb24iLCAiQXNpYS9LdXdhaXQiLCAiQXNpYS9N
YW5pbGEiLCAiQXNpYS9NdXNjYXQiLCANCiJBc2lhL1JpeWFkaCIsICJBc2lhL1NhaWdvbiIs
ICJBc2lhL1RhaXBlaSIsICJBc2lhL1RlaHJhbiIsIA0KIkFzaWEvVXJ1bXFpIiwgIkV1cm9w
ZS9LaWV2IiwgIkV1cm9wZS9Pc2xvIiwgIkV1cm9wZS9SaWdhIiwgDQoiRXVyb3BlL1JvbWUi
LCAiSW5kaWFuL01haGUiLCAiQWZyaWNhL0FjY3JhIiwgIkFmcmljYS9DYWlybyIsIA0KIkFm
cmljYS9DZXV0YSIsICJBZnJpY2EvRGFrYXIiLCAiQWZyaWNhL0xhZ29zIiwgIkFmcmljYS9U
dW5pcyIsIA0KIkFtZXJpY2EvQWRhayIsICJBbWVyaWNhL0xpbWEiLCAiQW1lcmljYS9Ob21l
IiwgIkFzaWEvQmFnaGRhZCIsIA0KIkFzaWEvQmFocmFpbiIsICJBc2lhL0Jhbmdrb2siLCAi
QXNpYS9CYXJuYXVsIiwgIkFzaWEvQmlzaGtlayIsIA0KIkFzaWEvQ29sb21ibyIsICJBc2lh
L0lya3V0c2siLCAiQXNpYS9KYWthcnRhIiwgIkFzaWEvS2FyYWNoaSIsIA0KIkFzaWEvS3Vj
aGluZyIsICJBc2lhL01hZ2FkYW4iLCAiQXNpYS9OaWNvc2lhIiwgIkFzaWEvUmFuZ29vbiIs
IA0KIkFzaWEvVGJpbGlzaSIsICJBc2lhL1RoaW1waHUiLCAiQXNpYS9ZYWt1dHNrIiwgIkFz
aWEvWWVyZXZhbiIsIA0KIkV1cm9wZS9NYWx0YSIsICJFdXJvcGUvTWluc2siLCAiRXVyb3Bl
L1BhcmlzIiwgIkV1cm9wZS9Tb2ZpYSIsIA0KIkV1cm9wZS9WYWR1eiIsICJJbmRpYW4vQ29j
b3MiLCAiUGFjaWZpYy9BcGlhIiwgIlBhY2lmaWMvRmlqaSIsIA0KIlBhY2lmaWMvR3VhbSIs
ICJQYWNpZmljL05pdWUiLCAiUGFjaWZpYy9UcnVrIiwgIlBhY2lmaWMvV2FrZSIsIA0KIkFm
cmljYS9Bc21lcmEiLCAiQWZyaWNhL0JhbWFrbyIsICJBZnJpY2EvQmFuZ3VpIiwgIkFmcmlj
YS9CYW5qdWwiLCANCiJBZnJpY2EvQmlzc2F1IiwgIkFmcmljYS9Eb3VhbGEiLCAiQWZyaWNh
L0hhcmFyZSIsICJBZnJpY2EvS2lnYWxpIiwgDQoiQWZyaWNhL0x1YW5kYSIsICJBZnJpY2Ev
THVzYWthIiwgIkFmcmljYS9NYWxhYm8iLCAiQWZyaWNhL01hcHV0byIsIA0KIkFmcmljYS9N
YXNlcnUiLCAiQWZyaWNhL05pYW1leSIsICJBbWVyaWNhL0FydWJhIiwgIkFtZXJpY2EvQmFo
aWEiLCANCiJBbWVyaWNhL0JlbGVtIiwgIkFtZXJpY2EvQm9pc2UiLCAiQW1lcmljYS9KdWp1
eSIsICJBbWVyaWNhL1NpdGthIiwgDQoiQW1lcmljYS9UaHVsZSIsICJBc2lhL0FzaGdhYmF0
IiwgIkFzaWEvQ2FsY3V0dGEiLCAiQXNpYS9EYW1hc2N1cyIsIA0KIkFzaWEvRHVzaGFuYmUi
LCAiQXNpYS9KYXlhcHVyYSIsICJBc2lhL0thdG1hbmR1IiwgIkFzaWEvS2hhbmR5Z2EiLCAN
CiJBc2lhL01ha2Fzc2FyIiwgIkFzaWEvU2FraGFsaW4iLCAiQXNpYS9TaGFuZ2hhaSIsICJB
c2lhL1Rhc2hrZW50IiwgDQoiQXNpYS9Vc3QtTmVyYSIsICJFdXJvcGUvQXRoZW5zIiwgIkV1
cm9wZS9CZXJsaW4iLCAiRXVyb3BlL0R1YmxpbiIsIA0KIkV1cm9wZS9KZXJzZXkiLCAiRXVy
b3BlL0xpc2JvbiIsICJFdXJvcGUvTG9uZG9uIiwgIkV1cm9wZS9NYWRyaWQiLCANCiJFdXJv
cGUvTW9uYWNvIiwgIkV1cm9wZS9Nb3Njb3ciLCAiRXVyb3BlL1ByYWd1ZSIsICJFdXJvcGUv
U2FtYXJhIiwgDQoiRXVyb3BlL1Nrb3BqZSIsICJFdXJvcGUvVGlyYW5lIiwgIkV1cm9wZS9W
aWVubmEiLCAiRXVyb3BlL1dhcnNhdyIsIA0KIkV1cm9wZS9aYWdyZWIiLCAiRXVyb3BlL1p1
cmljaCIsICJJbmRpYW4vQ2hhZ29zIiwgIkluZGlhbi9Db21vcm8iLCANCiJQYWNpZmljL0Vm
YXRlIiwgIlBhY2lmaWMvTmF1cnUiLCAiUGFjaWZpYy9QYWxhdSIsICJBZnJpY2EvQWJpZGph
biIsIA0KIkFmcmljYS9BbGdpZXJzIiwgIkFmcmljYS9Db25ha3J5IiwgIkFmcmljYS9LYW1w
YWxhIiwgIkFmcmljYS9NYmFiYW5lIiwgDQoiQWZyaWNhL05haXJvYmkiLCAiQWZyaWNhL1Ry
aXBvbGkiLCAiQW1lcmljYS9CZWxpemUiLCAiQW1lcmljYS9Cb2dvdGEiLCANCiJBbWVyaWNh
L0NhbmN1biIsICJBbWVyaWNhL0NheW1hbiIsICJBbWVyaWNhL0N1aWFiYSIsICJBbWVyaWNh
L0Rhd3NvbiIsIA0KIkFtZXJpY2EvRGVudmVyIiwgIkFtZXJpY2EvR3V5YW5hIiwgIkFtZXJp
Y2EvSGF2YW5hIiwgIkFtZXJpY2EvSW51dmlrIiwgDQoiQW1lcmljYS9KdW5lYXUiLCAiQW1l
cmljYS9MYV9QYXoiLCAiQW1lcmljYS9NYWNlaW8iLCAiQW1lcmljYS9NYW5hdXMiLCANCiJB
bWVyaWNhL01lcmlkYSIsICJBbWVyaWNhL05hc3NhdSIsICJBbWVyaWNhL1BhbmFtYSIsICJB
bWVyaWNhL1JlY2lmZSIsIA0KIkFtZXJpY2EvUmVnaW5hIiwgIkFzaWEvSG9uZ19Lb25nIiwg
IkFzaWEvSmVydXNhbGVtIiwgIkFzaWEvS2FtY2hhdGthIiwgDQoiQXNpYS9Qb250aWFuYWsi
LCAiQXNpYS9QeW9uZ3lhbmciLCAiQXNpYS9ReXp5bG9yZGEiLCAiQXNpYS9TYW1hcmthbmQi
LCANCiJBc2lhL1NpbmdhcG9yZSIsICJBc2lhL1ZpZW50aWFuZSIsICJFdXJvcGUvQW5kb3Jy
YSIsICJFdXJvcGUvVGFsbGlubiIsIA0KIkV1cm9wZS9WYXRpY2FuIiwgIkV1cm9wZS9WaWxu
aXVzIiwgIkluZGlhbi9NYXlvdHRlIiwgIkluZGlhbi9SZXVuaW9uIiwgDQoiUGFjaWZpYy9F
YXN0ZXIiLCAiUGFjaWZpYy9Lb3NyYWUiLCAiUGFjaWZpYy9NYWp1cm8iLCAiUGFjaWZpYy9N
aWR3YXkiLCANCiJQYWNpZmljL05vdW1lYSIsICJQYWNpZmljL1BvbmFwZSIsICJQYWNpZmlj
L1NhaXBhbiIsICJQYWNpZmljL1RhaGl0aSIsIA0KIlBhY2lmaWMvVGFyYXdhIiwgIlBhY2lm
aWMvV2FsbGlzIiwgIkFmcmljYS9CbGFudHlyZSIsIA0KIkFmcmljYS9Eamlib3V0aSIsICJB
ZnJpY2EvRWxfQWFpdW4iLCAiQWZyaWNhL0ZyZWV0b3duIiwgDQoiQWZyaWNhL0dhYm9yb25l
IiwgIkFmcmljYS9LaGFydG91bSIsICJBZnJpY2EvS2luc2hhc2EiLCANCiJBZnJpY2EvTW9u
cm92aWEiLCAiQWZyaWNhL05kamFtZW5hIiwgIkFmcmljYS9TYW9fVG9tZSIsIA0KIkFmcmlj
YS9XaW5kaG9layIsICJBbWVyaWNhL0FudGlndWEiLCAiQW1lcmljYS9DYXJhY2FzIiwgDQoi
QW1lcmljYS9DYXllbm5lIiwgIkFtZXJpY2EvQ2hpY2FnbyIsICJBbWVyaWNhL0NvcmRvYmEi
LCANCiJBbWVyaWNhL0NyZXN0b24iLCAiQW1lcmljYS9DdXJhY2FvIiwgIkFtZXJpY2EvRGV0
cm9pdCIsIA0KIkFtZXJpY2EvR29kdGhhYiIsICJBbWVyaWNhL0dyZW5hZGEiLCAiQW1lcmlj
YS9IYWxpZmF4IiwgDQoiQW1lcmljYS9JcWFsdWl0IiwgIkFtZXJpY2EvSmFtYWljYSIsICJB
bWVyaWNhL01hbmFndWEiLCANCiJBbWVyaWNhL01hcmlnb3QiLCAiQW1lcmljYS9NZW5kb3ph
IiwgIkFtZXJpY2EvTW9uY3RvbiIsIA0KIkFtZXJpY2EvTmlwaWdvbiIsICJBbWVyaWNhL05v
cm9uaGEiLCAiQW1lcmljYS9PamluYWdhIiwgDQoiQW1lcmljYS9QaG9lbml4IiwgIkFtZXJp
Y2EvVGlqdWFuYSIsICJBbWVyaWNhL1Rvcm9udG8iLCANCiJBbWVyaWNhL1RvcnRvbGEiLCAi
QW1lcmljYS9ZYWt1dGF0IiwgIkFzaWEvQ2hvaWJhbHNhbiIsIA0KIkFzaWEvUGhub21fUGVu
aCIsICJBdGxhbnRpYy9Bem9yZXMiLCAiQXRsYW50aWMvQ2FuYXJ5IiwgDQoiQXRsYW50aWMv
RmFlcm9lIiwgIkF1c3RyYWxpYS9FdWNsYSIsICJBdXN0cmFsaWEvUGVydGgiLCANCiJFdXJv
cGUvQmVsZ3JhZGUiLCAiRXVyb3BlL0JydXNzZWxzIiwgIkV1cm9wZS9CdWRhcGVzdCIsIA0K
IkV1cm9wZS9CdXNpbmdlbiIsICJFdXJvcGUvQ2hpc2luYXUiLCAiRXVyb3BlL0d1ZXJuc2V5
IiwgDQoiRXVyb3BlL0hlbHNpbmtpIiwgIkV1cm9wZS9Jc3RhbmJ1bCIsICJFdXJvcGUvU2Fy
YWpldm8iLCANCiJFdXJvcGUvVXpoZ29yb2QiLCAiSW5kaWFuL01hbGRpdmVzIiwgIlBhY2lm
aWMvQ2hhdGhhbSIsIA0KIlBhY2lmaWMvRmFrYW9mbyIsICJQYWNpZmljL05vcmZvbGsiLCAi
QWZyaWNhL0J1anVtYnVyYSIsIA0KIkFmcmljYS9Nb2dhZGlzaHUiLCAiQW1lcmljYS9Bbmd1
aWxsYSIsICJBbWVyaWNhL0FyZ3VhaW5hIiwgDQoiQW1lcmljYS9Bc3VuY2lvbiIsICJBbWVy
aWNhL0JhcmJhZG9zIiwgIkFtZXJpY2EvRG9taW5pY2EiLCANCiJBbWVyaWNhL0VkbW9udG9u
IiwgIkFtZXJpY2EvRWlydW5lcGUiLCAiQW1lcmljYS9NYXphdGxhbiIsIA0KIkFtZXJpY2Ev
TWlxdWVsb24iLCAiQW1lcmljYS9Nb250cmVhbCIsICJBbWVyaWNhL05ld19Zb3JrIiwgDQoi
QW1lcmljYS9SZXNvbHV0ZSIsICJBbWVyaWNhL1NhbnRhcmVtIiwgIkFtZXJpY2EvU2FudGlh
Z28iLCANCiJBbWVyaWNhL1N0X0pvaG5zIiwgIkFtZXJpY2EvU3RfS2l0dHMiLCAiQW1lcmlj
YS9TdF9MdWNpYSIsIA0KIkFtZXJpY2EvV2lubmlwZWciLCAiQW50YXJjdGljYS9DYXNleSIs
ICJBbnRhcmN0aWNhL0RhdmlzIiwgDQoiQW50YXJjdGljYS9TeW93YSIsICJBc2lhL0tyYXNu
b3lhcnNrIiwgIkFzaWEvTm92b3NpYmlyc2siLCANCiJBc2lhL1VsYWFuYmFhdGFyIiwgIkFz
aWEvVmxhZGl2b3N0b2siLCAiQXRsYW50aWMvQmVybXVkYSIsIA0KIkF0bGFudGljL01hZGVp
cmEiLCAiQXRsYW50aWMvU3RhbmxleSIsICJBdXN0cmFsaWEvQ3VycmllIiwgDQoiQXVzdHJh
bGlhL0RhcndpbiIsICJBdXN0cmFsaWEvSG9iYXJ0IiwgIkF1c3RyYWxpYS9TeWRuZXkiLCAN
CiJFdXJvcGUvQW1zdGVyZGFtIiwgIkV1cm9wZS9Bc3RyYWtoYW4iLCAiRXVyb3BlL0J1Y2hh
cmVzdCIsIA0KIkV1cm9wZS9HaWJyYWx0YXIiLCAiRXVyb3BlL0xqdWJsamFuYSIsICJFdXJv
cGUvTWFyaWVoYW1uIiwgDQoiRXVyb3BlL1BvZGdvcmljYSIsICJFdXJvcGUvU3RvY2tob2xt
IiwgIkV1cm9wZS9Wb2xnb2dyYWQiLCANCiJJbmRpYW4vQ2hyaXN0bWFzIiwgIkluZGlhbi9L
ZXJndWVsZW4iLCAiSW5kaWFuL01hdXJpdGl1cyIsIA0KIlBhY2lmaWMvQXVja2xhbmQiLCAi
UGFjaWZpYy9GdW5hZnV0aSIsICJQYWNpZmljL0hvbm9sdWx1IiwgDQoiUGFjaWZpYy9Kb2hu
c3RvbiIsICJBZnJpY2EvQ2FzYWJsYW5jYSIsICJBZnJpY2EvTGlicmV2aWxsZSIsIA0KIkFm
cmljYS9MdWJ1bWJhc2hpIiwgIkFmcmljYS9Ob3Vha2Nob3R0IiwgIkFmcmljYS9Qb3J0by1O
b3ZvIiwgDQoiQW1lcmljYS9BbmNob3JhZ2UiLCAiQW1lcmljYS9BcmFndWFpbmEiLCAiQW1l
cmljYS9Cb2FfVmlzdGEiLCANCiJBbWVyaWNhL0NhdGFtYXJjYSIsICJBbWVyaWNhL0NoaWh1
YWh1YSIsICJBbWVyaWNhL0ZvcnRhbGV6YSIsIA0KIkFtZXJpY2EvR2xhY2VfQmF5IiwgIkFt
ZXJpY2EvR29vc2VfQmF5IiwgIkFtZXJpY2EvR3VhdGVtYWxhIiwgDQoiQW1lcmljYS9HdWF5
YXF1aWwiLCAiQW1lcmljYS9NYXRhbW9yb3MiLCAiQW1lcmljYS9NZW5vbWluZWUiLCANCiJB
bWVyaWNhL01vbnRlcnJleSIsICJBbWVyaWNhL1Nhb19QYXVsbyIsICJBbWVyaWNhL1N0X1Ro
b21hcyIsIA0KIkFtZXJpY2EvVmFuY291dmVyIiwgIkFudGFyY3RpY2EvTWF3c29uIiwgIkFu
dGFyY3RpY2EvUGFsbWVyIiwgDQoiQW50YXJjdGljYS9Wb3N0b2siLCAiQXNpYS9LdWFsYV9M
dW1wdXIiLCAiQXNpYS9Ob3Zva3V6bmV0c2siLCANCiJFdXJvcGUvQnJhdGlzbGF2YSIsICJF
dXJvcGUvQ29wZW5oYWdlbiIsICJFdXJvcGUvTHV4ZW1ib3VyZyIsIA0KIkV1cm9wZS9TYW5f
TWFyaW5vIiwgIkV1cm9wZS9TaW1mZXJvcG9sIiwgIkV1cm9wZS9aYXBvcm96aHllIiwgDQoi
UGFjaWZpYy9FbmRlcmJ1cnkiLCAiUGFjaWZpYy9HYWxhcGFnb3MiLCAiUGFjaWZpYy9Ld2Fq
YWxlaW4iLCANCiJQYWNpZmljL01hcnF1ZXNhcyIsICJQYWNpZmljL1BhZ29fUGFnbyIsICJQ
YWNpZmljL1Jhcm90b25nYSIsIA0KIlBhY2lmaWMvVG9uZ2F0YXB1IiwgIkFmcmljYS9BZGRp
c19BYmFiYSIsICJBZnJpY2EvQnJhenphdmlsbGUiLCANCiJBZnJpY2EvT3VhZ2Fkb3Vnb3Ui
LCAiQW1lcmljYS9Db3N0YV9SaWNhIiwgIkFtZXJpY2EvR3JhbmRfVHVyayIsIA0KIkFtZXJp
Y2EvR3VhZGVsb3VwZSIsICJBbWVyaWNhL0hlcm1vc2lsbG8iLCAiQW1lcmljYS9LcmFsZW5k
aWprIiwgDQoiQW1lcmljYS9Mb3Vpc3ZpbGxlIiwgIkFtZXJpY2EvTWFydGluaXF1ZSIsICJB
bWVyaWNhL01vbnRldmlkZW8iLCANCiJBbWVyaWNhL01vbnRzZXJyYXQiLCAiQW1lcmljYS9Q
YXJhbWFyaWJvIiwgIkFtZXJpY2EvUmlvX0JyYW5jbyIsIA0KIkFtZXJpY2EvU3RfVmluY2Vu
dCIsICJBbWVyaWNhL1doaXRlaG9yc2UiLCAiQW50YXJjdGljYS9NY011cmRvIiwgDQoiQW50
YXJjdGljYS9Sb3RoZXJhIiwgIkFzaWEvU3JlZG5la29seW1zayIsICJBc2lhL1lla2F0ZXJp
bmJ1cmciLCANCiJBdGxhbnRpYy9SZXlramF2aWsiLCAiQXRsYW50aWMvU3RfSGVsZW5hIiwg
IkF1c3RyYWxpYS9BZGVsYWlkZSIsIA0KIkF1c3RyYWxpYS9CcmlzYmFuZSIsICJBdXN0cmFs
aWEvTGluZGVtYW4iLCAiRXVyb3BlL0lzbGVfb2ZfTWFuIiwgDQoiRXVyb3BlL0thbGluaW5n
cmFkIiwgIlBhY2lmaWMvS2lyaXRpbWF0aSIsICJBZnJpY2EvSm9oYW5uZXNidXJnIiwgDQoi
QW1lcmljYS9FbF9TYWx2YWRvciIsICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgIkFtZXJpY2Ev
TWV4aWNvX0NpdHkiLCANCiJBbWVyaWNhL1BhbmduaXJ0dW5nIiwgIkFtZXJpY2EvUG9ydG9f
VmVsaG8iLCAiQW1lcmljYS9QdWVydG9fUmljbyIsIA0KIkFtZXJpY2EvUmFpbnlfUml2ZXIi
LCAiQW1lcmljYS9UZWd1Y2lnYWxwYSIsICJBbWVyaWNhL1RodW5kZXJfQmF5IiwgDQoiQW1l
cmljYS9ZZWxsb3drbmlmZSIsICJBcmN0aWMvTG9uZ3llYXJieWVuIiwgIkF0bGFudGljL0Nh
cGVfVmVyZGUiLCANCiJBdXN0cmFsaWEvTG9yZF9Ib3dlIiwgIkF1c3RyYWxpYS9NZWxib3Vy
bmUiLCAiSW5kaWFuL0FudGFuYW5hcml2byIsIA0KIlBhY2lmaWMvR3VhZGFsY2FuYWwiLCAi
QWZyaWNhL0Rhcl9lc19TYWxhYW0iLCAiQW1lcmljYS9CbGFuYy1TYWJsb24iLCANCiJBbWVy
aWNhL0J1ZW5vc19BaXJlcyIsICJBbWVyaWNhL0NhbXBvX0dyYW5kZSIsICJBbWVyaWNhL0Rh
bm1hcmtzaGF2biIsIA0KIkFtZXJpY2EvRGF3c29uX0NyZWVrIiwgIkFtZXJpY2EvSW5kaWFu
YS9Lbm94IiwgIkFtZXJpY2EvSW5kaWFuYXBvbGlzIiwgDQoiQW1lcmljYS9SYW5raW5fSW5s
ZXQiLCAiQW1lcmljYS9TYW50YV9Jc2FiZWwiLCAiQW1lcmljYS9TY29yZXNieXN1bmQiLCAN
CiJBbnRhcmN0aWNhL01hY3F1YXJpZSIsICJQYWNpZmljL0JvdWdhaW52aWxsZSIsICJQYWNp
ZmljL1BvcnRfTW9yZXNieSIsIA0KIkFtZXJpY2EvQ2FtYnJpZGdlX0JheSIsICJBbWVyaWNh
L0NvcmFsX0hhcmJvdXIiLCANCiJBbWVyaWNhL0luZGlhbmEvVmV2YXkiLCAiQW1lcmljYS9M
b3dlcl9QcmluY2VzIiwgDQoiQW1lcmljYS9Qb3J0X29mX1NwYWluIiwgIkFtZXJpY2EvU2Fu
dG9fRG9taW5nbyIsIA0KIkFtZXJpY2EvU3RfQmFydGhlbGVteSIsICJBbWVyaWNhL1N3aWZ0
X0N1cnJlbnQiLCANCiJBdXN0cmFsaWEvQnJva2VuX0hpbGwiLCAiQW1lcmljYS9CYWhpYV9C
YW5kZXJhcyIsIA0KIkFtZXJpY2EvUG9ydC1hdS1QcmluY2UiLCAiQXRsYW50aWMvU291dGhf
R2VvcmdpYSIsIA0KIkFtZXJpY2EvQXJnZW50aW5hL1NhbHRhIiwgIkFtZXJpY2EvSW5kaWFu
YS9NYXJlbmdvIiwgDQoiQW1lcmljYS9JbmRpYW5hL1dpbmFtYWMiLCAiQW1lcmljYS9Bcmdl
bnRpbmEvVHVjdW1hbiIsIA0KIkFtZXJpY2EvQXJnZW50aW5hL1VzaHVhaWEiLCAiQW1lcmlj
YS9JbmRpYW5hL1RlbGxfQ2l0eSIsIA0KIkFtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXMiLCAi
QW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSIsIA0KIkFtZXJpY2EvQXJnZW50aW5hL0xhX1Jp
b2phIiwgIkFtZXJpY2EvQXJnZW50aW5hL1Nhbl9KdWFuIiwgDQoiQW1lcmljYS9BcmdlbnRp
bmEvU2FuX0x1aXMiLCAiQW1lcmljYS9JbmRpYW5hL1BldGVyc2J1cmciLCANCiJBbWVyaWNh
L0tlbnR1Y2t5L01vbnRpY2VsbG8iLCAiQW1lcmljYS9Ob3J0aF9EYWtvdGEvQmV1bGFoIiwg
DQoiQW1lcmljYS9Ob3J0aF9EYWtvdGEvQ2VudGVyIiwgIkFtZXJpY2EvQXJnZW50aW5hL1Jp
b19HYWxsZWdvcyIsIA0KIkFtZXJpY2EvTm9ydGhfRGFrb3RhL05ld19TYWxlbSIpLl9fc3dp
dGNoKHNjb3BlIGNvbnN0KGltbXV0YWJsZShjaGFyKVtdKSkNCg0KU28gSSB3YXMgdGhpbmtp
bmcgdG8gbXlzZWxmOiBJcyBpdCByZWFsbHkgYSBnb29kIGlkZWEgdG8gbG93ZXIgc3RyaW5n
IA0Kc3dpdGNoZXMgdG8gYSB0ZW1wbGF0ZSBpZiBpdCByZXN1bHRzIGluIHN1Y2ggc3ltYm9s
cz8gVGhpcyBzeW1ib2wgYWxvbmUgDQp0YWtlcyAxNzgxNSBCeXRlcy4NCg0KSWYgd2UgdGhp
bmsgdGhpcyBpcyBhIGdvb2QgaWRlYSwgc2hvdWxkIHdlIHJld3JpdGUgdGhpcyBwYXJ0aWN1
bGFyIA0Kc3RyaW5nIHN3aXRjaCB0byB1c2UgYSBhc3NvY2lhdGl2ZSBhcnJheSBpbnN0ZWFk
IHRvIGF2b2lkIHRoZSBvdmVybHkgDQpsb25nIHN5bWJvbCBuYW1lPw0KDQotLSANCktpbmQg
UmVnYXJkcw0KQmVuamFtaW4gVGhhdXQNCg==
Jan 25
next sibling parent reply Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
On Thursday, January 25, 2018 19:21:29 Benjamin Thaut via Digitalmars-d 
wrote:
 If we think this is a good idea, should we rewrite this particular
 string switch to use a associative array instead to avoid the overly
 long symbol name?
That particular switch statement is in a function that's deprecated and scheduled to be completely removed in about six months, so I don't see much point in worrying about it unless it's causing serious problems, and while that symbol name is stupidly long, AFAIK, it's not really causing any problems. I never would have thought that a switch statement would even have a symbol associated with it though. Clearly, I have no clue about how they're implemented. - Jonathan M Davis
Jan 25
parent Benjamin Thaut <code benjamin-thaut.de> writes:
Am 25.01.2018 um 19:42 schrieb Jonathan M Davis:
 
 That particular switch statement is in a function that's deprecated and
 scheduled to be completely removed in about six months, so I don't see much
 point in worrying about it unless it's causing serious problems, and while
 that symbol name is stupidly long, AFAIK, it's not really causing any
 problems.
 
The main problem is binary size for shared library verisons of phobos. The overly long symbols names contribute significantly to binary size as for both exports and imports. The full symbol name is stored in the dll and the exe that uses the dll. -- Kind Regards Benjamin Thaut
Jan 25
prev sibling next sibling parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Thu, Jan 25, 2018 at 07:21:29PM +0100, Benjamin Thaut via Digitalmars-d
wrote:
 _D6object__T8__switchTyaVxAyaa7_[...snip ridiculously long symbol...]
 
 The first time I encountered this symbol in phobos I though: WTF? Then
 I tried to demangle it:
 core.exception.RangeError src\core\demangle.d(230): Range violation
LOL! This reminds me of the days before Rainer's symbol backreferencing PR was merged, where a UFCS chain of range algorithms causes exponential growth in symbol length. This one isn't exponential, but it *is* still ridiculously long. We need to fix it. :-D
 I was then quickly informed by Rainer Scheutze what the correct
 demangling for this symbols is:
 
 pure nothrow  nogc  safe int object.__switch!(immutable(char), "CST6CDT",
 "EST5EDT", "Etc/GMT", "MST7MDT", "PST8PDT", "Asia/Aden", "Asia/Baku",
[... snip ridiculously long template argument list ...]
 "America/Argentina/Rio_Gallegos",
 "America/North_Dakota/New_Salem").__switch(scope const(immutable(char)[]))
 
 So I was thinking to myself: Is it really a good idea to lower string
 switches to a template if it results in such symbols? This symbol
 alone takes 17815 Bytes.
I think this is part of a much larger issue that we need to tackle, that is, long template argument lists (esp. since D allows you to directly manipulate these lists aka tuples aka AliasSeq, so user code is liable to generate large numbers of these things with potentially very long lengths). I don't have a clear solution yet, but my initial thought is that in cases like these, where the list is basically unique, all that's *really* required of the generated symbol is that it be unique. There is really no need to go encoding every last detail into the symbol name, as if the first 1000 bytes or so of the symbol isn't probably already enough to disambiguate it from every other symbol in the program. If we could somehow detect or annotate these cases as merely requiring a unique symbol, then we could just substitute the whole monstrous thing with a hash, like an MD5 or SHA checksum, which will be much less than 100 bytes.
 If we think this is a good idea, should we rewrite this particular
 string switch to use a associative array instead to avoid the overly
 long symbol name?
[...] I believe the original idea behind using a template for string switches was to allow the possibility for the implementation to be smarter about how to implement the switch (IIRC, string switches used to be implemented as a runtime function). Supposedly object.__switch could analyze the list of strings at compile-time and generate a perfect hash or something, to maximize runtime performance. IMO the real fix ought to be to make the compiler somehow recognize these cases and generate shorter symbols for them, rather than hard-coding the Phobos code to use AAs, though admittedly, the latter may probably a necessary stop-gap measure in the meantime. (On which note, I wonder if you may have inadvertently found the source of my recent dmd memory usage woes... a symbol like this in a commonly imported module in Phobos like std.datetime would explain why recently I suddenly can't compile Phobos anymore on a low-memory system without invoking the kernel OOM killer, or why even the most trivial of projects take ridiculous amounts of memory to compile.) T -- The volume of a pizza of thickness a and radius z can be described by the following formula: pi zz a. -- Wouter Verhelst
Jan 25
parent Steven Schveighoffer <schveiguy yahoo.com> writes:
On 1/25/18 1:41 PM, H. S. Teoh wrote:
 On Thu, Jan 25, 2018 at 07:21:29PM +0100, Benjamin Thaut via Digitalmars-d
wrote:
 If we think this is a good idea, should we rewrite this particular
 string switch to use a associative array instead to avoid the overly
 long symbol name?
[...] I believe the original idea behind using a template for string switches was to allow the possibility for the implementation to be smarter about how to implement the switch (IIRC, string switches used to be implemented as a runtime function). Supposedly object.__switch could analyze the list of strings at compile-time and generate a perfect hash or something, to maximize runtime performance.
I believe that when the number of cases is small enough, the binary search of the strings is done recursively to allow full optimization. And these symbols should be relatively small. But I think if the number of strings is large enough, it calls the same runtime function as before (essentially). But here we have a problem -- the wrapper for this function is essentially this giant symbol that generates the string array locally, and then calls the real function. It's a huge cost just for a simple inline-able wrapper to another call. See the code here: https://github.com/dlang/druntime/blob/master/src/object.d#L3873 The function that does the real work is __switchSearch, which is only templated on the char type. It's going to be very very infrequent that the exact same switch case list is used in multiple places, meaning you are paying a huge cost for essentially memoizing these string lists. I think we need some way to mark a function as following a different mangling, or maybe even just avoid the whole memoization, do everything inline. -Steve
Jan 25
prev sibling next sibling parent "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Thu, Jan 25, 2018 at 11:42:03AM -0700, Jonathan M Davis via Digitalmars-d
wrote:
 On Thursday, January 25, 2018 19:21:29 Benjamin Thaut via Digitalmars-d 
 wrote:
 If we think this is a good idea, should we rewrite this particular
 string switch to use a associative array instead to avoid the overly
 long symbol name?
That particular switch statement is in a function that's deprecated and scheduled to be completely removed in about six months, so I don't see much point in worrying about it unless it's causing serious problems, and while that symbol name is stupidly long, AFAIK, it's not really causing any problems.
I haven't verified this yet, but I suspect that this may be (one of?) the cause(s) of my recent woes with dmd's memory usage on low-memory systems. If indeed this is the cause, then yes, it *is* causing problems for me and anyone else who wants to use dmd on a low-memory system (this sounds almost like an oxymoron these days!). And since it's deprecated, perhaps it wouldn't hurt to hack it to use an AA instead so that in the meantime Phobos doesn't consume inordinate amounts of memory just to compile.
 I never would have thought that a switch statement would even have a
 symbol associated with it though. Clearly, I have no clue about how
 they're implemented.
[...] IIRC they used to be a runtime function in druntime, but recently got changed into a template, ostensibly for more flexibility in how they're implemented. Apparently the original function was pretty lousy in terms of performance. The new object.__switch is supposedly better, but the expense of ridiculously-long symbols in the binary. Some days you just can't win. :-/ T -- Two wrongs don't make a right; but three rights do make a left...
Jan 25
prev sibling parent reply Walter Bright <newshound2 digitalmars.com> writes:
On 1/25/2018 10:21 AM, Benjamin Thaut wrote:
 So I was thinking to myself: Is it really a good idea to lower string switches 
 to a template if it results in such symbols? This symbol alone takes 17815
Bytes.
 
 If we think this is a good idea, should we rewrite this particular string
switch 
 to use a associative array instead to avoid the overly long symbol name?
This clearly should be in bugzilla.
Jan 26
next sibling parent reply Benjamin Thaut <code benjamin-thaut.de> writes:
On Saturday, 27 January 2018 at 07:40:16 UTC, Walter Bright wrote:
 This clearly should be in bugzilla.
As phobos or dmd bug?
Jan 27
parent reply Kagamin <spam here.lot> writes:
dmd
Jan 27
parent reply timotheecour <timothee.cour2 gmail.com> writes:
On Saturday, 27 January 2018 at 10:38:46 UTC, Kagamin wrote:
 dmd
see also this horrendous stacktrace when calling getopt with a bad argument: full stacktrace: https://gist.github.com/timotheecour/d6b623bd3d223f5d958cd86adffd7807 just 1 line of this stacktrace: ``` 28 dscanner 0x000000010d59f428 safe void std.getopt.getoptImpl!(std.getopt.config, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], immutable(char)[]*, immutable(char)[], immutable(char)[]*, immutable(char)[], bool*, immutable(char)[], immutable(char)[][]*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*).getoptImpl(ref immutable(char)[][], ref std.getopt.configuration, ref std.getopt.GetoptResult, ref std.getopt.GetOptException, void[][immutable(char)[]], void[][immutable(char)[]], std.getopt.config, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], immutable(char)[]*, immutable(char)[], immutable(char)[]*, immutable(char)[], bool*, immutable(char)[], immutable(char)[][]*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[], bool*) + 460 ``` https://dlang.org/blog/2017/12/20/ds-newfangled-name-mangling/ doesn't seem to help in cases like that
Jan 27
next sibling parent reply Kagamin <spam here.lot> writes:
IIRC several years ago somebody created a dub package with DbI 
getopt. I think it wouldn't suffer from this issue.
Jan 27
parent Timothee Cour <thelastmammoth gmail.com> writes:
but this should be handled at the compiler level, with no change in
standard library getopt, eg using a hashing scheme (cf `ldc
-hashthres`)

On Sat, Jan 27, 2018 at 2:38 PM, Kagamin via Digitalmars-d
<digitalmars-d puremagic.com> wrote:
 IIRC several years ago somebody created a dub package with DbI getopt. I
 think it wouldn't suffer from this issue.
Jan 27
prev sibling next sibling parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Sat, Jan 27, 2018 at 09:22:07PM +0000, timotheecour via Digitalmars-d wrote:
[...]
 ```
 28  dscanner                            0x000000010d59f428  safe void
 std.getopt.getoptImpl!(std.getopt.config, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], immutable(char)[]*,
 immutable(char)[], immutable(char)[]*, immutable(char)[], bool*,
 immutable(char)[], immutable(char)[][]*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*).getoptImpl(ref immutable(char)[][], ref std.getopt.configuration, ref
 std.getopt.GetoptResult, ref std.getopt.GetOptException,
 void[][immutable(char)[]], void[][immutable(char)[]], std.getopt.config,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], immutable(char)[]*, immutable(char)[],
 immutable(char)[]*, immutable(char)[], bool*, immutable(char)[],
 immutable(char)[][]*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*) + 460
 ```
 
 https://dlang.org/blog/2017/12/20/ds-newfangled-name-mangling/ doesn't
 seem to help in cases like that
This has nothing to do with name mangling. The mangling itself may be relatively small (and probably is, judging from the amount of repetition in the signature above), but what you're looking at is the *demangled* identifier. That's going to be big no matter what, unless we fundamentally change the way getopt() is implemented. I proposed a compile-time introspected getopt() replacement before, only to get laughed at by Andrei. So I guess that means, don't expect to see that in Phobos anytime soon. But I might post the code on github sometime for those who would benefit from it. Basically, instead of taking a ridiculously long argument list, you create a struct whose members (together with some UDAs) define what the options are, any associated help text, etc., and just call it with the struct type as argument. It does its thing, and returns the struct populated with the values retrieved from the command-line. There are a few more features, but that's the gist of it. T -- There is no gravity. The earth sucks.
Jan 27
next sibling parent Kagamin <spam here.lot> writes:
On Saturday, 27 January 2018 at 23:12:01 UTC, H. S. Teoh wrote:
 I proposed a compile-time introspected getopt() replacement 
 before
https://github.com/jasonwhite/darg this?
Jan 28
prev sibling parent Seb <seb wilzba.ch> writes:
On Saturday, 27 January 2018 at 23:12:01 UTC, H. S. Teoh wrote:
 On Sat, Jan 27, 2018 at 09:22:07PM +0000, timotheecour via 
 Digitalmars-d wrote: [...]
 ```
 28  dscanner                            0x000000010d59f428 
  safe void
 ...
I proposed a compile-time introspected getopt() replacement before, only to get laughed at by Andrei.
Do you remember his motivation? FYI: since Nov 2017 Druntime has exactly what you are proposing https://github.com/dlang/druntime/blob/master/src/core/internal/parseoptions.d However, it's not really sophisticated as it's intended only to be used for druntime, but then again, no one is stopping you from using it: ``` struct Config { int a; string b; void help() nogc nothrow {} } void main() { import core.internal.parseoptions, std.stdio; string args = "a=42 b=foo"; Config conf; conf.parseOptions(args); conf.writeln; } ``` https://run.dlang.io/is/GVclu2
Jan 28
prev sibling next sibling parent Timothee Cour <thelastmammoth gmail.com> writes:
* This has nothing to do with name mangling.

Yes and no, these things are coupled. We can improve the situation by
forcing the size of mangled and demangled symbols to be < threshold,
eg `ldc -hash-threshold` would be 1 option.

example:

current mangled:
_D8analysis3run__T9shouldRunVAyaa20_666c6f61745f6f70657261746f725f636865636bZQChFQCaKxSQDh6config20StaticAnalysisConfigZ__T9__lambda4TQEbZQpFNaNbNiNfQEqZQEu

current demangled:
pure nothrow  nogc  safe immutable(char)[]
analysis.run.shouldRun!("float_operator_check").shouldRun(immutable(char)[],
ref const(analysis.config.StaticAnalysisConfig)).__lambda4!(immutable(char)[]).__lambda4(immutable(char)[])

with a small threshold:

mangled:
_D8analysis3run__T9shouldRunℂ0abf2284dd3

demangled:
pure nothrow  nogc  safe immutable(char)[] analysis.run.shouldRun.ℂ0abf2284dd3

The `ℂ` symbol indicating hashing was applied because symbol size
exceed threshold.
The demangled version also would have that. A separate file (dmd
-mangle_map=file) could be produced in the rare case a user wants to
see the full 17KB mangled and demangled symbols mapped by ℂ0abf2284dd3


On Sat, Jan 27, 2018 at 3:12 PM, H. S. Teoh via Digitalmars-d
<digitalmars-d puremagic.com> wrote:
 On Sat, Jan 27, 2018 at 09:22:07PM +0000, timotheecour via Digitalmars-d wrote:
 [...]
 ```
 28  dscanner                            0x000000010d59f428  safe void
 std.getopt.getoptImpl!(std.getopt.config, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], immutable(char)[]*,
 immutable(char)[], immutable(char)[]*, immutable(char)[], bool*,
 immutable(char)[], immutable(char)[][]*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*).getoptImpl(ref immutable(char)[][], ref std.getopt.configuration, ref
 std.getopt.GetoptResult, ref std.getopt.GetOptException,
 void[][immutable(char)[]], void[][immutable(char)[]], std.getopt.config,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*, immutable(char)[],
 bool*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], immutable(char)[]*, immutable(char)[],
 immutable(char)[]*, immutable(char)[], bool*, immutable(char)[],
 immutable(char)[][]*, immutable(char)[], bool*, immutable(char)[], bool*,
 immutable(char)[], bool*, immutable(char)[], bool*) + 460
 ```

 https://dlang.org/blog/2017/12/20/ds-newfangled-name-mangling/ doesn't
 seem to help in cases like that
This has nothing to do with name mangling. The mangling itself may be relatively small (and probably is, judging from the amount of repetition in the signature above), but what you're looking at is the *demangled* identifier. That's going to be big no matter what, unless we fundamentally change the way getopt() is implemented. I proposed a compile-time introspected getopt() replacement before, only to get laughed at by Andrei. So I guess that means, don't expect to see that in Phobos anytime soon. But I might post the code on github sometime for those who would benefit from it. Basically, instead of taking a ridiculously long argument list, you create a struct whose members (together with some UDAs) define what the options are, any associated help text, etc., and just call it with the struct type as argument. It does its thing, and returns the struct populated with the values retrieved from the command-line. There are a few more features, but that's the gist of it. T -- There is no gravity. The earth sucks.
Jan 27
prev sibling parent "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Sat, Jan 27, 2018 at 03:48:19PM -0800, Timothee Cour wrote:
[...]
 eg `ldc -hash-threshold` would be 1 option.
[...]
 with a small threshold:
 
 mangled:
 _D8analysis3run__T9shouldRunℂ0abf2284dd3
 
 demangled:
 pure nothrow  nogc  safe immutable(char)[]
analysis.run.shouldRun.ℂ0abf2284dd3
 
 The `ℂ` symbol indicating hashing was applied because symbol size
 exceed threshold.
 The demangled version also would have that. A separate file (dmd
 -mangle_map=file) could be produced in the rare case a user wants to
 see the full 17KB mangled and demangled symbols mapped by ℂ0abf2284dd3
[...] This gives me an idea. A lot of the recent complaints about symbol size appears to be coming from templates with string template arguments, and encoding strings inside a symbol tend to quickly make its length explode. What if we changed the mangling scheme such that if a string template argument exceeds a certain length, or if the number of string arguments (or their accumulated length) exceeds a certain size, we hash the string arguments instead, and use the hash in the symbol instead of encoding the raw strings themselves? Regardless, *some* form of symbol compression is necessary in D, especially now that druntime is also moving in the direction of more templated code. Rainer's backref patch helped in one common use case (chained range functions), but the string argument case remains a source of major symbol bloat. I was also talking with Stefan Koch on github that we need to take up a project to improve the way dmd handles templates. There's much room for improvement, and with D's focus on heavy-duty compile-time features, this is a major area where we can reap large benefits for the effort invested. T -- Freedom of speech: the whole world has no right *not* to hear my spouting off!
Jan 27
prev sibling parent Benjamin Thaut <code benjamin-thaut.de> writes:
Am 27.01.2018 um 08:40 schrieb Walter Bright:
 
 This clearly should be in bugzilla.
 
https://issues.dlang.org/show_bug.cgi?id=18324 -- Kind Regards Benjamin Thaut
Jan 28