Description: General compiler
This file as text.
(active) Revisions in this set:
ba74d7d3f83de24f4f9824309943a4e234aa11b6,70ae0a2dc99eb1fa4a11452e8aa1b5e133389e21,800ce234991a53d652a31090a6bad7b2f40a7856
64ad48e89ef7d164e9517d02ec9eb5a124bfd826,a21397e356b523a0c3e5faf45014f104fd64b96e,49e7e5f5129a71a6ef81d712e0a04c650ce6533c
7855b3cf1b46021b2463fcf6987f9229c91d77e3,10f72ba2c897fd03477267faeb2d1985780d6e40,578e60e6ef29dc5a082fe253ef871908154449a0
b4a7d6a82eea9ad71bec75571d7c051cdd68b141,d5f0d8e30624ea69c18c50a4e200e39552bd1092,352fb866ef19c845756840859c91088f9ed32740
c7a0022146dcba901802ed22e1b1e76652e20883,8943c0584edc3089df819481e646371ebeae03f7,4860f3934a5b7ee9242a4b90717807f55730f8fa
68bcffc3e0c358a7dc84ff3a9dfe3f12ddd9f132,aa89182bf5f55404265650497f976f741d7506df,4c0a213f0d07ebf3ed1d8309fb4848bc445bd28d
84b5129f1dc443351e7b914686bf70e9b81b99f6,c306f57ecbcd6098f8442cdb38c3a1e8ea2e13eb,e60a5ebfe76d8935112337011c7919c134388f49
692c287c3e3d006e54eb72fab484b00a2ad3a6f2,7eb9b23fa5224f9ae4f9db985f8f163a7753bd63,116f36fe56bb53c4ead4752335f07411e678aeb8
f27fee55662aef795e91eb821cf76e7ee6c4c6cc,379c2fe821cbbba289662d2db0acdafde41d29b8,0a5e6d29cb32b42dd488fd5b0c9f377e138f5d63
a47f153daed4b95925d299168baf916a65573f73,112fb4613b0e0f014f12bc29da7ed2dcbe99a1d1,2b459b30d20db31236b4fe1695865faa9f2976fe
bf4eda478d267055cabd7621ffb48ad59be4553b,18a45d94a36cd61afd82e4313142190af31a74cb,011968e74b105e7fba13f10d1bf0c35931feff0b
cdce68451adb2285d3333a059f6003e1b32d55d7,64e8557180e68379b17d2d1a32b584c57893ffbf,a092da723abb7caca19994e66e60288060bf0c79
2a016889de1ba62b9791ff68ac039843a4ab899b,59d5d6ec9536d2e2181d1407448835c5b64614fe,2a9ce2ed6cc1cbdb8623cccfbf19e4981fa793d5
fa2d82f8795c06a3964e462d5ba55ad16df5e06e,2dc64e5fae911dbf7cd67233c39eb6b919aeedad,4357caaad882705021c49bab78882f65fe52a612
a0262525085fe0ea885f8571d336a366c4c750cc,30d64cec68371f819a3460aba3d9776770d08977,9b0ff05ee812e389651a5f0be280ca7837af3dc7
0e546d47ca72794e9d3edfd3f15435fc09d9cfa4,0a3c94bc72b244d10cc16c59d2656d31dd58e34e,c9a7503bbb0728fcde9decb9201bd6a519ce2587
8fba43609d2e6a3a8fc65690f06ffda024d36752,95d18cd0525963be91fd1e6fc43864c7cde6cab9,c2c942374d35ac90b5af802a805082f596a19275
a7642b70c14ce826822d39f691b70adfce0a03ac,f5ce7c572b7488e7b53763d88cef4a8e9451b891,5f1933eecf874f23c756a3544621c0d26ad7737e
b11588693015a51d2cb70f4be4cca08cd3e4ffc5,dd6039716512f6679aacf46e24a5313673a3eaef,5c5dc2ed500be380ad85a1eac08c08536f9d1b4a
9f16c34329410b03b01ae0f66c67e2f90c07b864,c37c485eb78f7e827cf5b66578935fe32080de5e,0d50a63c7de23aea457bbbf9a979dd64870e5a4e
063415fa72d9b7e83e5f7fe814845eff10f94374,4d2d26c3183165ae27d2ced87d124f9d7bcc5f2c,e157939b4102eb0b52d0b93e05ba2f1f2021edfd
a40335de34e27666392983943ce18b4c672c4003,72416edcc465a6f9a9fea43c4219566750fb8db8,e8ebc00b3b863f7072014f469f0f1096225f34ad
6a6ea6729f4d4fd60791e504fd15e72b1342dfb5,7c92412c74ca66345a3f5284e07596c3a138f078,095bd6da7d845178545634c74cb3ee4b7b31bc17
11851d274c8c040067b6e61577f2b1d7cd7052b6,23570bed33014b272064e963180c76184ed51d1c,08d6ca72604e14563234849c61ecb13f071fb5f6
6dbde11f5a46550784eb4d288b765c4339cf3c4c,ae8304f65776c3bbccbe89f6eb2981462ca96e52,cefb38b6054db7f9978ed12b95c4c6a13cfebe16
d1361ca6edf25dd49e7184b4312b3ed050a575fd,3b9f5a5e96f6871b119fa5dd6b68d64ac6bed3cd,9d56387e7fadbea2e45f49738abc2e376379004f
ea69a5b372db2e43190cc502392b965f76290de1,ccb8e8656020dd8b550dffddf6d2807bc7b8a2d4,b96a8aee616b2437cb5c5b8c8e2d5851a11f56f1
ac37a54d794ec134ac49fe81710ba0b45b774831,477d7be6515dc3e5e3ab5e01f63828d62caecfab,c43cae9231a40132bb9c3f446463152edcc472cc
20fea3607cce1b6c0284c7b4c3c75594589cea99,413a3599c1c35857c5be27e9c61721aa072524c9,97b40dc16daccea9a2ae62cff12366c3aa197c39
026d06cffbaf1658379a61f657415acd3f43e2c8,50ab607676f8a7eb9abd6e499dde5362d32bbdaf,758a8dd34a5dd016c6cc4447d609ddb1d6541556
b60cbf33296d21e8d207e6949dbb39717d0b2f25,67fe756642367b1a224c6dbaa05026fe61096bc1,6629e72d795b94e237dea897f8526617d6c5160d
eeadf618b8320fc653e66ff4b24b58017c10c607,2109612fa3bbc7feffcae2c52a7661e65eed250a,b7da7cd654a752872057bd48ac17628665750aa1
122d0d36d61c25a5a879591b2923e1f904896de1,3b7efb5123d3f0de813c8963ddbd0c8e027af90e,51502874aff7417cdd9050b3d0e24af48aebe176
32a51d7b6247b9d0a65a031f49beb5f42c69cadd,97bc58d2488f10ba7ae2590a029d41d60bbc7245,6e453a1477d6525becb22e90764547e63601385d
6b58185bda1b6d467f423d50a326857c5712f2a0,ff002e266434a261eb65df57b1b9e2241cd1ee0f,93e39fb0cd4f769d46de1db0c6ae9b7898b7bcd3
820d2f7135d7160dc85370c27758e2f1f6f3eee6,95171a1e2281d494c706108394bc0e695dfc1461,e69b4d2d9a9e1aba83c40a2b92ecda28c4625b44
ac8411f3cf29f0361ee963ef0d08d84ff85a723d,8845f4d1ce390679902873a611f9cf0e04e5b185,2330164ee2e700dd8e651d7018d2836bd722afed
7cc7268635512a76eb3f3473e6ddfc454ecc2294,c6bb85eae998ed42c242a3d5d7e24c2bf3231460,3b4011760a1dde45618b9b48529c5827d4eb8849
c55ffa8cc7574d94b38c7b5f7e7d41cb467e4578,1cc995b471f0e708abb9113064877d9a01a1d477,4f72edcdd59d7976e26aace0e6c0a393b6c4186c
f87304f5caf5f9e3afb96d339d12f90fe5dd9772,b1b559f2838fdbedfd399789c2a34405d0e74f91,dd290884306f9746c1a60a6b85f137d58bcfc759
eb769e3859d33f1c93f4870d97be243718de50f5,f3d831b480dabc787b9126e3929c7fcb387a309b,c9a7afe053a4feca5188dfaa57d2e42075eb48b9
70cadc76948864526b147e46052605cc7a69377b,f7549785407c1ac00df6addbf3c7346ef877debf,b840db72284ec707b22636aff5d36d84ad95a228
7f5c2fa3aae4273980635a703db4fc4c8fa828c4,a7c347fe567eead26455fa6be3c579a227673362,ce81e509075e2a186a2d9d854d1bddb891cea6f9
9c03c298567dabc027818e995fef06682e91a226,9a797b9f494d723f8b8b2286fc5db0338f63d98e,dee105654693cf7a8da064d3a2530d9436b07fdf
df598f186829a7074edfe4c4024c89e07abb2668,f6e32ae90e7aa852390174ebb5b8aca0392bcf25,bd4b7a6bc420196d0e846b5f058033101219c2cd
a2cee252e85a2e04b1e13a04d48060a3d8135889,4d03f3a65e9da5a7d9bd71c0b9d0a1090cd4bea0,a72a12eef6133dacfa6d0a93ca8de63a71e92da7
e7c4fccf41056a5695f6aaf39c4b12df95af44a2,2ba239ea6d1474f2a6699f725480bbebfecfa005,10ab893de389cd0dc689ee4b038fd07487f5b0c5
1d7486748a27010e304589d415c961435d3e0812,51e68eb302c8f7fbaf95a04162bf79e3c6de3161,1b16ff3629c51a305b9808e751456f7eff1a5df8
b223d1c3048a22c1d2bdb3e8d933414e2843a737,644c47e1213118690d78d593a1c217335215fb1b,6c82b2d1daacf29cabe1d6c22be050f12cfa3303
925531b99c1ffcb99a838a3991005eee827bfa9b,94d7a02fae1d06a40fc9313f7e42323f97d577c7,75a89d21159b3c4106596993f938b77e43ee048d
4f0da5fcc3d4c0dc053cd88b1b00775b22eac668,4fb7b5d3ffe403756478930a33574f41d05af580,8d3d5276d74979c670c7571d10d698ba09e5c9e4
cfd0790f89641b4c7b98a24314448ea5ce6543df,24f6cc0da52e0c9f0c5285c7961e5b66b6c88891,6cb6517411066233d517a2d97d1e0dbdaa1255f3
c7bb028d35b0db4355ebbb7d97cfa3962db938a7,597a23d278f2c870dbf0a5d7fadb83908b365ce0,d1878fe5b21ed2cf39dfb22c5197d02aee2a49ec
6c888949992e530b72e641603d5200b2d3f57b9b,a186f484427dd09971c4b5c335b3a7e807eee796,4db5478acc409c6070e38152b0d24b7693c4df9d
acbf7d15c494c68b0f8209ccb0d041c8dba351f6,afd4599d26c0462c59d0e9ce9fae76a47c6d333f,2f40f818907756d1dc844bf3a5c9899986a3aeaf
04d295f1865d6c011d131ea4ccfb7dd1928ca758,4869d0ace9883ec2e0a4aa9bcf0cb63070df81e9,9c3e9e80a3e9aea5136c0adfc5bc8b41b3fa689e
2d01fe76f6debe1369ae3a345fed259282e0cc10,e52cf555ab862662622817397df755cce1466621,2b6076a719f4671b7bb838bb3ba8bba19f1018d2
6c87b89e45184fc5deda0c5af0e4ad9bd476776b,503ea604f33b5a7dd72d7a6417f9a38774f19263,f9668f8c037b6202cd558fc173ca1c4256a1c6e0
ab51e8637c2a8879c3745dba029b57590c279630,8c362eac67df688f6c1fc7361f0d5c06a78c02ab,da0deae9aee929f3ccda08afdff56bc931a19e52
7a65e1f393fb3ef10fb4ac15865703a39123a8a7,353be907c76801e05832396087c5b653b301d7d7,7af95cbf063d4634f3e566419cca85ae6823b16c
1abea6451c7faeb0754df984102edb34066df709,13ce27cc1d4a7b148e4236d1a9c2d7d0d2f04071,d4e059bd41b62841560790c0051c9c437243cad5
e3546cf5af9cb17fd98cba5fa50f54ad16e14c9e,9a3ddf650c1c150039b2f63fd84300eaa4f1ac81,fa4596a08f2027787c19db2978208781828760de
3e8c7f66b71cf633a74971b60150d67690b43959,3a43ffd57bc989d3e5facb1edfefc49cbc0f18d8,382d5060a04504cacc56a365f02100a65108ad19
af36913469cc49f412cb38dabfe52400bce229f9,1a559f5c608c31d1b5e11e99076f5b8b9da19dc2,8b9e90dc7a9c45eb6d0458daec566d8064e1ef52
4e5f48a25ed461106a250314f5210f160aee1199,bc77aad3d935e43807cbf349ad3b355508a961ee,e829596750b6e556b5104bf2308be97cb4b1db98
a87a7270d5fa1ea935e2a5e0fd411061e3215263,607126346997c1c34a825017a7c00d68c4cf72ed,bead1f81802eaf2f58a58bc4181e29575080d492
08791712d710acf57282b09f0846b1c8d27b9c5b,7c4e7d6bd3d7df2117ee4a76929746ab68079fc9,a277a5f8db6a078f981748c1f73b8cb43ff36f83
9f88cae771bc3bc99e02047cb1719aefc64480d2,e5c2d13671435042f61ac84d9634dea94f00af57,4da16992df594235915d715c8bc83f53e87a1f56
039aee956804015b1a6c3b07c203a4bf3bbcc49e,a04e4971fc3ef9b3bf5adf3dbc2a3b97de28b287,c7834af3545959d7c104078eefb568243cc71876
075e3da334bfc9788c2de0fde5eea479afe9616f,f78e2072a193a49660ff8cd07273cb6c45b03779,62cef8eb2b66c464df6ae66827e090476bffb657
973741c9197c2b3217ba10f5058b7a2c3377d1d6,b0535d8d0fda36ec637e31343fabe552e8cce954,d65737393352eabc8aff52f9c7b6545d09c578c8
ed2ae508d090338a706418fdf740bc219b614776,bde560dac290929dbdf0c8df20a9c7e1f4dec727,1bb8bd471ae32a1db840b975616fe17e9653ac2c
5358851f84b9fb9af41df6290decea1c5ec7610e,2c1639003c50bb82167036f7372eff8100863a42,0b61b5d4cfd624402797619075436c57e0da3be9
1b0b81f714555cc0726f3679ddfbcd55c7279db4,927fbc4387efbde9bf4865e9e304385026e4ba39,349bb2ff38a56baf6960a0196326aafbb1aff9a5
2b78a8fd3dec629d91b9fb74a01d06d904384117,53542b7c5ec57aac80fa55eb4efc9c85fdf33129,44beea91b5b4b6a43d55a215cc7281e042f91cdf
e008785152df10d7ac99ff2a162190d2f39a72f0,b9ddddf9b153fa5178118319c4d245d20d24bdb3,33d57ac646240541aaaed7307758d44eb93ebc7c
8d19bb12a2326177304ca963f406dc9a90961cd4,55aeac44f0c462bb66b0025884316dd13ce033dd,213b87fe91453fbca07dacff506b7687e42494e1
97a144ea6abfc4deecba0e10786e17519e1c6ce6,079d616978f27a05004218d3fd6724ef05b5e4e0,5a5b47fa24520aa9275ceca1d20a36ff3b39485c
f76cde1c4c5a6bee8562d5b754dec8e9e99d84d4,ba1b4b1c920a86bf7f8c6fe8777026e0092a9651,b291d17fc5e3b53ce4e8cc5f37d6f9717a9f2288
cf9596421bab9d2feb295e2bdbf013195a8061fb,c0f064a35ceb3a847e6f976ba8879bd288bd2cd8,2ff391c25c763d3aa585160c5643293571a37e29
7e51c5e8561c905ef0041a993ce933093da43798,332679e28aabacc973453b31ba062f4141e919d9,8ec3cd6390b6da0f42cb4cf79fe910c04dc9dd5d
47812c8a3d5e4689d16d577507214929af857ff4,eb0f02348d240a2f68c662d83ab0cba140954b4d,4c34b7b67d9869f889d9b62a30cf2bfe1231d6ae
a418dc6c912099c870db748c09be7bd87bfe199a,aad87820e687fd71d0c8f87b559b8f4b367df657,dd418f24b594340b84eac3805f906c7dc97e2b7e
77658b925bef93b5ae127e686acf63cae731b234,9313ddea78051cc7ec69710462dc2e880080a1ed,cba4aeaca5dcbed78c85b804ed7a5bded119446f
322a717c446f4cc3e53966e908790a87cb309d2c,750567f8e36edb9af45221299f76d2e33b1ac8bc,4dbccce43c24eea0f0e9d97e66ba84ce45a40e6b
ded3dec22af8e83e1338569ca7cbe6daad23d3f6,465e8a99e00aef67489c91014f6bf2dcd67b4545,1dee4c41dd487adbc3eef94ac974f069deefcb6e
17c48694a50b69e1f8ae9f10b878a5057ab4b02a,fe99252a9b71bac16570c95e54f4165312d12fce,4239742b35471d8c36d1dca9c2bec527d66c12de
7c02f2b5314b4527db41eba28860ac5e121779bd,2487fa76056397bdca5711c3360bfb27f0620b4c,1e07606cbfb0166728c305cd73d35d28a3d9ccfe
4f2ab3fb1130a34460f5a2c5c0fa8db24d8f036c,ce8ec3ab5d5d8458b16c2e19e2650ec16822e542,d2b3da1f145484472d9ab905805715dd55a8575a
697f2fcf755fa92f67644acd88b1c1827c2ad8cd,dec03b5ac7d43c9462d930f53a61a6e1514b5b08,73c88619293407e62f358e0442389fb3cc10a87f
a9b015911dda052989f7c64a5604314a4cdc07b1,1474db42e45589fd8ee3f4a060e7efccacb4e7c7,7871ccd0546ee221079bb9f5c173d6d3eee4b23e
d3c3f2742c87a5dbd6360e5e8f4cbfc0d72dadce,db1903f45d6757f3d18799002df426b66fa4a0d6,9eaa46f7919d676acae31c785f8eb35b00138a1e
1f3d5e88653a37b06dd3de08d68b2083a323fc31,fe49522e6fbccf6fda941da340818b23e29dc1c1,cdd2ba1a4deadb65f70f19db565c8136f6722885
0db19546efc81de7638ea76bb323d00b1b8ea20e,4f3a5cfd1ee6cdf21242bb730c2aef6c1744610a,9fe80d741686ccd0e1ad78be9af35c82de80a4f1
85684eb66d671df344c3395aa97ccd3ef591a137,eea3eb1a8ec754748b565690cb590f5c0292da74,cbf95aebf44616969cd12b1f3f3a984b1d9f7295
fbbf1f4f1cf29d23bdc337dcc7064e5e69aa3218,749c4d4e4724910f52059874df8d6fb12111a6d3,d80dc03ccbaae1a432356148b88f20a36a9ed72b
5d4af28c0ff54f1b7d6d97f35a55074865612445,d6174499b1fdc948c28db191080da7f144c93d15,243c967967070429195b93b0cb51d2b406badb4d
7ef3d39d93b8a07c88d5359e7d40bf46cecb6614,a57899323426c8e1d5cd5ae6bc1100464c1f1ae7,982a870b15184d033e72efb19b743947c43a8db8
c425c51963854f592da4b9dbccef198959619cd6,98f55b1d8605ab1e5828d3a710df8c6e1afdad18,6b97c712f69b190f2a9139d829fe5741d4430c3d
0a91fcb44fb7cb51476ccc0ad2bd833d1f5af8c0,789f13eb247ab4a811112b430d294a4bf70b9c44,cc9f8b7f5685e205695165386f3d262b0c02132f
40f6a4ea3c36aae0b4da2e3185b533826286b089,56acdd3a11576ff9473ac42b59dad47ee2f6ecc6,67cf63049d4f37852306f5be9681093c5e760f41
40082100e1f688f755fd6726e01162fbf2af3c6c,a1a17447ff3d95d0145d4113ad563f7360480a88,0f57327bff922d389dd7534cfcf29027efebc7a8
449a14dddf92a0a45d0e810ba01d482ea5f27b9d,3fee990218b4648ab020d85f783959b1d8fb0dd4,e56b58c2b05124558bc3c0d18ef1d1c48e9b6d01
7f772683cb0c265dd3c8f84d5e2ee38c73e24b74,0a94f8fc085580d97717c8a8f2e19a9a53a44aaf,b2932393df279c6856cb7fbc12a389fac3de060e
f91e38d1bd3ba024ff15a4db488e2bd2d69f9bcf,84848df18d3b351fec0651a9873128553e84e522,39bab2dbcc3961a59542c60abd70ad73930087a1
ed5f19e7e388356d644a695c16c8c520811099fc,24c4b90343c76d18eb4fb3ae3d85000d03c321e6,ba413bcdfcafdd5ad69be04685808df1b836608c
d137e06ade00a851a5370367243c11fcc79043ea,ee940c8270c8fbdd585cdcd548930e1a6872ab55,e296b26e9ed25051d1d70504c7270f2f649f5d81
a1b556d2118d91a235a1ed365bf88ada086237d4,3ad24c9db8725f6b53e3f3250807ac850a7769a7,f1715ff337103b83ce632e92ea9425b308269fa2
62c137a6d801c5cdc3a2b9f20ea8731836523279,ab2fa724ecddafea7950d8998665d02ec5af3354,db37146f128563ea196aa00b118dbc9376e53f48
3a20178d96463df72b4357fad69838b87d0a5825,0e04d9b4def9447c67da46cfc22b8157d44b34bc,b5e6c0b98d2c04b0d6ba105a9c52a65eea00609d
99914b427931330a22b9fe9210ea44acc6ee8101,d31dd4ac7b6a7f2543c130bb10d927e8688be5ad,f9cda608fa3b891ceec7d21cad66ef75bd4735dd
55d5bdc98d787c733b84b9381a992d67f27d9cf4,71fa4d1fe2a5eaee061fb71fb2045bb5fff2db1b,5cea37425532e2ca502bdebe2acb19db22a31db9
d9d2515ada949fa0c8993ec3ff6579a08624a865,0b63e89ba290a4df67893b01019c3614f8cb8f1e,ced3885dbb54688ca8e0ad3692949eb4fc108b9e
402728239f070c34402db4a5f8f39c98788f95c9,a64a8f8debb219661633a1121082bb882d8ccadd,3a02393584b6b7e4e4ce5a4ff12353f78fa38b0d
352ff5f82ad07bbd07430a1c433d1c417b9f78b2,dfb9fffcf917260a6479ce75da4b87b733d1b4e2,8ce4f9606dbbae08b8cd9c7060ff6021943489dc
b945e66e2807410180709dd0b967e1ebe6cd912a,a72553eea27cc4a8ca0c96456e439e283d9ef972,9dbd1551310b08d5255d948106ac4d65508b9844
80ebb98431397073b582bab01c14a1555f3eb015,404b465c33823efb0294fdc75cfb8da79928e749,90bec938f6ecafc9ce36bd3fc53a73bacb0bb20a
98b1b04951f82c981675a16c2c462287ec5b699c,6d0c470a40bb3a58f2f0b2473c597d0c39a4ee7c,87458a065c54d01aa6d0013299c55d1b99d67f80
b7a8dd9479f550b99b902cf61a719bd3da44f0c1,6db674cd024f9d81069aa1e019afa101e693af38,4d6b8a6c45c5fcd9a7120754358cf94d1a8a42fd
04a50733ad9ab91ff3710e9ca24881c15439bccd,c932dfaf7058a61875276af4a7a9100c2addf1fa,d8903ce6b3af3cb3fc5bcfa48ae2823c1fc2c57c
3206ac35084ab844a20ed8d97a58048cd0b6e7dd,f04afdd5eae60b2ff1d7a1bc46bad34ca54b19d4,43b5dbf6136f053f082c975c8e8d5cb1610ea750
900fd35f4abd574488c8c85d8a62874814ea2a3b,12e63d8a2cf992f49656895e45b6c79b752546d1,145f4299b49a634827a46f3ab1c8a8762c5be06c
6cde8ab4cb9e41c81b04c310b6f0da5afed26e41,c282f21b1b4f9eb8403654abc51bef8956baaccc,217ae6e4bbd0c927967c8d5d2effcb9f621ea89e
e7fbebfef57f0cc75dc85cfa4ca85571e9ae6f99,83611b83cc9b24d1db270e1d545536c651f97ffd,aac8559a8d55b1d594ce91258d8cb66a7a3d0877
18dfdb423e18ff7a16f90699fbd840230e438bc4,6eafee72d78b5785512f113ff1330a9ccb572646,4c338b1f70c86f29d90f6af2e44f749401e88315
797e336222fd5fd1dc4f5da49131381a3174068c,db83612b2c220def234fdf6f78acd565fcc483d1,1da43f67d40dd92ea2fb1cfa327d6088fa838aa7
0b3418e9787ee6953820f6ae07c5e7b21559ccca,99af7f2781df0ba8475f99d20acef464fda91c96,2b6ee838f9745f266b22e73abbcf22def8b11864
46bac33a2d1bf06dd8fd27742ce4751cb0c12232,26acc8fb2a6f634ae80c2a15ecd7f95a8684ba3c,99f92ce5dda2fee4170b359c5163060986b4ea78
d2371f4176f73f22415c21cac3177752b7d27024,fcb6072fae11123300b6418ccdccfbc794319be8,d77a8fb5f46c450921938937ac1cb0f9a7a0a75b
83861799ae140cb032cba70e7ad3b98f92304f09,05c420fad517d77502e023c720e69428a03f5cab,2c4c34ef9b2da6a74ff850053573de7c160a9acf
d10fb705e4c39ab8c4ddd6140e6f86166dd01725,93a08aaebd6f9dbd709c700d092e2cc8aa06d895,5d01d53a962a8dea8af3a4a0ccf6b2901165cfe4
83afeb2e9374c4db290c5669598663211c86cc10,7809930b08765742aa3bb1ee307850e5a86cb0ff,6952ab5baf2bb78e2edd6fc8439348838c39f617
c32ddf42ebaa64e8cc136c8aa3ec88110efadad3,30e7406be3f112c3cff5bbbd88073ad8db08893b,8e436e6335f79785ccd5b4629882877fd13d49b7
3ebcef32ba62ad3f66c33e983b6c6b62b516bb31,1258439767d790a3cff8e567ea283340123e0063,b739d79f9ba4e096c35dc3da134db47f75867fee
2c176be2fd61a5da4520b9ba74e6d4de0e4e3a4a,868030b3fecc84668396e5536b7211d389ff65e0,34b3af7e9249c80bfd29928b6e85d722426084f9
901dde5fa58392d77b49bd648be0c72b475ac287,dbafff24fe5f38889834288c7b2b0dd6d1bf148d,c70f2c63cd9f0675a11031cd63d7ea707f3defd6
ce598c15ec5ce27ccaab373a292f250fe0cc8d78,46afcbb362df8f808307a213e72ecea43c4c6634,5a3883b1ab9f38bdc9f7ac82b62e8f0d87c93c74
d7c24c05d0ee92c575f4bee58429b8bf31eeb114,7132973847c3bd55518db8fbfcb2e410430f7150,a86623b97a80ed644ae83cc62f285bf0cde3aa43
295daf4a7fca682f9a043bf284f75c0661f9b53a,321e4d5837f7747c6ac08b58e3e760321df6b655,0c4d02ff9cc3ca0c9055a6e594c983b10edc3902
90bab63e513c3db6a75d67bef0e76304935a1b63,6d2a7a1b27c85a67ea35210900d5e5e27d8ba9d4,70b2904c48d6075c895a9d901481474cb2712346
3b08c6b0ea1c7d2a960bde6e004ee8f0d59b786a,35a4f96100870dd1de78141caf90c03477ad8758,251a93456ec25acccaca2cbbaee7a09ff608163b
1736950d58bbc94bcdba43bf1e79848c1bce1c24,d5a18f03a857c623cadf41ba2e26bcb32d9f93b1,d24cfcb31c283c66bb67c2d57e6be8d6e1fba971
deefeb1ca0cbd905cc9e677eca59c8e6c9f60022,dd9c76eeecbc3f607c7f9973e66732a6fd61f0b0,1f2354752ccda1d531faef430b0094daf6c66869
8dea445ffe45d8630f7835058cbf8283cd6e7e93,7038d18d5025accdbf95d3b6f8ddea4025542b06,7e78fc1d7faec4d9263b3551e0c3efe55fe5553d
bd168fc5520871b9b53601659a92f68568a31276,262cecf5285899bf64f3be1511692f34aeab7dc2,4b54cbea1e5de056d503cd1c195d1759c0b3c474
99b1283e2ec3b51085bdec70f7d60f02bdd98d27,3da4cf0792d73fae6a0dad36f2f58fe6f02a72e2,8f3aa926781ca9fa06f43c8394d53864a6498b0c
2d77a2c10478d1aa2d65520c5f0b4022e4280fcd,9f0f31a1e91daf920f45121f11e569328377011c,d1d2f6b7017a3ece17383831dabf9835bee88900
7bb6b525b1183a4155ebe3c51c1aefe84a2a5f78,90a164bcdac5e814327c161d2ce7dcd9e4a3c725,b7a4965ac31cdd9584e980ce3082e8a63924e0a4
238c9e576ced17809f6587d9114414adeaeb4329,f40736438cf33894a6a7b408da788d889959f699,2b767c4f8bdf972d3413db62b76de03b5ba59a7d
4cd8193c7975bb1a03ae2f9fe36d043462a5a38a,cc7e623802c1dd79578718708f0a54647263fda9,817ec5e6f284e61546c133fb7000f780c3c7d7bb
141f2403d367ec874aea7f192e8b9e1d003b96a3,d69cf3a440201fe5ff83b55f8c3332236319d0e1,955ebf2f098c47de6e3209fe55469965c79542f6
fc46b6c57c2444fd5a87915e683ba725f1a10c9f,7f8dc75604598da1d48340c5c46f471a5102e9f9,4c9a0403f4c79d12055bd04f67d9f52cebce3a6c
5947143d8fd2a02ed2b0d164eb4ad5434c335f88,24e3d95fe018bc7f6b9604d008b471855c09023a,ae953214eea3c5b8dff0255eb02167bc7cbef58d
31431d99ab5a655837445adf2fc2339d25a1ab98,6398c42a3831550ff98de4f629f474bab796c086,5edc520468a3b2594d7ddd6795a2d806f01d9ed6
5a379cc256b6e89d1031584bf2d49b1ccbc82c1f,58bbbadc16877e99d24515f7e05920c47854eac7,f23f3a4c5e194d651d180f28beb810848419f716
413beee9ae1bfed7219fdfd1249a123fab87aa71,46b4f911753672e5044af4db7468f3ffa02d25db,fd70fcace6f414013a726b5f45df78e91459befc
5d8078f6662f7dd4d24cc5c20696a5be1cbacab9,85edf1c1ebd0fcd58ec25d8f083ab5345d531bd0,c418d63c16021b2bcc97e6c5e621acb6945445c6
867df5362c21a89e6aef76d32f6f6a717d80c9e3,0a0397c9f5c30e67ab1a94e4db4b5cde8288b92b,ba0768b6a6156b8c57274978ec072111b419ed6d
3a1ecd4f167c06645577d18c1ffde5374b8ff445,0224d632f1fb094078200318febb294e828ceeec,71df2911da2124b7bd69428bda51dd6964e51c5d
81fba52adbb01bd7265cc598200456d2367f5167,45847da69310f4b42a005119be640012399c961b,663040a666d46d3c47d40c70dd2a36ded405e854
ba203c0564691f1637798193368a292f14b9765a,970ce7f24325e13a153816d8612fec071e1e674b,9230ae5aab60d4e085da647271f2e77779862251
4f38f12815c7cd5b02c1dc987dccc248dc442450,3d5ab366e1d6d2df5ec2c6edf3a870df2a0213f0,5d1d9858d1fc68fddd69f5c7d940f84ff79282b4
14a7429e19059bad9c62c2d2e0fabb544db17e56,4936358beebea71d5f20ee4673549db61dc60b5d,8fd0a27875abb2636a1388876f590a3a56d83b56
e7d590724ac8b26537fa90051f065a86d86bb443,94e22f1262e2a692cf1a39f1e6c47af351ed436d,3662afe93b6a35f38d1c7fc50945c14fded32d59
d29f44e1c730ca21c4a283925ec1241a096bf9c4,fd20dc1086b02fe2dab270a5fe77afb548d4bbba,9c00a8b616c42979f807b6aa818fd50b4e724ae9
a5a87fa84c08342e41d177168c616519ff01430a,69786ffe73a1247e34ceaceadde679a03e0e0d51,8ffb72ddd0ff843e830641aed26fd6c6bdc126c2
a019536cd5630612bb81e87cf98d665456076d7c,36286441b245ba19b1deb984879e173fc7de8c33,0c6f7321bfec374bf9542a1e664911fff8e893d7
de095c4631c4ab452e02f0efe665b4d5ce1adfb8,5eee29e5d1fd7b11f97871235f722b8d3aee391a,2a87b885b1c4d20f94f85a4467daae794188b473
db2875cebaf152bf1dc77e3517039a77743b5b6c,fd1d2271750c608100173ad89aa88cb9517cc211,5d9771d141a145cf168ad7570c99226c3611ad9f
16fc8c8d9a05fc4f94c0e489892f0e82ad530e76,50fe8f70f5095a318683cfd9435c5a8d56ed95b5,fa1203029f8885b25e9324e3c811d6e9b9f1058f
353fc13257104a006558df876a8a2eaf61424ab0,cc49d256ea2bd7324b054a63a5f4051dce2ed135,c3c3e99c6426da68c901d4a2314133b6e32d7df1
ce9e1a3419a525d024fc4f9ad5af6c261cd44f7b,d25820b83050c192461c02da3803cb16a066d2e1,aea0f3e667034d0aa878888bc0ff3d870a25fd2c
dcf4e4cb2c04adbd4bb299b389913c84ed56d0fd,cdafe680c2353d46fd1f00549e158a4c5f2fa8b0,58eef0a5aac53db1d7d5d7bed2515a535522e6f0
fa2e751f9f0787cc827c7cead21f3b36f12d9b3f,e3e23df7e208a0c72832b3528ed99446410e8dce,ef6dde6de305cff538f8cdd0bc4dca13c5574f4f
d14fd51d0b2f47c2059215a388a512a5c7d6b37f,9e7cf37cd6aa8d01ed7ba2c3765877631505ccd4,ff2d71869966b8f39c8a0772e108b766283ec936
9678542ba611d2c0a511eeaa844d760879903910,0fa70759a20202281c390ba48b8b46d7eee37d14,eb3a470f456c12ed78c52e9584db5bc8b87581de
19a69640883fbc5a0c0d607863a6a85673d6f8c6,435b57bdb120166870537cbe299aaaf8b86820b8,eb71d11b9914dc9b448e7d1a18603da807947c67
02deb7d954b37850bdd92822433cca41d27c102c,bd1d6f335db93b5e5912e4b60966a254e07c212a,14b7eaa46f2d80ec8db5efbd5fb71d4469002504
f6667a5143147f88a862a703d1baf1cd922dd885,56d91b4ca79540828c8af3950d6187cc210d17a2,d8e2db269197b6adbbfb23103d3a7a28b193163d
4064c5f39befe1f71d70992b9e3e02eff8f7fffd,9e8bc7c93574678628b613fff8319b541f1cac21,11319353fd0d5275bdb7a36d1ccce97cc0524099
3949be69898e3a724509357a28617376e8a339f4,b99323bb193977646957bb6ac6529e0288c0f963,49026e126182c2fa2dbdf4941e6d6d14b3b24c9b
79bdee3278415121dd1c7521cc4457c8ad3a8f25,3ae1b04d09a165e164e3697391125710604f5124,03f7ef4c6336182ebd5a053f8d962438abefc644
03dfc615dc450f38fae15cd06188dcd56b877616,cffc69ec1d0fd94be0ec1ab6f54302b1d3158371,988dce14c7499b599e7a707a88941c43a822a931
c3f4ad39a3d93a445a490b963ca1015d416db6cc,abb9401011e6985631b99c28b49a8c1053b6d886,16163b74ec9daf00f87075afea385e54f9813e5b
7ee889d4ecebcdd72887fc65961bd4a362db0dcf,a2d3522812a74b2715191f9d447407582fda6951,df4ec9e8e3b59f70b37bb762f50d37725c22bda6
8ecdb2e9ca9b32f1334f237612411e7e17e5d1e6,35e11cd6d4df412a4a193e63b09fda3c9ba910f3,245b58c249b4b29ffc54e6c1e50a1474cc84f7b1
e0041a8244b79abd964007b694f78a8e15bda682,29bdbdba95bf5785005d668aadeebf3033d3e29e,6c29ecbd1cd0e51977fba16d6ebb09ba32f4e520
67fc9a7853918631155a509ebca0983100e613e6,00c2fd40055ff5ee214326de04c594231b9a095e,533a1138857ba2ff5daff90e569c521483f2eae5
5573bee314cc43d3eab0cb29ebfacd0898f7b453,bdcda8660eaa0f02365a9000a55c7ad8ac3becf9,33c4a5dda713b26acaf35da6ec913ebde848f54b
626ef4ae0ccd379e74fc660f914e5524952e6c7f,9d765af6932467e439c8c850f43be86bb40f0ed9,af8783e8d2d8312897ac6406b2ac30af9b6c609a
e5de269664c7029770bb2e4092cd28a9a31545cf,7f8800eeb15ef2db9dbe43b91db194b0e0d0e53f,e251c8e2ab3909dae2b91253044e8be67a00f6fc
e80eee5da54e32313333c2ca1f6dea016bb95c27,e3c6ef21d101b8f95dd6d410eba8990ec9e88845,ee3258c0daaa60b9cf3c12e06317bb17ae886c0c
cb9f569906d356aad9005ae1f22966c3182d4452,fa9c7a92c78fc257294bfe2c9e7d92dfdb69be18,7e5bf5a9fbc07b8e2459545411ff41499679687b
2d2015144653ffdf597df5a9f24e78a1d11941b0,cc703a9c59d1ff69db1349257be86eb7b0cbeb16,421b06affe2d3f2a3ab174fb60934feb9e7c11d3
31e5b2d9a4e1874058b586667429956b61a46101,b7f58dd8c8eacbbfe8aaf8632b6617228ded7485,cfec7251954e78c5e2353a6f842bd269582f5d96
59d300fc6ed13237ccaa37bd2478fd07b1588a25,172a4a999bfa8f9d0429bc2e41fe363a778d8821,cb67577002b81669c34ab1edda2df068058b2334
e19eff13324011b667e4d1b85cc521b8eecb8eff,f481587bee170e0545df260fccc9c653740e1513,fdeaacac21cfa72ea0148158fa8da9aa67035881
ae04e5d7f0c2527677b7c4ce6be2c235a4635c82,c6a08cdc6e57c5dff6b586c40ad9fefe8c2f2a5b,c3ef42b164cfdee2dc5dfaa5b2bbb7790799fcbc
f9530437c2fd229250b3ffc48c0536df3456c192,3487c34ed9a2c87128c39bab5a5dcd336e5ef66f,6842c5784d5a6b21584bf26428a01457c21c60d0
1fc7667b3bc86cb83ffce20cace69ceb679a269c,20a47afe13d37f5d4f77c65f3437b4849f5eca48,7d12e8cc6dfff734632d92f9f6a8ca824a7c6cba
ac1e0f96bdf26510682788eaa26a813cbb80a7ba,c8f746b88170196adb878a3166e566be1189dc35,d275e7a7e658debe32497a50c5e49d61d154b294
f20e6ff323dce8717477f7d1cac6e70ce0c07b73,40bbb28fd2b877cb94ce03b5b0ffc5f45760a83e,137f392c66a298d58a03c3ca336470e5a5274efa
99ce957111b021c5739d96df65ebb11fb274e71e,79dfd9fb51a82eda8f6469a6236a78e7ba6f7f6a,88a8871c622794893012bb90c75253245a945d35
47dcc5b05b7d41ceadf0a7b10a5f6867ff110df2,2d295a381642e32edbbc08e206453d9251753d53,e1e89864620fe33d035b7987c470847d87b808be
7747c5fc27e6e23247c4d200e3d9fd4c060b9770,4b455600b8a6c98158383c01cbe818a3d80df6d1,7464c880034a94a76aa06cefa0b1c4133d8969f0
5f3050961f57c1ecc58565e6434ad93ec44e14ef,2f914ee2d89b64e629fa93132bd1ff126322b223,83a11c2a7daa26276316ce7cd2fccc7682532213
1d6e719e381c3a58254f3fa6cdf2021e630d0871,5c0a5b73c7cfade35d402e59bca06c8a6167a3f1,7ee0ad4d639e5a93e73056c343e792b7b03e6d1b
ae6b204c9492b9e7b369239b91af6a77fe998c60,9b3447a6a4cd9babd4b870b4f903bd58e918fd74,6bed497c7c3cba3bde7cf91a4544c67e90b041a3
e1433adc2e40670f50d53cbb7b20616728923478,d82335bf9a833519e0b140c666e7851f6afdf226,0ab0eefae0d359b976d1db4ec81ef5f3709d853e
632f13c47a1208c1f3ea5d05f880aacbad14bc70,87b3b089d6e5cf75078b21dd4a389b4609e2ea04,bf24882c33b971c1bb31effdfc865ec6d67eb692
d4f0658c0273c43dc0e36ad62c9aa6935096808b,798a1b62192d72ad565d4cd642df9c4c0d9d1664,a969097a8098a6f34d6d0797c9d0de39d9fa2d85
13ab35e3efa733623f0af62b3f21757b4de8e481,851accbb4b332cc720d4723075d8ba42bfd0d3ad,52cc02aa3b9b9b4987a724423789e415c1727fdd
60b329659445aebbc9468dd6e28a4e33124afedb,91f3f022fe4d75b8fd44c115e5863039d09829f7,7eb0be61273e009d716df175d8c321dea5230859
f505822ab5f7702187fcbca8fa5511236fb581e1,40c54e9d37736815438e236c15df0c996b3d16c4,da54d0e8f7efb83515a85c84b49c9311001f777f
6248a127cab04750c174f58514f492b759bc7553,a61a0cce4c96ba0173533319b973a48ebf0e53e8,ff415ba39c27148c52edca43e145b46d4cd4ebfa
61bf55e0fe5ca647824e11ad1254691af65c52f6,f5caa9940ba8869791a45ac22bbcaa461282b9b6,04984e9af9c5105b0ebffa308b2b8f97d72872a8
276f5bdef86a1a6edb28d0fdd58685365eb357f4,f13200d68b54786abd242bb1b0de2f1851386add,f4d96906c2363c66ff50f2b9e526d64c37ccd819
85637ad5fad7b0df35d26453779b00726966b164,6f584333e57f4eeda948203e5e2cace032ede931,6151f7af29ffb7a09cca8e6d49d0fce3eb564c46
da1312698b9f05bf26fdc7ab73aed647849b06a8,06fc84037ce1b08f1e26f4e571fe6f8270f1f4f1,a041f899d358832ce9e08d2111c4f26143ae8cb8
2e259ee3cc5d72202d207b5d6775974f791bc4d8,0a915e883ef0479aaca0db5ae9b68c2f17ecff34,4b3ce0c02359b0596f8099beecb18b6804a7bc3c
cd7e3f354b0c0658929aa8ad3648df80a0b9a0f0,f28ac2bfc6424e5eeb9c3acfbf5df4fcd8a6e6b0,1e66b2464a29125b2ff9570e4af8f453574cb409
2a1d26cc905b54f2880fb3f2c51c32a300f32bbe,bb3b1b06a735f552b0861973710a6dfcad99ed98,40c11baaaca151271e95ba91ea6973de369f5bb0
3e9bfedbc44836e69263eee77dc88c9b888f75f6,17c422c3f24137f2db2d1ffeb80664c85aa70602,8ea92a8280cb2ce9e847a618edfc2c65cd1ed6b8
c882828fd06dccda4ad6914fa4b71c5f3708f5fb,dea1855126c0c5ba379d386253cc03808735bd30,d444f750f9d58cd751f5d567e4e14d40f14aea10
9e307f5c3a408a44d0caefc8feeb86c1b23c003f,94b728005d2dc935ffa03fea63af09f10c5d57bb,acdff47554beb7135ab55f2de0957024970760fc
e775ecdc439186d8d2491925c11835b8fe2f082f,c6116258fdfa92ba483a20da200c968f7611888b,ec227bb75942e940502ac23d58370fdb6a7f640a
0802edb7101071b56a56ea62bf6acd2e0425ffc1,5b71ba2a9bc65a6acd50edbecaff5a1caaa5e24f,97eefb6ac3dfc18b920dd73366ace4334670fa0b
fb4b1cbf35264749d6c4dab1e3050d6cb9237620,af107ca8fee33355e8c35fab6fc5ba5290bd3ebc,cf0716123c0f1feb9e5fc84e9831a8d6ea22fe9d
7e6eeebdf01d8b666c5005383b5e087647953216,7000d82dcdcb5e061628c521d4139a8bf43ec8e8,ba73f7376f07cc32f8ab20187909bde68e348fd0
a9bb9f7310e0db16b56d31c1770b901bac8dd813,7405ae275803c25325ad0581ab3b3275c43a1010,fb33da5f412e0bfc3f36d73cc2ba0d1dc0b24000
3889529e4508035a61e270ba60ebf4b5ade11d02,4525edd9f7949c1a8b72662e9a8c77b46f917171,d8f1aacd785f7d10f6aa9d86e861c3ea5d71c668
92b0ea7d02b6573a4641d1431e08675fbe0b3eeb,4e4f55ac0e34fc39db0c76306aa4a1f8b0029c0e,06c1a17d1312c1ed5d2daa3fa1bfca294c6b959d
f2a8b8ad6a7943aff36bf84bd3cdc8c75f086027,b8a78b135c3dacbaaafc1475c1dc9ac75fe5f155,80a4a01f12de35c02a443d59af55d7ab75da6e88
ea7525392644e484d6fa0c6315f0a28c2c496408,3ced30f8168409baba430b02bd843f31de329c78,f2818bfe7afa76d1a3a7e006e2065c51d1330788
ac6e4f59c65e551801d0a6acf0f5d86fcbfd370b,2a315df80c0dcea764dd602e5152812b1cc56e12,599e2df71f6368e913e29822de9f7547ed5b103c
ef7e4f6f62fdf6ab920f3185dcc3006791a249e0,8c2aa326833e7f287a2059547cfd7fa5af59c130,a6354741e6e9d4338ed9b51afce5b14842df51df
bf5d75e5944cba197baf85a76cee434f3cd33b20,46a366d6ae0dc38d606a849e2b34ba3462d28feb,36e32ee607b644e0f2f4d963b0916b75e501e606
22ce9006ab7f5913237f44a5e4b6e088d7211957,a352a12bb42e507cac1645106bce2daa671335ec,c477816100404a063cfd386cb9ba4feb1e33585a
707f7225314f14f046fc0036b8580d7a2e44133d,0f57151d36944e190dae33e2299cd838e048ed9b,5f2410b87106781c786808f3ed3e3b38b574fe13
1779011ab4dfc7e883f49a837d311bdb59fc789e,0149d26adb6aa25b60d995fc88b8dccfc0f29880,30927039a6f2cf056aa57b69534cd90a70576581
8465710329a692ef64b2d88295b9d532c0dd577a,b8b5d8410868bae9efc28c1692b0bf18757ea049,2f374a37b7ad878b277916d0fe7c4d410328e207
4de6b3e6b9aa3af34516ac8ece2fd8187bd17955,cb44d7d4e2e6a9445e466f1df2ea659da12e727f,abb79553d293bbf36d93cb3f3349860deaae0560
cbec738829ee9bcb2e7bdb879d439121a06c1e41,ef878794025437980c7094b25a71e898bd36dca8,a20209e691bfe1196e52d533feef12c74cb0fdb1
1e3f72403eddd7eebe95ad4ee956c4d3863df9ce,f5833dc0482b39432519552050f9d9af6594b02a,96dfe3d03a8ce36de71970fe02610be8eb384389
b89487e7217f9e9c534ae10e24e80d86705f0a77,6d51c69dbe8e5a256704400b57764aeff2200248,1a9e246c29df8ab0b38ecfe715917c361366d8cd
114c27fb4e921df3808ea748e3c6fab528d9b26f,4ad7d552a1057da1ae1f7ce316b6e55411774f18,f59eae4f81228d9a7f06952dd15349c8f96e5162
fd0012deff5ef06a302cbd81762c3bb4085d36f7,051b9840a54206a5d6748e67b294db13aacdefc8,ccf409c8a08876dd9ba7f10bf966134ab129506a
00859420abe2f23c644087fbc9c319c0389c2e3a,9bd7401ce9ac4d02501c0638c85ae1623392cb64,f7a052f8846f8fb76723de3d13f04d2514efdee3
9bd33f7a45d5f62d7be937a3c3e17e8b7dbe8abc,67dbd0cdb3aa69292536a0343c718b4f90872ace,b355ba3d39870b671be98a13cfe64a571a4daf1c
797077855ee7ac488a555b7ba65c615fdb077359,a6a17efa42d9de2a1206311b536b5de0487e6a67,3885ce98ac05b1372ecd5b8895ba323d925cd34e
6fc79c7ed04c57dcb67a64c126ee960fccc7370d,f6c16323fafbb73c37f0df3a80252ad65fd46e82,d409548842031d600e52fc3871ff71bf0f830512
9b53ed53e3ebaec026ed20aef53cc4856a76d55a,1f5efe2a95174c9a72f3f4e7884dce0d3cad441d,ec0d98156cdfa010b029c88075d56e414db885fb
044d9467820ad2c79dc6200d8e36848303fc4993,e1d9be897a01c86262f7d39cf1a4a136d694bf9d,ebd674d40e107e4e8f093b4e28e067beea068312
1201cc024ed4f14903cdd59e26a458985f8621fd,451afd6e45d61fcbe6236803fb12eda7693355d0,7da6bac960893bfb3d690258f0fc11472c0aa1ec
3c16324f8065a20e737028144cc624f6d1834bf5,73c6cab0961f0bffe52aa6d81985f56d08e2d654,a34ae2261a45f4843fcf8f257b1a162b962ce88f
22cb46fca9876d6e199beffd0a68e2e642b8dcb1,d3f3f81e1627ca65878c1539e0dcad32de5eb382,76e7833a201b8de2b67028606dd45fd0ad972e79
fca4d3315bd3dce1f2013d66e2652bd157c60de7,11784cb76af3bdd83a034ed09d524eac48b39e02,6371d5f26d849975c0a6400fe46c153327603796
ae0ebd1e9326f2c863b23eadc2f0a24b1c007960,6612bb44347f5b978356417125a92a715900236b,9b68c7a5f5f0da2e43119f5845b60923b09ad801
92671c9b85c7320c80d6ded7727718ea94047e41,3dd6a8e24e228aa6a8883508f4eade692e088726,872c22842ec17ffd691eb365dd4d956687f4ed7c
404c6e0c15075a88a0128327e2d9dfa4449a0593,32be078ab8c2c1c7930d48b5b2f8552178f2066c,a75247d9b0f072cd37310da1d3a47822efbc77a7
9462d6b1eace21998fcc832fdfd343479ffe4ab0,31ef82b9c6f18e699ee8a9fae53dc5c257456119,3abdec9c953d6bded0f7200e4392c65a61caea5a
7a3a4244d105e3b32d79b52b692eccc62b362bb2,11287f018fbf940beed20d4e1c0c09f9b872a006,b5659df4251fdacdd80697632708689cdb64f8a5
30e186be784e320264a7b422e52d8541f58131fd,f424ae392999b995c51a205eb14a183add9d38ac,6f87a572affeb8d5a21d9085e986d98933abb22d
2f2b378c0346142566dba0f71a25248b651ee9a3,a9a711763f0f41b97f806beaa2509ad77ebd7542,aabd7c721783ea8db3983568e75918d5b8b6db2f
007df5d0face645c15ba7ccb1a851d93c795cd44,236c11ef71f341e9038730cd56a2c732670fbb45,124c64152d256c1e62a1f13103c2bf5cafb33155
2b70c64d09d8d58476034e1cee01b30d96c19e3b,5a1e6c2e914f5fefc3e5dcb848b5c3a5182b63bd,931d4dcfeea91a734cbbbb4ff28beabf8b9bda34
7cfb87b325aa1b0300734c04f338395e8d0e56c6,02c3f328a21d35ba3d4ba62150761a33d5dc4cac,2678522db552a5d377fedb1aea4983cb97ddf324
70a836c4a21104120f9f993710fb08e9525f97ca,48236401e002fef040b402ecc37844edaa13984d,4b4e316af02a968f27147123b189b04a9931ba79
069e040e49c79b8ce1f8b73d85e02a05df6126b2,16152cf948f30f16e1e185626dad97e298c843bd,fc44c2d4c965d246fc7915dd0212679d9a27d77a
4fc02d3d09b3ee04f0576ed25b5318c6690295d5,9a42625cfb4b042284bc2b789bd4d3f65ecc5522,90a40ab9ca5f0dbd344b28110a5fbe31a86fcdf5
7b4292c94e380e85aca13f6644419227f3f7034a,d87a5cc9fb3dea2cda54a06bfc4fabee195c446a,a807e185912a5ab61e3bbfcb7358e442256562ac
993144b91b468ebfe0cb0b2cfdbe93b8022e748b,6c71fd461daf8161fce6e1d4242a1e8b33f21271,74272975afea5cb9681b5e23c6d5df3e94e59021
22197641b883bf4ad288141feb49caa0a53962a0,3c18dee6945d3cc2d8d59fd7909bfb1db1cc3061,56d64b007f7eee75266dca41fc570e9286ee6e61
1486ab7c708eaa3f901a49adc7a2cc42a1081d2c,4a756a2d30b395b5d1038e3220da45c012336e96,1b3a3a7983c3553e38b1a2bf1fb3166053435b66
45ffa40b71d623e404c72413e935e1b0ef97389e,43c83b3ae60ade6916303a524f058febeeb683ad,df6516c29f348078c0f86034544445eedca59103
592df7fa5905081b23eba908345cff67fe584679,08f9ec98e597e7afe9848fff43fe06608900002b,b625afe8001b7508a131d683108a2e1a7550667a
254b85c352c92f8e8f7d4bc1acf10f5faedbbe51,6b47d9d9ed74d375c3c17b38ec215ac0cfedb90c,d479069f8c045b26678dce30fd8a14cefde3b611
77b54f501f0d1d6a45b8b3f11f4f6fec1260a4c3,5a87855b062c5cc8d0bbae3311d82eae2e099ec5,2ea35e55b199904b69341b46a3f25fcb29557f54
0af71da9cc956f8d70c81ab5dd7c3e8484af90dd,1993c5d1efb6811791df0d7d78472e383874eabf,679c4454c476583f1b28d179ceb8d54759aa63f8
b777dc21d70691a94c36cf921b428ddbcd36db2b,bbcbd4eae1c0e63afe7bee64469decb6d789118f,f4702ee139ed24007942b9b463974d3958fa1bef
3de193467d7d304aa1c0f3072af2a54f690eb821,12d015a9356bfe9511bbb24c05d2a9cad9385e0b,991ce83a2b5a329abdf175905196cf1032993743
40a60591430e4639b7786a1f0a3c34451bf73bbb,e7d2c93ca7c764c4a7f9764a06f9ba390a76dda1,39c48f0d0156f562e8e286003d5504baed62ea5a
c6350e2903d5d431fb53e4a5ad5d5f2e9fa9e9f3,21565c22849db95277d35ae21b17298adaf0d285,f632e2e7be71448f812fe80f5dfadc8aed22dc8a
3a5eb0ec59725106d89f21b1086f22851dcbd1fb,251b18b9661df41aa9de94df5f0fec334d3323f0,3279e6335112c042ef8f723eb1476175bbf5e48d
147559349b257db80d94aba077a3bef23409f581,20698bb36f16566f16a52d7c2c4965d6b1131512,b7afb2431c1fc7bb7e29a965503dffd9e95aec00
013491c69f6068b74240153c95bcb50be5da21fa,3947922fea2604edcb2a4af366332cea338c5907,e350264db18d5ddfe8458caf6a88ec687c3ce4e4
892454ff17bf5a12d3b7543c71ce149b9cab8f8a,2ad3c6dd97d08494ba0406b59868a5fd1198cbb9,ef3155c2eff240ffc64af5b713b545e5a0ea9b74
42324235bd7b9a00acae016699cb4f9c7e46177e,88836b467e591b57523bfdd06590dd6f58977d7d,3188dc18d41b540d6241e9ea20e918e217e55277
9989d408fd2e010dffc655e492d7882d9a52449e,27e89e07a359c9f5388dbff82bcd169823553154,93521ae8e87b79fde427bba35db6dfc8cef108c0
e50c4f6373933812d8fe57ceaf4ceab1c963cb32,3099e10f41016534a49548a5fe82e93ce6e90138,346118187b41859b88ba7c4b196493a809fd54f6
95e8992e2f2605f96187d057a5adb23b5109f163,49f789b92aed40ddeb16aa91b95fcff61b386982,c146aecc0112091e382e8c709026076038783409
4dff373feffed88c558076962dc7a9e9729033e2,2acc6337d817d6e041281c4e0393ef7fde833adb,c7b19e2fc96f01219e4664895b13a5d86ae7e120
a3573599718aad825241c4926833270091ba8b52,9bdfbc24731d670ecda14897eca0add4786871a1,684ef3008fcb26dc1318e6807d78e72942d9ae4c
9132b54b3b9ad8817fbc5bf20ede4ad947c193bb,62129db44cb6ccf173a6c2e34c6c1a29760c9479,80c0fc3c9268c59a07747f7ae88a106097c2a2c8
507fc9c1ff58a7b97b3739016838cf06f35f956f,ac974c9ab7418908c996b52499240a88ffa210f7,34be9e464331921895f19699348ef7c663dd7e05
f42b0bf6f556d1c8c9ab2bf04a5c170d62b44b8d,9819df6fe16de513a6c253b313cbd00ce4b3b11c,cea772308039d52e7dcac66ab46c1fdec607e67c
bc3131688af996b30fe4acc2e2b55d953ab70f8b,8f0376c888e2b8626f37b8c8ce00a704df869ba0,424c8a0ac0edc9a8cdffdb62687fd1a750727172
f8339a43eaa2808fe22ca13192c92b5c8c200300,6cac8cc77bd6f36cc5f312dc7e932108ba5f467c,135a88c888e24e3c4559af7fae7d2f25a668f7be
c20b27ede9fed9798af41af9fac56b3785ac6cb0,a880367b37004dc22aae426c0da8618c941d1fe3,96a712f7ff35dc5ea1e148bff113c3b347c1785e
aca97274189a9511dcb3ceb878b2984138b71f62,08c12ca4392fdf66b007ef89f4d391ad35a64b8c,27349661e08faf0d35056945bb9f845bdd4c7030
9e40d536cbf5d42a95ba8c69a15b64b5b2b25e78,34d1b90921c78fe89be27ec77cd3e61087063c06,73c68236b6a7943b8f5207a78e58483bf96a2737
729425447f65fd44cd5a47a4379dd807a8cb8130,0d2db1a11c35a88e2c24705550768792acea5f61,d0106d08b9602633c00c758c36aef8a3068cbf5e
ad99285fec1def7dd295c799935a8082f95a4715,77f5abac667cd81758ef39f889cf5107b920904f,bcbdc4ad92c91d8544741bc36dd48f0f7fab9671
30a4f667c171a8a352952bb008f7f7fc7e91284c,3189e4245d158f1a9ccabfc44fbe5fa55be2d2a8,678ca16d951ac865d47b2218af3ce8de81e86aa6
cfa9935c15439996735e322741979c4394545a64,5438bd66689a1d50683d9e1740a85c7b81d3624e,b449829a40d30c6a3de0a3cede92062c561d0dd6
a156a9246badc08990c28fda1b74b6dc4426de23,637ede68793715269928afd0f0b174249b73fb86,2c689fa57253e3940cce0c90aeb41dea25eda155
46e8cb3e49219d01e61279455fdc6778b64cd954,b1759d9e9181b23b5298849c2bb9ee2b0389656a,fb2e262027c88fcd40a1f79cfc70401bdb9919ef
2a8f2f3662e15b66ea1364d057d011e08de8728c,014785833f1cdfae202ceaf2f33b45408ee10849,8c9c1d9798636e75e24410f8d18cd1de9a75e566
2146ca3616be92349bd106477daa15a6b95a17e6,222cad35a9915a39ed2f83e44106b1c35a05976a,662f069a219cbe2c73d727086623964634800f93
470cc8eb1c05f2769aca541105070c4f5031da28,aa2907cffa51957375f70b19a613b72769ae153b,819e2638bb490c73b4f73473238aa5eb239e5e83
65be647bbd03d92d01302af29576a070ca82dec0,705218fef11b511c23a0e5b024555332e4a5988e,2a957e77bf1b7c61414c3f18f41240510f135c37
639f1c476f25339367367195da4c04e7ebccd05f,f976083e7fce1a1b274667ee4ab6a2142321ff99,5631acc401d8f2149e0a8d50732aa5e0ca49d152
7e4ee79e65eae2721b5b2785a9fd3eda878bd7d6,47f6af4416d8ef3d46b315a80fcfd9c9f8e5c574,c239ae9414d743ba417b15abcd3f4b638abdf5a8
d7126bd42cd8a697998355c31feadc86312414f4,523ebb42cfd9705ef1cc6b4614e3ccb610eb7a87,28154cebd19d30ae4f3f0219cfc3496bcecb0a22
e858343c38650d828b410d1a655116ca54cdc981,17298086cafacbb5bd61f75d8860441415fbb984,0290f364cc73f8d43bb80de8b94cf942393c8f60
41e554067a781db64def61fdce3d952d1290f8ec,db71a9428ac5ceb25078f792019137fe560f91d1,8fd53df3cd8aff0fb6875649a9d00c9dc5c3fa68
f51a893d1dc17579e99157bc5e8c8b91e9b38825,d1bbfe4cf75aca2bf00ec1cb1df43c5259fac736,a9a85711d51c890f453df4212ae866a911432458
391512546e73c8ac7687b1a6f7db65aa491447b1,b787efb7fd4c1dcc169f3ef38e4aee09d426df3f,0a40d927cb5a9e7ddc2889dcedfa6980c6a7c9a6
0d41d86dd29e5a5c73692e4acc841013809d55fa,b51f3d6e534a178ae60fb26454e49686553620f9,1f00875f8c0c8abbc0ee7d7af98b8282a4556f8f
79974a96713d98fd78bf838755c31fc44f2d0a48,3135effee3b9b61ccf624547eb4c6f9a22ad99ee,26db93d78cbf7656e49d700b123a33d10b5adea1
8e929b2879b133c1d49f9054d3a9ed5a0c7e1c39,aab0884182ec68f679c454fcea27fcdee30df7d5,e147e191ca2aa54fdab540a8076f047a5e36bcac
5ef1ede0a4f4f63e977d0e71103602c25f8ff579,a96a43d0d8933118e0f8d6224dd21747d9316769,b41c8342c859189350928b08def09ccee5318ea5
1e0640c9e99f3c498d3ce4cb726589fac9662093,c2cf21d176a9a6db501940d2cd7931f1c651aa0d,ba9e9305566658b3153f311fc09ce20eca55ab47
44d9498effae13337ae677dcf2c59e52e6ec2f4e,b033ccbddb9c6ce1b486cd21493e07b6949b02ce,4ba19f5418bb0dc18ff708c2ad73e7cee160fc5d
afd0ae44eecd5252eae6dab8a34b0d4dc97722f2,d5de84c6c52ce7403f6ea17e9330a1cf7d5e4032,ba3de67f3bbe7c6fb7dd93a4c7dca28358ada964
fa4cbc89a5256a5964460afe6a105e1390599a17,c1c201f93c721dda2fca9058649b51ec53df9757,66cbee5e31091693cef12ba3c533ffea59e0c549
fc98a0db4f917852568e8c777bb229ed7f2e53ff,af8202be3d829691ed8fde03d521581c8a61820e,3705f95b925b46ea38a795c81425d06de6e2fc5a
96a368fdf94976f59bac41f4da6c222a2833ea16,e8fabb752a5bb2506421e911497b1cc0aaaf9969,4836ff29bd6df688f05ed8f1047cb43f54ba7231
79f74bf8cbc84baf1776c08713b3659103d86541,9dd0a1f3b59c01b9901688cb77c93a86e33abc24,04f3784af5fd1c73d88a00ece5bc26566313fc2e
759803f2689c544947533e29231cd63e42f6bf9e,2e23e2b0fd526e37e53a5ed07821159fd9a8822f,f99fbafabccaac7dd1cf69debc8c983973c14a1f
1dd914ffc8989cafc9415682a178a900249ca091,b7374401fd1c7390bf675877e56e3b386492fb14,2a0eeb41dfe764055b37f0680eff6977088fa7c7
9753dd964b78619828120f868b6ad78c9679a45d,b9cc9f2e8ae08632866645ac8e885cdc2008188f,093e227edb4839157cad181ea1ca84af6ff73132
f2d45a0e9d7d46e4d86ccb2b3bb66c610a8cadbb,b352449eac03cc090900bfa8f06b097b88e80a91,4141df7fe6b1eabd4727d02d7d025c4a62cc0d64
f3560004cf486d89cb97dd144337c825d7ac0346,02ed51ea2541071642818c72552216d88aeda71c,39fa96579079493b11e2c94e2dba6c924bceb13f
71784254ab5cda0144cc92d0909533fff965163b,497ff94cb096fb436b9916b60120b7c235d01d85,38c32bcada3d600fccd74eb60a1961f0dbc200aa
d772a42375334be095f5bdfa06b601163695b9d1,4d73a9e637ba7ecb7abd2c849e5683dbe33ada67,458a6000e7c0665adcd9e55e7b09351fcbeb47e9
3d4cc7c2f663e3a4363c4f16fdface50f50ead8f,7c2c8581b7d3543cf28d8fe6c917f09f190d7835,2bae2a451c4dd4571b3ad81be202253050fb447b
3dff78621cbf792076eed72a35848b4f572c5d9a,3022927a6f73b6a74eba24ba6f941b1e78096037,2276caae243820b7dc60a7b7feff79b908d96c08
c4b66c89f7c08409f0c7d82869e473ccd84fd8c6,9bcff94e9e7674ca6b87f6aa45b5748aabd65dd3,73b563b3679e0771fe3d0f546da7695b9f911e1f
7172397077ad2126b5d59b985ee1f266d65663c3,19a9d4c4acb2d5dbe4bb14756517d3e3d85d79be,9176efbab4ef437703b08d88958ab3506accaca0
f5fc806c9d2cc3c880ff98e92f33f764747e6713,4f16473baad47661a858c77d100d8070af688941,001057b52ec0a30b4ab3a7c5888b11de9e8aff87
56ad37133e6225e2a4bf8dd07e9bfb19e0805489,5a07298ea516c581c06c1ce1b784fc3a6201159f,7125cb505c0e428110713679df6ac681bab49a0a
2b3d7dd42cddd513b70d4f7ddb61e2f7766cdb37,6ccb8b83dae165f9c48b9db693d7cdec6dbf1ab6,3ec0437d5fddb885c204ed9be2abbacee1b3346b
099faf2d2babda25febee94149772fa936244b2e,a49a7763079fc5df0be15ec3fa932015ccbbe69b,2edec13a0f2be3066ae9e6796ea7811b60971a56
7b2bd0b91766036ea7a58a8b5600b10523c5e52d,c2df0f23006ec371479ce58e37e5f1c86878db31,db19900eb1c6a4b8580f03fd57506a2592b80314
7eff3adbcb31ad65fa42aa2ea461e569fa947995,14d46bccba450eb00fda58f7be532e5438eebbcd,8ac8c79a71abc78e50e5fa2206c93ff1a555f144
57809eb922c2d9e6dbca04fdc54d3c020905df88,068f0d2ec8ee953998eebf578bcb27d821be4dac,3e29742fd9b4d483b0cb3c7bd1b0417e6fddbad6
5b941e3cea65f1bc58bc2189d6eb371b3c3441d4,3af74d2fd2a9a431d0b0b966b03d2fa07cc0e59a,dfde4def62ef9798084f4ea4a8ccd2963b9e354b
a6f1c04f22723ea2da0c5938240f74fe87552aeb,3b1d5794e9c7b06e2c8ce9f11610b479d3a55132,40633835dcaa2206cf041bb5abca51accb39b1b7
613a6e796a30c0e4ee4e926b92f7d5ad8213e817,12ef0668970c478becd1661e2825d0d0aa2cad3e,0cc592e9eea8cd2d1943adb20db14fc32d5a64e4
61358b1eaad0f8b5e605d58983b43c1864a38da0,b5a4f8837cb7abec3818eaaaa304ae2a4c2a17d0,3f62c5f5ef62b791b22aadf5059041619e88a5a2
3f40e00392b6701dffd95c5aa1cd38a9a4cf9297,329710f5730f6aa9baabab10992a50435b29a390,f150fc6b7cdf797f9cbbd436ab40ba388f4328bf
fed17122f85f08ee9bd0ce89ce3fdd2860e35eac,2b59000d563d6177edf02ad3d6bdc73afbbeafba,ada6d8ce5e1dcc4c5a86f63348fbe1c50be3c8a7
6143b8b54d03b8af9704d64fb25223629f0baa6a,7f0d582a4a46297bf021722e993cd40fdd121997,531c93a04e58755dff30399d08c243602e404080
042aae24554402b152750137c37ddd0ba079418b,b88107fa1d7eca0004f0cdeb149f2cb15b711f13,7f4b94e4087a46b3c89dfb8731ddc6a0ba2c015b
e01de8098137ca8a8fe9f5d0a95d742d6e8e7eb2,55c1ecedac40f079be9fbf04cdbd1dbcecc7660d,2aa0e508731a84586222db50b8937831ff8eca44
74abe873151caecdd73cb2442631050bee0bb7d3,483837ae5cdf79f77aa935f79598da4c3740caf4,8b71455e3b43235a283b815771ec85060dedfb6e
670e77864372d4e45300e6cadbb3d860064b7e1a,951f02d188c6233ff7e08ceb54590e27f07cf1f1,60345366f254fe85417c2de4e9d0ccf8f2c85d1c
f5e89ded35caa36d5dbf0aa664c0d26de59a8983,7757306c7885c915de6620ac62ff83cc7db96f1f,a46733218725a7650c3422aaf18c2fde35551330
258331e91421c438e80c926e79833b1f4845ffe8,287c298f378202ba9e5fa38f30f9d12bf8834366,04554d7505569d1dc67bc66f64ed61251ca1c51c
f72a795cc7f2f77d88e0c41056cb7cd4cc996036,8ef29235c37f5c8bb054f134b8eac6babd4b825d,db9a284d60127aab3bda2820b952df53d4e65665
e7f7927ca9d6db490e75d66abb30d8b71a358e90,a084c8829f6375f4ce90b68d7502b8b4a1ec6145,69c95115f6a9410d7067e624db594f5c5b03e5fe
a5d36e1bc6578d7d0ee6bab5f5defeb71a21c499,491462fd023245fabbd711538a8fa57de3306bab,db1ef439b5dee9f0fee101db4ea4a7119fbb1e3b
23fc0fe66a9d780615f6cbf78f0fa955070ff426,573d69c8fe2c62d414757b026140f1afd8bea956,a506fe95602b940cb4a5baa3e448d486fb7bddf1
589b2b956fbd6a738073b760f6e7298ba08c9736,6dbe1368ef95661336b3d81157dc67710f7e0795,07a8af33b16ce3e69e7d05630bc6b7071136cee7
86e04ddd5c5dc2024425c268e2132ebfb28798d3,50c221670f87d0ee44a000b2bfe47979787f0dba,04bd105cf5d2446cf6953e424af99437327d2abc
60c73dd14be996d98af574de4ae98f99e56cdca7,695a260ff80e53ba01376beb6ec8f0d7076851a2,cfb28c765471db145c14fd64749770266205c2b2
f8c2d4a6320417c267863bfcb026ca0b3d687702,6654faea084f0c50bba9a059f5593769a2be647f,20e2a0eface9ee9e46ca52b173ad1c522402e55c
365e320119208fc45b355b96d743af7318c16b47,7f769f024b1772c5b7796b88bf21394a39cac89a,9e0337f2483a3b83187e09c55f1de6f66f8a690d
e08c7b3642a18d76bfbb16b94224fb17390fe3af,5e90aa27d5435a07a44f5fbed44b2a5009a5a0ff,d5b8e49da276f3fde5443de72e5c338fe6283bb5
552107f577ddee5ac76eb2e8ee6e17cb94b49bb3,a063a538638d32c10ee10e4f5210df43e3f719bc,4c021c100a496f2ca5e2c1d8bc8a376c7bd94516
a79d12ae415573a66f6e8f3aa83081f0877d2d2c,34112c932c36c7162f866b4460cbc3700bddc92f,2f4390ac9bb56128deeaa9d0c1a590388db9eb94
9b1eebd333fe8737fce6ac9b31b2c186e4c0849e,19c1ecda547a4d1c97887a8479ada467bdd7ae8a,c0ffa18ee246fa8079c83e3461aa02a774c21dac
cfe2d94b251692eadb8b6e188be60e5c7aa49efa,89d9679b53d03e369e22b7cf92c9d5ec1dd2cf98,871f60ef61e733b32cbd5b4c4baa9be196f33443
43e6d84f33a40cd994ea08cf3d02ce617da9d892,0794878b41a2bf44dcefb86d202a0b23ca13af64,950c1d1693007106f9c8449640ce5b91da4019b6
aa6209ab513c9c7b00c73a1d84fb3d5cd87cd5df,e3870079b223386c5f71c993b69843a64f5fa44f,a61e18091a2275940cb7020abe3a0faee9ca03dc
4d710518598a90b8debb01d145cb3af298d41377,de805fddcd15b4eaf9d92764d043d5527c30311b,b6097a0300fbdb8a1d2a18429f3aea0e384b9782
3d2945726a482fb6c824e4feb8005782b40b7b75,8d1660893be11aa243991c52d4dcea7bf4d63a24,66a72cfb726bdc5370de99c0f6524469f1af218c
244f1dd83c703b6ed07377cfa50b88d1fb23cfab,763e0a14fe4b1077e2dc03cb764bc1bed43e72a6,8e23dc99a110b33a6e24ee75e2cd71c4564d6f1e
92e86e7673c326fa09cc93c9ecc0abc2b05068be,bba56d627fd799e9d2daefdef6c6f3ad64abe7d0,23fa725b0127903999c65e5068ff98e745f8354e
27e9dde81a0738042331616aec0d3dc4f50edc43,5d2be4da1cabec726ea95c0e7e5fb465a7f9a9c1,90ee079cd15ffbffc9309fd542686680e4606f95
256597be580a279590586176daee4e9335b3140d,ab878adfff2f9622574cc7f21fa6c29ad6f953b8,724676db4315a9a3a5f26bb6e4c05f9c49f80ebf
f1f819516ed91324c3b9680dc7c2cd9f10e3a423,569c40611687015c57eae7bb15d1b814c6cb70ca,732f1d9df6b379ad8548d0b7348abf40b672aa7c
03acadaf1ee9e47ae80d8287cdb9d5ea133089a7,0d11b5bf29f896a93e3f3af271b92628f2efb00f,1b5ee0d063119990b66b0952d80ccba4f39c1fe7
df275152c24173a66895698413d767f52602152c,f2b924573a2f26c134f2da49277afb8772fc0b37,5193e8332cd0c3daf4f661a7cde271b13483e2af
3ab5acccb175706526b82a53805d2cdb77366d0c,a4695a7015b1a3b218cd15660e276230e5f9e776,7dc6049de9a13b7d406accf3fb16c649adf2e6a5
4fed57adc13e75bc70c1495273cf9caa295c0d07,58d6d64fbadceaa81b96543fa2aaa02d88b971be,3e14eddaf6137e2604fe3234da7b4721f9c3bd6b
43686720c3225b2390c413452dece43a9b4f9d39,381be050a50fa99a05b168145c1b66e66a0c7d74,6422e9a803ed33cc9208a0a375f5671b69f5a524
be26429159dbcab219f1cab5ff4494ca89aa92bd,0a0935990636b0600c4cd5a606eb145002614414,b164f5aa65ade5e2cb8b2a3861bd73cc8fcd3baf
c81f433795128811d65ee618a1e2b5a17fd8965b,6764056eff5104edaf5eef1cd8dbdec087ad67ec,11a7b8592f043c9d4f5bf98379afb1aa9bc7ec49
0d402a13419f68233a97b28919abb3dea383333f,997184778a01718472c29a67e70ceadb32194e47,0caba1e84df0a72ac4c3fcf71dc688854360d2d0
bface9fd9470d0a8fc68ce8b3d8c98540a7d7038,4aba225c8bf7e64fee347d77557731fce563618f,616cb382922c96086cdf5f9298f690af5d003429
75ce122d36626cfb3423bbc2a1273bdfba1765f8,c1d124d497149d4ffa1998e9c84d9eeffc04b04a,40504a6f9de8930c6e308427631af0ab225dcbdb
5aaf863d560f9d6dc88fc511a27bbab06ed96a23,52572e10e92018a165096c9a530b4cb7d4cee936,4f4d8191f00d34702cdc0f9b10ec90bc257fb75c
92043c6e209ba987b8326b8abd2ae9b0a5f81b52,f8e7d0bc097fdae022c6e4e2fc22ee61cbf63ecd,fc5c35362bf995ea3d9c4c5ed087da508f7fc90e
4d428d945ec6e13053cd96536bb3baad6149c66b,d5874b00881a7323897b6d80e9cea2dbfddcf0b6,bc9b8af04b6dbecc12d22b592a4e4790e21ee3ff
6753f869878e39ec6d0a4bfce351861c5f69a462,04a42bef84f38626ea7fbfb102ac949d1b819e6a,bd19575f92a952a6189349c9fef5e17194ad0cde
bdabf674e1c9cae5387bc3abe884fb1b17545c98,a316229ef67f1c58f6b33996637e888f11cf72cf,254d0c0e2c7384bb225f8376cb1fce78d4047cd7
7cda3d9e57c4cab68647b2de91179c13472fadcf,ebcae70d72fc7a381f3cebd8760e3634eadda5cc,e5e386f94ab4f87880c4358e40dbc31a22e50ea2
2a2ec77b10bf6f25093123f55616c5791bfe9eb1,0fbd418cb739d5cb4dfc4c21ce6e67e7d17dc961,b581751ef339554b63e2556db2643e421829a1be
9ce97e6ba58f78ee3132c6a9b4e252506560f055,06a728df246871ebdf1dad443f12df695617f425,5947adcd7bdd21d7acee39eafc39266ef4776e93
4263ff44c1fd7fb1c061a79b6c1d67e24e48120d,531cc0ab0d1b22803a1e5b55a4ba7782f853c375,1f8a9c708efd1f18f40aefe98e2cf3f3393cf07d
b98cc1ebfff7b107ae3429844e19a78e1c68bdd1,4abc498f2f37d6b789eb3229779f6e716119a479,05091cf0dda02c86b90f46a20d1aff82309fa1ca
bb4d7a7a50d593ec2a1676f105c43b0411e90063,fe120269595d5fd1a50660fda2f374f2de341117,c6c834949fd50d42e5b724ba4a5981ea13f9c5c3
4beb4bf8b20a899174a472a7c5a5c52c54f01bc5,7dbab3a78f0cefad954346be023db3f0460e407a,7a60e044e3bec9814d891d1761bea3445eca284f
a2174753c1a89a039af948b9b7a72142b3fb6324,1df56495b7bc2d97b6506537f34e45f46e19456c,4559620efaefd84906cb6dff08ae912c662eaf13
37b607143a8ed79e9cc4e497535970d539cb2933,b239365479351d525b6cf372e7defea70d486f7f,f0edd62b88df48c4a4d97f5038bc6e35433f542d
2c8db3bb9ebf1e76b6a30cf16f3e9ed188018d69,d9eddc50fd7d1d3b9becfc1f4706113bb49bcffd,c38efe6d18f2b49a3e6dd58b8a45019543034462
5502d6cc58baeedaa471cbf75ec57509dd3a3c51,63af4e173dc10c05c6ace5158732eb1f6bb053dd,b54d9cfecbf88fade10380b310742c78d002dcad
13028db5a4418508c42143c2574275f9d2b0f158,fcf2cd2bea510174b60d78d534d331aa2477b5f9,97efb03ae67b7035d31b89984f04ba301198b7da
af0ba7be83258ee9f9b21f45fd645abf093953ed,edcc14a5ce33716e0e51d37dd4e281c0465ac369,9b54588d75372d25f022459da9bfe131e7a23795
2808873d1bc4e9cfea75304d1e99f39691298657,afc568cf93fdfaa09f75eb0ab65d3cbaa2f628f0,30e61067a0ee062c25830ca4aa5415972a0dc5c2
9d1c81438706b4f59bc37d7f7905e59617dd48ac,15baa272fecd73081cb57d776969aedfcf7ba1e3,4f707c3d7eb52dc9199a7f369436ba964dbb67d8
2507c1ace69387df7feb0d805cb33ec6611089d7,cc47a49c81781928ec5a59e127d0040dcce8a855,88b6bbe6cc9815f45f954e955a2c0d1d69e82c62
56632b720c4b0dfe65586504aad09855984e8cdf,627fcb4354a9027f4008b793050a60e66e482958,4caa471a241bc1bb67d6374bd831e1f58687dc41
5be84e807933f3bb545db3502e9787d5e0b271a2,e76f9e5b36e164ef69a4ba68cb10c21520aba710,58af742f3a57c156531c3e46332dd558194c77ef
6cc818cbe3e70ce85c23f3f6bba6bc22f79909a4,8f0a3cfce77aee2a6a85f76c1eeb5615d45cd7f9,809fb8333433fb37349425d52b026fa43a99d61c
aa243faab836d9287b124de54ef2fe125d556198,0bce44e342eeda9f92a915132e88de456b867637,3d81c8e51d16f919680b66b71d3fa68a7d66b177
78381bd1ae37be8526eae9e6979c55c687f71d67,82a3877126afb9658096f981be0ebe1ac2d18a59,93eb40b05c4157a929a6cf9c4946c0bda6812833
88c98a57419e0aff7c3ba8b7478cdb119c5e7ccd,afb68dbcf35ecfb9a3b5671ae481981423b4e0e5,84a1f614d96a2104f99e3be8b707846462ad0c62
36323fe424c1b3e543c4706dacd3754a806e7814,e8af7427bb0ead629eea25ac86556605b1dea252,850964f321a46cad5912ceba6a7d682deb144279
362d2b50df8d28dd4f769b6c90a18e23d5edf12d,c5d04d1a541555b29b176bc2cb7e96bed089d8af,f71b6f341b7ffdc3e6e58cb60f2f8884fd92fd25
195e7e09180e7187ffc1bf5a83625162651ff051,b4de0b2e9c8ddd9dca7af3f7f24bbdd825dfd7e8,0a62e6040b062e7176b404926328281c3355e42a
c49213c561171e398d76eb7957f8e965cbf2295e,d88da03e7da8bb0ee227a558db7f18a6cfa83942,3f95fa50efa96180d5c9648b354d280090ba4cea
651f5cb8a1e914c77dfbd99336b2b6d38da558e7,2353b1adee799a3821832dff63cfda1f4cd30b2e,0acae47310dc0a6fa2ffaffe21b2544ba869e100
c5d7e6807cce2042f90ce429335ddf0bb0223144,11cc085870fb6f58eac5195496f64d9d2d7f5ec3,3c8ac8d35697b44a8caf069a925da30ed5aea2b0
4a296c9f5dc776d68c1e52443758efc52c5f21f1,8ffd7565466fbda97e7551cea9036314fefcba78,42e4d66c5e4891900162f826f868e0a177a82ab1
b2714052d1a10ab417ae2eb783b671403c43922f,6104cd321c72d825b6e28c708bc513f8375af515,3685b50e752eea9b4b5c234ced112624b15a9b58
7eb782446e41d1c60614af575f74b560320bb325,996eaf16b36c0517a1985b88adceffc75d86efc5,8873a199ec1c07867420b46d0637633801194e93
31b7fd8965f0e707d2411c82dd03a11d96a16493,c8337937b374901d58d7aa4b9bd5af7674084a19,19a66947bc974b4dd1f42314874c26348717f1c1
792cf056eb5a2c82f83b9b81588a46a6e6337c02,0e54ea6babe4b1966ded98127de92435e6cf76f4,3e2cf16d1ffa53d02e375cd9bee14d039100f6fa
d0beacc35fdf89306b82234e03d99021a5986741,6d3bfccbe3f2fd59bd3ae9247b992c43522ba8a7,a91b42bd8d65dc68ff22ce64af52a5b9358eb3d5
ad66f17a876853bed249a1fd0727740b352af9b3,788797d0786e45a34d2715d280fc91ac9a358bbb,6d3b74f96e86e18a02101971f6d04d77eada3911
996ab2feba4407d20b087817aae89dbb13a659b5,b29257fd05f4ef1516360700a89954e2f1b48506,4a5a2f5ba2467ffed2bc718cfacd963271af636d
9c54d753f56bab86b9b451c8f4415cd041357a36,da2bd5f78908e630cce860ca25fe7da8454ce6fa,a5ab1c03ea466e93f6fb92f4c8da5dec7ed24b1a
4b5c8982ff496d89a179061ac28cbd1413776ebd,3023a9f0e2c82664c26c89c15dd2ca71f7d0c2ae,12dce172f95e77e67672ea56f25488e3bb42b288
84cd9e129b2cb9a674dd105856a6fd6441ec585a,d1377777be89c2515e6769e8f551257bd6d98d53,1263880ef02c11403bb728c7a61bb557faf0138c
f5489b567809e6690dd4603154ae0b0b50c0fbec,b776d48367cfbef2debb5c62e383192be8d05ba1,b2d6c36e70cf8e5b1f7fd558a70ff67ae41011e5
2b7d9c5a1fe1802c3ecd429e6b9f6821865de9a9,bf96709e398bba07fec3462e83d60dfdb1dbbef7,921e73ab0ca3d1af0b69d86d165ebf67884c422a
e2d8f7b68fc4ee2c687c2e16497660aeda0f6418,85149ab9a4c96bfe1b9f1defe7fee3b4b6a2c1da,3d4ad5b69487e66a162ce2844350f0e57c05470b
2c053b4f9c15d0cb14be6bf39c5c5aa1143c2a7e,5f67d830e74a409b9b17d52c7005cb15472342ef,c793f4227167b5f2bdb8e27396ae58ff2bad2f70
d1cb341cfacd61705fe3a2b9e098243faeac85a2,9710b2cbb406c6fe6bfb66b88fe72906038056d7,c90f78488c5c590a17d05c3880dba5077263c207
09bd361b484806a5d45865a963d3579b1133e787,dfa736bdcaaa5e466bdf59563601ae2cfae6345c,47ba80a54525b5ef8662f28282e4ccd73fc7d698
a0e2cd36382e3ad061e54cf9a32804b729e527ba,5816a4a9403df29aa77a5ed54e02d4dcde5651d9,aafc22bd74cf83c82037e51a1699abb3517cd9f6
5f118da6001068537b38bfcdab33319d1a0243a4,b2ed667a86f9a978c6d2eb6dae48e3f1932a86f8,4ec76072b4e4a02cb94cbe38363c12014181d9a9
c45c543faaef72817b1e1d9ddc7e774f599b9835,febeef03e4830cc4ecfcda0a5236e6f6b86d483b,33094d263fdfc7c0aba42e6bb9c48d349831207a
b3817f6d9275f887b48fb10db3400ec2c3a686fc,c6c996f506797b54228c248a3784265582a4975d,62c417c8bfd8a82909eea05dc63c52661b545e67
8738b4b47f3868d3c795f94743aebe743a1ea49d,2e36783d0e4fd89fecdf84623a1dddf32e491109,a2303bd89994f2997949a6f5e4a6043604cbaa98
11fd466394d945f20de98d013acb95b8603437c2,cc23515927ef60eb3675a5626802cefbce0d7d2b,c15b6f4516adb7c8e524adc70d7adfd1c1682bc6
7bffafdf8b0adf60492709c939e24c73a0de0139,4e1e35aef550f6a05f9307b0d39346f39e3eceee,78698beaadba891b06eb4e32534e95b6fcd08c91
27943baa2f65cb749ff9d0be8c37b4298abc1c60,a423bf64027c49e48d69cb365831a7ec15bd628b,cc7b6d0b05fd4871c2ba9909d6aac59a74837800
a7c0fa0deffdb9341c31c45bd3f1918faa42bab5,221d8d84aeeea1c61d689aadc1a13017b9cb5af2,e63c03125a8b066638cec8593d96eb8eb38ed3d9
e41912b07644864a3a685ac339de2085d252706e,cb11e2568d5afb2616e29fda4fe6cb2634c1ab40,f94518a9aefd1cd9511a9816cc842e838c7d4266
cba109c55d10bf8f95b8cdd88782f109c6e1e7ba,caee96399eec1c792b1168b222b809d2b424fb57,d401639b24ba6635c3dd05718459557c216b7b27
d62d6af7ec5a5103b53b0430ea07952e36700e8b,225b06e84a29cab4fa183ec914291ecfb74ddd4d,4bacec0ee36e3f999ed33047be4136fc65aacdf2
eaa2a2006c6c6ad4502c71dfe3f7746b2237589e,c29a0d029b5c22e27b14b4a5f59c9c389d7854bb,d41f4c7c4e806156ffbec259a83016fdd598e58e
ff295bf3498bb353abaf168a8834a80c33e8268f,8f91920c9bec7eeea70b2557a3b417aa8d90b58a,b7ef93030aa9484a8f1e34196ee1e314bc069817
965964d07c0ba60f9e13c5ce1ec577be698d65c2,e73dd883cd4f1efe93cebef228c9b2119b1edf4b,9142ad8950d2e2db6b115cd43b7a9471f1ef227b
58dcbab10e05674baaf11635fffaa8fa5b4c45a3,5ad02a3799684c950e71879877469b1f1021de1a,3caacc529a4b00dacfcf3b75a0ec32305ca79ff1
ec3fe2f99029fcedf165d41049d038a75f8382f8,3655c469825be8d1b8bd81810001049aa0e28771,d9d231c87534ecf76b51ee362f8ceb1509a62e19
792eafadef3b817d59d64706b32906f5b33d2ec8,91149df87f25d472ee905860129da887fde63f5d,cb41b22fdc575e248db3ef960ad4efd449fda102
96ac7f29f7ccf21a55fe34dd90b511076b6f706e,39f3a72c625daaf370453334f069b170bb7e3d5d,87bf6a4b5680796d37efd0d6779cbd4ffdfbfdb6
166ccc49a108d29c967d0d8e91e5f4e435507b86,ac5407268cf8b160aaa714668dba7e2986c695b2,cca536a86a82719d2ffabe7ed1e54c16c92162e6
02fd6f6e54e5e947b20a87591708439e92f1c587,13afd5c6c75487336b6ecef0a62cf0220f5e015b,0e9fc31dd7c0a55227f1b360acf1b851d5d9ef3d
dfdfbf896da044c1e175bb194ae79b189032cfe1,bb6d4929d88b68fae8f0eab3c43291aa34badeaf,db250b04e05e775542e030bbf3c1fffdd616671c
3e9e0a0f7db475f96238ed76722ff083d470ec0a,59331c3d3cb4cbe05ecd209ca2c221e598f842da,043c3df292fbea7a70d7c86d70811dbbf00b1bc3
d6d92e366675c7d73713b66966af423cd46fdc87,09125e834f81eda0f3cd6aa45d51e1bfb4401ba5,0c6998bb110a06cc739c3f0657e403aaaf0dc0ab
14bc6674a6cd8a7974266635487bf09f384d02bf,667a0103573e43d1b650ef56a08a2108f498e434,57b8f28574087bde2fdca66d5f26e8eecbb2f433
5da913de0ee29c1d4f70569ddb248e996e761e27,6478a727d78ec4d0fda9522f279b1cf3c7184c46,d7122c6338b637f0a4ec5e780764104350a39dff
80facfa0bf6b866c9ca14d2222f3631f8f7caa54,15f411a3328e2f191fdba93b851ed2cc0fe008e1,a258774ba958dc8332d0d0064bf8fd4eedbd9f47
c455e942e5dd3bccd111e086d798d69b9ed4de10,b1b9d1f341feb04d4dc668981e469a0fc864cc62,34a5dfc8856ca177e6cd8848b41ef2200741f508
28395337766e49f89b58e690ec80b3a140201bdd,a5bad32b7c1bfd2b0578d7cb2eaffa71bf4d34ab,f6e6b807d5db9adaebd4f17f83b331bed1e09399
72dc2145e9692cae4667563847612df46e37d73b,e6b89c98f526394b5b7fbc197a551ab3e8229c2d,a1720647670f3e009f0543c741c3dbf46f7e778c
55c4986c8d14bc058781031f016bacda3a8a4c41,cc936710a0818e446e8154999a200a5d41f5e450,0b5c50ea413dce745a264bf418f9bc15073bc2e9
2b86651914f674eeeb61d4c9a739a4b0f45a1003,2d8873d0854df357c28def22214ba55d5f0ad2d9,941020af1a9cc9f5136668d1fd03be5aa378c7ea
42f2e5f8ad0ca44b0d13b98b98c167354645d19f,b62045809d9e996591c2bb9f2fa80e34108f557a,6f661e44d0af94fddc382f5c563e44a53b2bdcee
f542ee7b92e90fca148df15f35c50d3040d3fd03,4964f5cf76586871ef5350d2c4d62de6a9156599,848ec1d2197dfbd696b5c69a8fcb39011ec5ec56
346adf7f556fda4abeb469c173efe806cdb4b7a6,0daba072460a9e6d5240b61fb28da62c7483066a,601e05f17f1e82cd60a2b4f863f68b5f44551459
ff820247c3b3ae7ba88bf244127b6a36abb33423,e70c8985039c67cc4dba5371dc515db77b3b942d,ddea92992347f28a2f9a0043b7743889d3e3e452
0000682043decf5ac145fb13535c1de0ed570bbf,3047ce71bc0506c71e21db1725009fbb983ae3cd,06a5ec5b5c771a120f864753daeacae98f6bb0a7
c17ad509e2c3589a781f96da8128eb3f23188806,fdb1cd38abbeba81032f75edb3df6b05510774e3,719220e8a4f5b2b30bf8b7261581bf84c72555e7
1d3ed354debe8b6a937517192cce2abeb1dbc347,86d55055df60fa6c773832076cbdbd29d0e2ec78,28f25b2df0b1422fbcd6ac195a83cfbda40e4d9e
e14a3f17e6d8d6ced42026b3c49e1f6d179e983d,315819692a6a92cd1c22f7a2031a0c0f139acc63,d9db6809373f3e8ac0a0a0d0123988982dbd661d
fcf085b141dbd7ffb23f79e3bc37f52bc7b7a1ae,985220d94c6092336c956ed5dea464eb80c6c0ce,af1e6fde5c8e7e77a96f43366b0ab6a69b1d0609
bb25c604cf7281bfbf85edae9f90ecf78aaf99cd,f20c76d73baf4c534c487b2196b9291de88a3d1d,d7ba09f5432fed805603c776afb6770daf65bb53
e2bf83b5734772ada599ce9176ec4072bc60f18a,f798141d30d284a7471c1c4c5f8f2edb89dfad34,995d2d280a79c02d3889fff62aadedc74874ec4d
867786c9539272bbd6be20a4614bbd5fbd0a0a94,87615458481ea121410a7951a387694af6a65a7b,2de0be96334891fdf07966fec883e1b9c612fcdf
fb0a0cb65c41e07549813b86cc6b9afb3d1c7430,a668814613173d9a682271b4c5a85a5137c83ce3,ff34fb16455ed861cd81137997c187b4906e7011
b88d12c7b9e35798bac97672a92ed9bda401696e,f3541984ee18971ee2bdc8d8580653828d85fdba,4faea3a1869969c91c3a17f891f88a24fa1219f3
352489c397080a5acab70ec57836256de380dfb0,fab0cf953719bd6a772552ee374c77968cffe928,dc4637862ff15560c16e5438618e8daf125b627a
17d583a419b65457783dc7b816297b69309157f0,7b65f85a0b9c398dea2dd5bac7cd1b6140480950,aefc1be555590a7dd6aef6a9b625f7ace096651b
ac6f74a6a24bfb0cd007bf8745728dbd506c5a04,887de9f27c255dfcba30973cd24b1c98431d6b05,631ec771578492fefe448d4f861283f04f1a5521
9d3b105fab0d6d66192678520c14c20d9d638357,f7d14128b53ad2147e50042d1d148e4ae9de62b3,1ba8255af07aa5e3c5a75d487c47b7e97d4a2016
ad7c3d9a098dd5d354390c3497e95681b2ee0f73,cc14f066771b4f7814b8295a2f85e037fc14f6bf,18b8b9c566f597015de7e0c3a03ac98cedc2a6fb
154ada9e86cd4b6b42857d97437caedbd4d0104e,721e89fafde6662c200a5efc3d67bc5480e4386e,f26735fc778f7f1a9ce234c93f1fad5002fa04f2
a88288bab3803476bfa3e54c432f8cc3ed264b0f,b4139720e60b86e64780e535c74176676ee2b67f,f72f021da42839f838f8161a5d186becd1f21368
324deca817a97a8513ffe60bda659485b739a734,f9ddc3ac66d587eb8547bc09d33e855db16b033e,86360152650fffd6720af949cd52579a735badd2
6878ffbf041008c0300f263ec901ae645ec0414d,222f981dd17189cc46d30d248c13d9e50e128797,15d1d00c34f1cd0b913afb83bbd88486a6ca8053
075057f929f9a197b4c3abca520edcd61315ed6a,2186846ab1d273fdab3ad47a053db8bf3cfb717e,e4b717c81766d4ee4b614e4627887045a781d771
764227193a358e8e5ab83e5a141631a8abfde89a,c75953c12bf0ce476422c8b9ab4964de607bf97b,17e75004c5fac061abeecb38bd55f136292faba3
9e11f8122f49356bf6f3429c67052d95ddc0fef0,580e9e516970c6788ec04994e130f3192d5f8faf,004ac4d1f4e0d67c811fdc51d3070c0203b0c774
b267f6fcb3f3e7d7f2e99b10dce495d510863b27,4873ec73a796b55e7002e8b5971189dd9ce570da,97eb32e6fd2216cb5e284329b4eb9758720b8a16
120825d1d6976806b5e7ab02e77ef1455598b03c,5d0e1dbe5a148350b5aa041c511a5115a04a5ae0,1002a7c5901cdb185711fc197b4b0c6cee1de91d
75e5afd45b8ad8fae83c2931a7d04e66de893f7f,c69090446ae513ade58e3c803a3f1d6092b8e6aa,e28fca97299911fbf77142d001c0b905f4337711
0a34a090e0f6676bae0ed2afb9570969b37a461b,de3a479be3a56a2bcb4f43c778d735b4b95e4d99,7157bac9fddade13cb9325499b12202009d0f7d5
0881e4fd9827791a508b5ad985e6f8def25f496a,5801a7431c7f923681ab48ad4f29332ba2fd4d9e,1f073818bad405b90da52ca942da5f70db6a1ec4
92d5e613b5bc2a33c97153c0a736848b10eb6a37,5ec489c018f207fa13ef58ef1f86a07bfd93fae7,c2c7ac634a3e201575638f6e4452ccc0b1afb28a
31cb670b2013c0128101c3b4556891b48b897386,6f222e276ed1cba81b3a1cfd328b859eb00d2556,15fe9f104786ec06addb735eaa3e4aba863ebcf2
eaa7d95a9d1994bff8d476b57ae61e93cb663760,26e2759c272b992021388c1cf0685194f6d45aa3,6e777d89671eb2d303c33a31645b9529e6848d38
04846345b2c8b7d805869582e9f3b6f96fa124ca,8cc58423174fd272b2890011b5315b2d30f294db,4dcdaa259a4396078bc00bbe98b7fe2853a4b415
a45f71d0dcf5b8c9605c20f63fa2bbe62ad6c0ce,6a3971c9b631c0e8a0f214d27125278dbd6aa6bd,eee67af68444314bc1668862a77548d1c8882628
5ec101d578ec46059cf5a619e3b30ad85d0be7eb,00db7646c8b9dee96948af82c76d2aba55a13089,04baeb2bcf31735ca563e3806e7c6d4c3fecf4c3
e5a923eb7abe7a6dc063a1c297381d573418be66,d1d3d7cd089fdf840bae5269fa4655f6c8054884,ea2ae3b8f0a677dbda1288f158eab2e57379b0f4
27fbf8c91e97f06d972c43315f2fa9c2fb6d2b88,453bfcd37094c40c7baafdfe477eaa137a3eaa43,3208929e176a2e6664f803ccb6db0fa03b22c246
03a0e6e82f4c6616fe6215e8a241b9aba7b00c23,46c354ae583e0e983ffa0bca2d46402108c6cc9e,d4c9e1f26047eaf2b6a6f339db190d82a93f9975
6e25a014e636af31e6985d017fa63455312b9a98,f30f62231f1231664b155cbff22f37ad60ad78b5,f4ded560cca46d7230e612511bf63349ba4ab3a1
250c0750a2ab541cb22a57490ef1c2dab64238f8,47d6699a2ee7a439b7bf02c4b53ed1f3638b2d99,292574f3fc2bd068c68d7fba9425954ca3fa6eb0
fd0515344cd7b29f9b3cded698d44cbea3e30ebc,3eb7a130885beda849b90b73e4cb54cc3c92c711,2c00016fdde15638a0737f51c75582409eea4e12
867ed59459168b90f10f42cb7d9b2450347fe61c,b36597c76ae267ba6b245209b1bd3e14e6eaff5e,6879a16cc33d649b0084668fb59e9775f2f9d966
4407670d15bd4110dc758305a4d74923a3710f89,d5ce344b67a811e9360b47ee0f02cbeeebd44953,1e38369d06eea6c5e8c7fbda743b6af27d147a62
b2177fb50e628d3a1fccde2245428b431940ca4b,965f759c0df8ec5383a0f0f6fad9b5203d86d99a,cc315e0ac7d0022197a7b49f4473ab219c3aa6b7
23956e9f10e8bad74b4521ae2db58b2d75b9d6d6,acef1e22d36eb351e2d9e7bf7b3c8929a894d118,c2dc342c556e5fd9a6db27b7de8f12e193b0fbb0
71fcb74e956c0022724c7428c171146994bdf2ef,1edf99c324592b9d220984f35b754ccb8b52eff9,451bb09e8f570a00db9949f7b6e3ed81652a2ec8
8ef63723407a4467752d2c482d92cae4ec67100f,aea85fcd66002e9c80162781f6d9b3458f4c5a75,243300c85fb465f5cc250bc3574667ba75dd8b5f
9337b2a3acf2ffdc6a43077a4902e71e7f4f616f,60c23daa91f9ed7154c8566e86113aee573e53f7,93eef547ae2ef3996a290ad16ce73d783f339977
e159c9296703c2ae67c48efbab431db049467474,d34168742e56e3b6e9f38ac2961eec23333f0317,c8f592d26055bf2ad05afb611fc5bef0522a732e
27b4f3df60156766fee4f681dac5f3d784de856f,ddf26cb3d2aa757a578531e5f59ba2bef189fdbf,8e74a04dc5fb758057bf1cc3d856d7596123e698
c06744b62b251146be8ecab4bfb42cc5fcbbc169,b5abefe03ed357ffdc0e7c69f76827899c9fb87f,d1521e80616f2f52b6c8fa6a1db55f872e3e763c
f8b17c410b1e347f39de7d988b5f95336b73a1a4,2f21f5ae93a99d573bbfca779593100b70db1f5a,d7fe9914a79453141c419fdfa3e9bac379868fcc
7f8f733963df9d4afa363f206ee71aa50f619cf7,2c54477807cf33e8ac18cecb469969a65bdf6797,60bd9c5ba094da176c97adbe10f61d4ec878ec2e
de180d765636fe651f86a239e98b0ebb5538041f,d3e18ccb5eef80f35ccaab8f8551cdbc7acd9f7d,2ff18e48a0dbc1fa9ba54c0ce9f0bf670ddc7d80
bf1eae7bd67e6fb7d3c29733068083f66f4a8762,2c372071fd140265dafc10645cabda2080c57e2e,e83d214e984bd5e8eb4f3d64fe7c78a3dc0f38a8
9f42931eeb56a4073864ecb6a1d0d45d11cfb53f,aa75d39ab5e07a783f97247d544f774a67151579,0bdc1fdea4812db1a728171fe9148a5fe95d2209
08b61997ca9e025df4355079a3b58a1db189d736,b55c74070211d90ee90c925b1f6576b07e9c95bd,9d6e34ffc8e4776b8bdf83c522b7c10c621be7bd
ff4e1345ffa0adb4d28fb269aee7b1dc138528fd,74e83e9d8ba5be9c594849ce8ef3caab36ea0700,4de5195a9ac9a3dd0e90af7f93c717a3c6b10cd1
dfc485c4f44ff22cab66875a50e9a7e4178f8391,a4e520180f0ab00ea3d030a151081c2598c9d39e,df6baa888b23c4b43c8d083b68eeff8eedb1983a
61da70bb72ebfc5b119b836c6b74cb763740a4cf,1fb7603f615884cb678045ae687636fe27a00da1,aa8fdabe1f0ed4157fef8c25c4a4ef688877a843
112f8a41add94fb12a75636a4b45a155725d9b1e,4ced513363c3a2a387b144a2b5639cc331957b02,1c370ccde1767aadb4d89aa9eb48b4ba68a39733
7f53d04ffdc6b44800ac1caf9276116754975ef1,eec51afadd209e60c37699ad2cda4b628a6e3060,bb92fbafa061f028aded7d3e3a22149b87af31a1
7c195d2062b07943d9bf363702d985ab84fc9d2f,aa745e031988c17c151427e3f61034b348baac48,9f8417ba522dddcbf40268f500d7cb3eaec440de
e124b07e868dc1a1441aae5306d5d8cadd1e375d,69fcacc9487aac44b1bc9b5cc9aef2d219122369,64da07da48c3206567b97cbd03872a73206afd54
c20b51a80679c899df57fa933ec3d4d32d939520,fa12dfa7b5fc86551e7bbbbccd64300c780a7e96,4a6358bfc1c2433ca4a17ff95cec2844b51f7e3e
284aca734872cdc6c60e9d5c3b94047907ec81fe,65047cecdb6a57fff0ff84673bd5e70a88be55d0,3463d469bf0d6c8da57c9157e2592d5b1cb59598
e47f44234c68c167b7a6123e56d74a1097ac1869,bb51a2134a6d5b19ca3300a0b7f262feb7b0c834,0685319be877914bf420f3a47d21dfbb4d8a4ff2
963fe73d195362fc615e4a8ee08b0534ebb43851,36d21d2d81dce53761c035f1fd68b59d9dd04424,549bc49c4ae33ae3075dc5d2a8bb452e92ef4cf3
ab9fa2012b7edc18d637f63cd2cd55c4a78cc0a5,e4f53a7e4100a9671745a7e5ad1f8ac20d49cf5d,f3a660212de69847743829a0cac380bf3450a61f
8e62bf649ee02a9f4486fd2e9340962449a1429e,cf153b0854ebc825c54303fdf943fe42382fb612,c2684c0dc35bee9fb91c408187c1fe344af147ab
ad8b2eaf8a2225dfa1059870c0e601e89ab8e6eb,a8b387a166210f5ca575c65981d4706ea51d7025,f284a6eda9e33a6617b958e476e92b4d09e64fcb
a3920d535629614e9d03ec76d143d7d0a8f34167,99d3651da964ea05c6baf3929c8f9fe70c8c95d8,56c58b517d9290198f50e8efa58290a5724ebc0b
637976e83fc692df21a49930461d41137145d1c4,f4898588551c5c96111e2a3d8c9dd0d716f33c08,7a1903cc8f084acdd210300c16d39641ff468924
0c2494bec82fe3595b77efa1b55ca38a7c853269,5e6ec33a59602b4fb5ecfc9ce6d1ba9ee5d0e03b,7dff106d14e7f9800853e63b4267dfba8f01a91b
3b0168ae162ff2b7a57aeb9114ad6beb42c8b02b,d0d07dc3bf21ab5cbe90f242202556f942233f95,9376f5a43ab500b5577ad71bc9b5b2fce4afcbc7
080d8c28f7a9725d93943ed6e4014ea729627046,3f19bd693ff42aacf053098d507cab586a642195,099134b54554c0c4ed5b871f23952dd40647393d
8bbc7d5df3d76fa56b90b07ea762ccea1b10a686,91a622328105fddad75b9a1794450c9ccda65d49,044133fc87e120b53f7091d4dcba965028b2ad58
6fc930a0fc30a339624476fe1f0f79a261632387,74d145bb16994e08bb5255a15f4d0d547b81c0ec,dc547b1426bcf6f2a15ae2eb384a20c41f9365f5
072934081799accd4acfc667b7046e13a0a54734,6d0ce1c4b60c142db8d968ea82200784c512de3c,703941dde56a38672779439d3aa3cfe93a6c3426
8fa62752d4e8a21b569cdde4644f4d1b006e6d1e,ff6a58ff89a0334a64329a29db000a0dbf91d9df,17c0291e86d90a27181304b8adb1d51d79c5b618
bf5b85e5e539afd6c964afe225614d0c90d84ac4,dfaee4f04b1c2ec66e01978b3d2377685f366354,3baddff71e3e04ee92cb792b904c9b9f5a4e4043
13f1fb60b4cc7ee884a00de755d983ae0790bb6e,b8e6610617d5067d8010610b50878c64771296a4,075966f142ca9ccc05cb5db2291a565832c141ba
5b06af888693055fb9d52146b70c356d28d06389,ff31d95a694c2c9bfd4f788ccc280c1d6593e527,7966b29b2f3a2e98dec9a097a3da18be690584b2
f674ed0324fa2af19d0c3a896ec06e33a1db024a,3d049a33096ee1906af356dad7f8830c95d895d2,8369f035bf5bae7a9d6af7902e514722f89a55bd
55d4ffa9de2999f1f8f36b7ead07d53ce281b4d4,dbb0b24de8b842780b547985e52c434d5b8a2d71,9d425ff4ca3d855ba303b815a93bfff98fe153a8
92beecb6fe00ff0af31bb52bdafefe6cc6c2b255,12843498d1747a87b7e0c0bd8d07e5e861b92140,1c61c30cd23c625aabb759d0080ecf6965a3fe22
38a059f0398a3f0594300f1a39a222c45c3821bd,312f1436b1fbf5445bd97935be451272ff4fc80f,519701960c0893ce801572c9604a91cb8912940f
eda7d535bd5d232c91f8c23fedfb26c8e17c98e7,60bb8600a1248ab490f5b5344e781967ba423bf7,37e934ffbd0864c0893f250e14c45130f11edb1b
f8d33dc1885af3d8eed394bac11f86455ae491a3,b47d2bd2c206114dbf07007ad6fce88f208015d4,1add3490c326215fb09024fa987c80435c1c1b6c
0d36b05df5d7e045c106817d54e9d4df0ea6af7f,3ae370b1908f4be08df639ed6069f6e34fad2c26,6ec460c619cb339eefb54d4b83a456882a2047a3
81e8982dd4d8d0d19899e55e511605be8174f926,f7050ef41ab48de9884816ddda2c2b1f713fe200,e46b426ca13519093fabc509cc2ce2adb507300c
47066f0ce7e8dc21393d07516de90e094610e52b,954123deb3b2d134860fc9dcd4424a3abca23e64,c496b609d18b20208fb0ca54f0b9137fe413f5db
359ff64afdf1eb6b134f69f7caa5c60d79a91222,091b0fde0ca1d8ab1aa2e7904f3a95cbfec60431,53928dc0edd2818dcf55b9cdda7eca3bf9aa73b1
82e16f02ca05cf1e64b877c92918321bf14da188,3d374727dd2e635beb37ed5de8a8f5b9ca44228c,78244d89dc7bcafd58ff04c29e7d6f1ddbb0777c
c3a0e0c6d2e401496bed2b9a377ad2d949e76c3c,3abee173f4c473633fb4e9e1875ea18fbac71128,eadcaa5dfc55dab3ed673f4d104fd16c0472bc51
10273e54dd198984719a932ced572c056ef464f7,d2247f6539e5cea8e6b31a3a4da63b307169a66c,eb67d87dec24d79a68f523e0a2e3683d2ed59137
fc960879dee7f26270e4baf2bee8dacf4c6f9b33,e440bf0e00d4d344b855693664da99ed9221e3aa,bf7961a9016220e8f4ebf9a4b2b62a39863cdc54
b64edc0170da3fa6a366f9564c95b985ea566613,1635d04b7bee15f943952680129098c58d295348,a82a587a1b750cf5fd2a409c9f1a942e78d49c64
e5d2c1a9803158671d8e7e2e32b27a3ed7ad2fbd,98eab07abd080e37907c99ef0934a62a54574df3,a0543f7f9bb7702d795e4facdd4da7dc4d3efbe7
24226ef4af57e9fd94deea2fdda3d23913054da1,f0b22a1569e315faa4954c7afc00450a35dbf2c8,e94fb2edc3aa38c27a17dfebf42cec19eb6345ef
6380df9b42d29b7db0301f50fa948f90f78521ca,c44095733c36ca1505caea5d389a35c0ebc0476c,d41579fb2b8c8a5c35d280065944a2fa4aee3d7a
aef337e67c4960aad357391e17a09dadfb1708e6,5633d5e8aac2d3da9cad03f29a803371f6a98244,33b4772eab459420afb5788ee18e4f4c5d21efc7
5b3240c8f1cf913530ca5cadb6274d52f44255c0,c06a931d5b7366d766fc9e5f2797ed557e9a95fd,47d96efe2913d5dcf8064da8697aae359713c3dd
152208c0be1952cebbb1636d86f89f277df3b8c8,f68804e9cdc1a0489145ddd82b4a7e8ea9713b09,ebb199b9d465a72c1784c5cfcb4f07b4d324f38c
ea11517d27fa00f40b626e47213f0caa8832d155,d5dcf5cd7ac8b28c6079aa2bd7358f40bf6f3e20,1d474f822e015968b3a0a5b592a454cad726ffc4
9c7cb3dbd7c02c54cb0da8f14f5c05743903742e,76406dbc36564d820b900665579540f4d5b1ff6a,7ad8f94ec4ca74e2fc30ac8278ed0c0accb090ab
1014e530813f01757a6ee4b4b16518fe2a7206e1,ef1ba48cc43b53d103b09b23906531f67d2f7812,4c0dac48649acc8b85729a7b6689661cd786d781
7444733f5d8e946afc88555d0073f32ba7f5ad5a,6b1c5861afbf20bac0a2462b7340166fa7b64142,9cf99b818d67babe783f4d9c48f87a46d8fc87c3
96f2e683e7b4e27d7e12473ea3960ba800204a80,ffa1b24f7e9bc8c7292367cf1a58c08f61740c7c,ab2db33b4cb91e2897263feecce167f40a3ee391
9dcf85a8efe7d502d9095949b17fe0ec34f8a337,4a050536501595ee343b8581c3278e7a22786497,6ac2957187119df2b0e6295fd99faa6de10abb2a
74eb7b5050dc2dd172e2804b9a1cae3505799a02,45fc515400db981d1bc9f9bf94435b23943f9752,6a88f2fc28bef9aefa6bf0ed3cef4693273ef7fa
d8997405c55b3454df147adae413ff263f50d1eb,c3e2285c45a80f3683daaa9b98863b77f6580442,5cd4e5a016fda0f446fe775e6b0de4a4a08c5b7d
bb80851d656c15fb20ddc4626ee230f8098ee074,787899b9216cf4e13cc1f584e803b2081baa8987,9c1c2acd64559533d3c01ff58a1c0c2938f8f25c
48271b880cba5d4479fc27890f3b4bb4bf69e60c,fdfe06382a17e6daa86523b886dd03e013853146,3af6a9826347573ff8a33b50748e48541e41a1e9
f8c84dd1fd36d1647cca55943c640964579d13d9,99d88b91a9ec759fca2b345d7c38362ed1c285ee,ff87df758174e4f7be7303fb40f03895beaf270b
5ca2356638e7c3a144d832668a06e8dbe035993c,82957ec5a382eb151a7fcde2bed5f5ca041b887c,8e13adad4c6ad7e1b5a3a2f6358f0ae564eef30b
8192bf1b3373484e96c6a31c368b9dfbdddddbbc,fbb2e63fea518aa03f018f42589c14d8db8ed78f,c47d6d7af0ee2eedcf79aa76b91156ed4845e48b
9758bec36c75cdde8f63d4d2f822c6fe0ce5cf3a,0a3d980f7e883862dec13db1745e75646c5f6f09,ae71ab728462e24367107623c19c4ba6aaaf8716
9730a50a5badf6803d2f7412d98cc227240e70c8,c890a126fe2ce05614b0bbff10b8046146824d86,792b629aa6e33ed5f9dc8bd6427bd87aa9c2606d
7f07c9f94d9e963f5bd457ea667178ec0b73c1e3,d97929e9cf8db0b23a936830ec3e4e64206b6813,84bf87b20dbacb2db9bc8770043968fe1d4e35d9
9901a11d223ff5407a9d243a343e0811b1e41bf4,af17e9460b17f9e0cebf469fde8c221f8b501768,0b63068ad2b7270cd9abcdb79026f77956303d7d
06b229e1c33157af5d90c1596dd62b675ae34bc8,ec4556e03d6213debed73786cfa6e9f7cfdcd801,a7fa31aa10ffd22de56175d14a6321fdcad160b5
6230de31bb7507f9a4eb6694f283f769fe0eae9a,482698e566a62166d5cbb129409ba2d4cba8ea86,0cc91a50c782509d8fac0ed8f977f60a727fb387
0530a2f6e718ed0178d417551b0d4235506bd190,28fdba2c08f6fdee34557b1419e310e70b864a41,9c6bdcfbb793f7557fc0339c251a727e8f14b701
96fcd2e760881dff0086fa86eb208e30f0d47fb2,d8d472cf68aaa59c255456d23a5698d70858c45f,b2615a9ba11f613a7920efd59b2199cfbc4f4017
8e5a54c92e47f1257e804bab50b5e045917870d8,4f3a21eeecdcd63d878b4d010796a2bba43bb380,0189276a12c2784225e4d97baacb0a7bea6aac6c
19d5e4361575564889b0d4230a10fd84973c43e9,28d248c9d41e47fff2237448b7c30d1096d7908d,6e4997265ca10e315fa140d645b9166c64c95b7b
57dc416d9608f12749c1a50f7b058b0f62fd2c10,e60a367f1b325b10428f3c7a274a4b6d24d60ffe,7da0284bfce4513392431f80b2b4ea35e29c0011
19ce665b3d95ffd9a59577f980819665b32aa8fc,92520c423e7d6a78f7f657ddae930b6abb404794,4f3271500a84ec359824d38ec2a0f1da564dc4d3
c0d75c1c69f804e924f79271a188a2f5bc590397,1a9678f4c4fd4dc138cdfb5e1e94dee81877ce97,d49453edbadd3242cb7a1077d5d5390aeb7573ed
8d238cfaa17fdc886d8465f3d2416243400f30bc,aeca33e80ad2db7c2c885c624b534c0b19aaef21,b3680eb5bda0d635435859166223dcfae6d4690c
a7232669fff29a5a4054bb64ea000f402d31bc45,674c3f04e042493b93c3b89990bc321b20df1287,348be7657df8af9c28ad0230bd81e85ebb42dc2c
3707cb4b1ec8931596f2e0c33e820358bbf0a085,a0e96fd55111b9f4512653f9f782b43a8e7b479d,a849e51a3c698f59fe89facb9b161b2d8d91bfdb
7f96a26de03564f81ba124211601a0b969243b97,7040587cc3a8be4e692a4eb85ebf0a73eaff2b52,8c98be824df6e28fad2a957e4908cf96be65d400
2bd7877ec00e5de5cb954ce87403c604aad204b4,1efeb5851ada4f52ab63cda11fc1862198744a63,bb8c3fd153083180e5f527eaa95ec5a70f0b08fd
817ef6949ae0334c4cb2ffd3a1251b4f16439bee,0d592e8d1a3c232754f0de04a8803ed0dfc1b8a8,f0298f63d0a2442d867f9565155ac77ead27541c
a0a8a6911a1d0f9e17fbd6c7f4a54bcdb1a9adca,0ab69ea0ad067a2114eb1e5142afc99cf5f5d965,c82aae59a11fdfde4b5cf400392450312126e869
88a0d4d64bc49b3c18150773506a11a487467132,6d7d567a25a28dccb3f5603644a4fccbb9f1bacf,b90ec52a0eb7042ce95d12843c246c80a05caa4f
eb722c8294f91f274806673ee4941fd40334890a,00af340febfa4f8b38630d5818f3003d8e74d4dc,aeff5b3577af8d13b99a78e0021306a2c03aacf5
9a0107a19dee80cf629e147e6ccf70ac5843500b,a2b720da564edba0ab08efd53eba8a6aa126c0c5,d6fdb384590bf8306e16b990dac52ca86f90deab
2a7ca7ddc721fee3a36a0af405a47fdad1449af0,04b059268bb291cb1b5471481bacf5aa93a756eb,fadac6a9a4169b7354b908e7ac7eb11b17927e68
25b27281375284e07b7b9047d7cfcb14f2805555,9858d9c5e67ffc9580feda5de1789b8e7f6d1b2f,9af9f140a52981f0d88b7d26bdcf2f915c95ad89
80f87edffd5b383a3530571bebdf15899c7c1724,a1b252538fc592ad908f881b5b7aa63bc152696e,2a897f5b6b36e4817a73b18bc9e2d3c346befd30
518db35eb075e4bbee9fd9f55324b96d292abe4b,295e2d4dff621a17c042f1f48474b140f7bfb1d4,072be7b0f7dd383df9653c900080513e12a38afc
75acaad1219d06bb3821c4d964dbd6bc17241ea9,213f84ad6ce093b49829e9411b597b626fb113b8,2a990b8167e0da36ce24a4e90263ac8e6cb47aae
cc92af8423a84a63ca73688c50f211869af3be97,01691e9ecbe3a4cccd531799227886d3d1ac92b1,11c17a87de784e7cd6dd4e412336a6d2094244d4
2ec8145ec543c0babf24ecd8de10d0114a91dca0,2bcd2a4a937cb2c8eb5e2e090e03816e934b8549,b713c7380bbd705f224c1bc1ad1e26eb8f5694e4
3a668d9b7c1720851d9980e132e0201d02b6a1aa,b03eefd5d0bc17a5bcd03eb7850280509aa17b0b,6db164c9936938755328022913d2985b1d3eec66
26170815b410639e9a1b233a854884f913d47068,0fd7a5cb1fb05d0ee521c98cdcff695e95194b79,16a21eea87c564e9bd99c95eefb5980c9b230cfa
053c42da3376a83975d1b45b78587f466d28fcba,6190258f5d0c9b9992e8346bffbc8c18070f976b,33afecd117abbd8c48433ff6396bc3b7419cda09
c0c0acbcb9edd11007a891b0942d2d74ee315209,3e047d3691851aa988e95fd76fe241fdb2386470,5d51a788f77f5a9b6610375c5b7f7598274bc6ae
5e3e4437c442a0e916cc3137f1a17583161a78de,8ba4c4bcf0ccb8f927c6a15dd9cf07bb02789946,6169bbeed5936ec152279666681362007726f3cb
9b2bed6fdf168b694b7c62751b208bc82d075c16,e98771608e51c0ccb8b4910376e9e563b8b0c794,185f20b9ecfaa598d6d6e3c042707c4e87273e0f
93be88b270d425ff7725db6f653519d2459ae3dc,2452e991b86091045a296ca6251b66ca3f6cea5d,b7ade3e566160485a9fa8c5f16c337fe7b5dc47a
95fae1a81d7a92d9e7511e02400fa362d4763bbd,507f0b3362db9513e09255168306a3c46d35f0b3,2fc672452d27fe93609cb52bfca8a90a1b002cd7
eb7702bea42c58dc4591524ef35fce8ea9b5b62b,edfbf2ce30215262b7e8c2d5f0b9c516bead4fc3,195c8b599c1ddd61ebaa739fd2def0db21436cec
7bba64854b52c877aac354180ba7928a903ff23f,32999fbaba853286412aed98a5d2a89262a0cd65,b4a6c22234aeb9982a3d27ca0c37e0f2b7963958
97abf6b49557961c9fdd525b4b4db4e4763d6e37,e6037961e3be89a55dcb273dd8327fdb85d5338c,7de94e7a1dd1ee7de675c334fc936a64f72fb978
f8fc0073248b2be95224d2419bb844b4bec0d5e9,b6cf482fcf3fc1f916615c8fc80e552e241ad15c,3109005791794f433437c6d452e72f1bffbd4a4a
d854d18bd9730ffbe4340dd8a1dc9c2c1efd65b8,9179f9d43b5ebc1ba356a7d0ad12a13a2ac52b3f,43ba5b69d2b86a6b00908c0c1664cd893db22f9d
f42b39a7b5c586378c5baef31567ee53cc427715,a65d778f73ae920d4eeec28438c254ad9ee0f8cb,e4eed4e25994349c28dec79ab566831565bec643
7343e9c4a273b789577856915e0edf6613fa4b41,c96029ebd57c852dd3f006cf8769d9fd5473a605,b8578f804f48a7e7fc45a176f4556cf729dab2db
12adb47d65e06d4d730cbb860c711bb668a94367,de36d6c0499c2ce4ceba4825d004767f0ba944bb,09c009868604cb1a9a065ea9c739a37c41c93923
c84c4eb1a4cfffe8cacef0193af7a854f34c5bc6,c3b5d0d5d5b522e8d1a594183e2b49dce34decfb,ce1f115b2d17e17832f36c91b285e83aa3fe8f74
28efcfba65295ebf1b88238906b79594fe54fda4,57d9884d964cc8e1208814fc3b0f381c3140e642,aec18c2426a503c0c85e057bbc2f029d649fe3bf
6160abe37ec2fd61fcd1424cd62cf95fd2f8b1f6,80282d6effe141239c36d02d418c51142b38f6f5,7f775abb6dc5c5b3b3a1dfe347304a81d970df77
4e9b42344e5e19210d8ffec442f1bba631df9078,f42f62565bf31b15c943b91eab9fc5a9569e01fe,227bd3e9041fa1347905fcf666a951382c1a0f09
eb81b981cd66a1ab82fa0dcc05119e3a9c5a09d6,469959d9b52e49254c45885e9e9f6d631a3481b6,217e9ac5a5714fa60214616b33f0e7a0860c2a64
5c2303a76b1a616d24f9e41679bf61f79020f4c4,a286ad9d774c19718bea0cbfc84347dc67dd4862,17d1b8afdb7dfe862aaa84d4bb012c2674d8cfc6
64e796ace2f58eda26c7c732c8d592029f5cf297,ecdac1dd399df3d5dade5151e320686db821ef9e,472f8c900b8b5dd32333c930ba1c6f4a75828102
259c865667d580981c3b8b0e98287383f38b40a4,54ea8468fc0fa0c2775c82a10ad62785c2a8f11a,344aadebb9e2cc9abe51bfad885a57400508d088
9003114a8f7cf994275dbfc88b93a0c8d0ce25d5,707bce74d765b6442a28036f5bbb0320c61b7560,8618a3b21f4079b12a7b439c9026d3ace63d3925
ecc3ce64eaeeca34fbcdf297fdea90420845fb11,14ddc59edbfafc8f7ff20ca7bfaeecee4ee3fd16,d4ad618a702802f02fe4196ce6487f15c5535bed
16f201292c0690d29ee40a4b525a60c13d203c7c,dc799a9d49d234980b4184d2561bb0ba04337177,85afaf528916ef20938b019e802619d65dc3f778
4111e13017f90f992971a522ec67f3bdf3b46b85,7a3eb453d40af468faa5c395a6bf301cc0a0cc40,b88f9ad57cb67ae1b565d9564f2d8e938c239ce0
2519fb126663d9dc4184d8ed9d7edca2e65baf78,9803318feffd8cbf8904be68d784f062eee3ed90,64c586b86dc064d1bdb07655975f1787f17129df
0a021be803f923bae563abf7eacc9a1d6bf36b66,221efd7a806a778f59a29b7f9baf74048e8b3978,9c265d71f0fc92ec1065d0a19c2565ff884dcc9c
31cd3df783edbe1bec40a90ccf4df82b5c327f2b,0ab6b1ab4dcc5a513a83831fdd1070ed8fbe49db,75491ae21c54217fc1838dad300f5c86a247db4b
4fa99cff624119b65aba0c5c6fd0af267ad0dc42,9b1567f0546a7df6e7a5818dab3c614146f95c7b,1f49e633b6599ef4acf917a4190a62bf171843bf
2567631aad9684c8b6c4cae9e4d94e3c93a2466f,04727844b5c663cadd8620aef3ec2fc892115d0e,225eb8ed12ef191cf97a185f1a405bbdaf9634b2
268f7bfb5c73b8e6dc11bfba6bcd1c61ec0353d0,e5c6e91bd0deb773586b10741d8435409313bf56,6975437da8f582ce6f964ba1f3d95972477784e0
5950a5f97b1a920fb9622f8897da0d1eef2ec04f,0b76059b37bdb2553beec800b2d4134a9d0df826,0ab4515e587d6eba0c82700a003dc3a0ba6a25bb
67fcf0f03e9b81241040ce5e31f8a8290384d029,e99827246e52288205bf3dff3533634aa553acb3,4bec57702f93cd54d61f68b1f8078ce4a4d985fc
8496690ed0f812c72b008f609106c933871be484,8b24d60df752458f3b2ec1eba42a1143529a7af6,1e960a9aeb12ae75877ef9321efbb89f34bbbdce
d0910b5ac837d58c141ceb758c366bb8a87f56ff,539a578cce5f4e05bf46dc283a0fc96952f22bfa,4e151d5a6d8b1b11617cc17f3fa3e08f612efe4a
aff1f4999c47aecd65f1f17bfe96e736a55b4ec7,ecce39a3b253b55250ffa0133d8d6bf3cdacb4cb,3b49e95415b79b02d6d74ee7786ddf1c1177c1a3
4245b20a32206201500e7d9c646b003b93f4c6e9,1c99c2655e3996df83e847a442e52eec3ae171e5,7f1aac8bd71488208af65d46e2bd3783d8efe725
afc80a84cf383fb885ae3366d429a5a0c6ffcd3d,87e1dc159d85ad4f56cc8cb3ed3eec71c93cd273,dda9f83dfe2f4841bf4fdd87aac87b46b0ae833c
a4b35d16f2b168c58016334e1f0c54731db2d84d,f1883c4e617085250b91f579760247865abd01fc,33ce19799b268409d89e0ed8c1598b73728ba970
0316a7697f9b6c3782abf8c6188df983ca1e9f7d,c3fb1e3a658af94ce69f431f739a80522ddcc546,44856e660c4ee3931003802128192b2d77415244
a3d68e6839f1803353d6b575f34fc91686ff5088,e694897bb3bdea5f4606946dbad784ba7bf0af1c,09d6398942ffd3e1b139d72067cc20e8ccd7a400
436a0d3f9ee306b55bb8d0b232587668c8ecf48a,5b29e7a3ecfdc47203c64ee8b26e5db5cba35b60,599ba8cc2a1d68bb9dc6dae9600cac6b1847d046
ef8d520e8277925f08c06e3b635a54ea80b2dfa7,2ffe777b446a42bc98d278288906bb924bb806c3,f333fb08ec41d4886a8dc9a35479bcdcc08f3b78
34f7c3e6d40e1702c5b9008ab852e5fe23cee7a2,60c8b71bae73cec85e5bde74239f2bc057f264a8,c7f4be71dc1048ed4364609f838bb5e79e372088
2912e38e91f1940d84b6a846ecc1f9888fb7cc67,5a26c582852c9e6486bfeaa164158a9521eb45b9,6beb28316e004311744aaa46f047f7048b989889
0ca1e2fb424c67f6c6b02eda1dd1ff22773af2aa,e430c92fcbb5b00680ac84579d6f969a4aa1c1c4,2f36069dae8eb1f6aa8ae4149c878fb55437868e
cefa05c8b1749d9f5b3d322f93eca52a13ae42ba,2cd695120564fd22f063cefeddc882523a86fd69,2703b36fe16907fb9fbbbeaa8d497e17eb13b4b3
0216f778193aa057395c3632482e751402a21048,236bef961c21611f2969259c8c8fdec54364a225,cfa3f4fa8c3a23fe72849a14532d02cf8bfe7730
857cbddf04ae8d54abca518b94792e30ee481042,c6443809bae23d8f0a519b4b3da501858a2f50c8,8d0ef71e37e6a59066547ebb898b17ca21e3b601
4c2e0b9ff0ce9c285f1aedeef6a7146c81a55d0b,ab0531f0ce5b02a4a91430a979f025a4684e2245,803779002d5bdfae8960d95520a4e5e5107f61fd
9c831677ff1f6d00592d7bea91a3fdb6d65e0aea,fe57cd353657f96ea5846d9f2575811e1456ec6d,272a0e3e267eb40a3c3e1a0cfaab9d2656792331
e0a1bc66750d810d57af27e21139203bfc2f3125,01178532e5ce1180f56697fe7d22e907d1afee11,316f2429f02f3f4ceb1d1fdbd857df0c500ee5b1
8ffa01e95fec30fbec3961b0df8080020e5b71ac,01937c4630f20652dee29b92dfbb2ab3d58cee8d,913bd009e9cef31344cee42d9351fa25dac3724e
c15bb07bf60ec1b6d14ee4954ab67dce787e1e79,62bd0068b65cb0fe8b553d08fa4a667276b40625,f4486039704b5ee3ae17e74e3a537b51fddb44f7
83ce289ea4f738bc0599fedb7fe153e804d1ea42,81402bb077acdaad13e50dd6e093e886e8de3ad8,6f3fccddd1ac5b363a3e02657cf838b87d741a40
d1fb44044f4711db2430d267ab8c884d242cb13e,b0772ae749bd1c8073b7638d0d511caa54fb5078,4be5f07f276e2f8c9080a05f7c297fc9d578b5d5
8fa04a0cee8de2d8f6d1c5a72090b4f9a0a44698,577e584c771de341a03c62bc93f1ed2fcda3e2de,1e5cbfe546555493b7ff115a326b2722e0c5c978
e047e7db91918a6356b18e5a76eed56aff2db155,62ea31f255cf83b7037e4d56c6a6f4e184d26084,9775a13e0263f14cd74692b3df566752c8de16c1
9ccdf2b3bf4a4da9d61cb657c1800fbfe3e8ecba,d1881d09519768a8b2fac9ae78bdebaf49ac7f83,03d353c1f5203640f225f84930fafc8787372b66
77f3acdf76d54e924dbb77682eb9352b5626f88e,85fa313e597796aa2035f39504c467078f51110a,a7de0b365b9d10dac141f7a7b8889e92e12370fb
f7dd8755ccd15cd31e30863a62b0214249eb2907,811cf381ad4f00636cf8b5628b663d7bb8cd07f4,612f063795d944b9dc7ea0ffc36a9a0fdc4ef73a
53effea0f5cbbe4e8670c65fc55ec65b507829fe,d608b4b689181bd3bde42078d6c9641348f0a050,9e2bcd940aa579c470990d60525be160ee191760
b9affc3406b07c24ffc76005f71d41adf22b08aa,c4ddb94cb42420c8e47c6daf181a64550ece1615,bae6ca6883d84aff6c9061af6ddf35a7766b51b4
1105726dcf0065083c5f23921c1e87c9172eb61b,c2ff85ac5ba307d7cc10cae7ee17d479c83c9119,067b9b2922824a6801001abe1f2c67559cdad78c
ca7c775e3671ce703894d6ad4b13fa11ae5c1ff3,308aee42a011e796260906a9d99699dc6521d3c2,6218254e53d3bd9bd6cc2c62b5d6ecb86235dcd7
793ecb3fa67214c2b6da67609c5f4e6ddef96bd3,8ec71bc810be192183c9dea7ef4bab8a33a2df66,47557e0ad24e6df119fecbf2d42a65dc9cd20b8a
bc4a22e24d21870fe797d495cf5a749cdf89a12c,07a8e6c1d61cfa4a588d3e88997940c22f25fd6a,c8c6e647be33882b84c2ffffd9c4b84ea4fee1a0
8ea95e9b9518ff3c9b52672a2575287d613bf5c9,7811b915a918cd014806bfde2085bdbad62c8b2f,682e29c4ff6b494b468fdf0f1295ec85fee37ec4
2885d3ab569ac5143b094419de211b2c1405f568,e53d18d876349d27b75a9dc00340b4a8edaceaf9,bf65bad5c5c92a2bffcc5dff4a5ced917116a8a1
3999d037e3f66961a2ee4993db53d1d8e9fa21f0,9e7d80a8bd1f1fcfd60bab5750b30c05db3c3f6a,f38f9ff930b754f2b94f8dc876f53d22ab0d23a6
f879d764917721ff3bd99c7e6fb6134cc8ee7197,f3d8efc8ec3690b97f3d5f15d6874359435271fe,08817f1aed8b29c9e30d7d9edc9530e89bb0bea0
87a67a3222693a0b627cda9a47197d8c4893a205,9ec85f940e650d196a66510be981d6f8b8a774a6,9a39124118cc4b065774f84a7a7d7cfdcc8456c1
3aebcccdf29cbe199a204f573fc1390e3760f678,934e3bba63c67b577d941d675cba3dccb2d53826,4bc957a1aa3bc241350f8ee2f917dfd0cf80f8f2
c90616944d3bde7b36e924d27a0790195d61f95c,1b34fe90a33567d41a103838648df4dc930ba2cb,ca399f3c7166947e42e507c3cb141cfec46f9e0f
b09669dffe04ed05fa7f4c19cdde5a2531be0668,243ddea68697120e162f5facac53b0ed59578ee0,9f8566dd84cd77faf02816ff11b6b4092af5a0d4
d8021a11029990117503179f27e8b9af6418d32c,81bd47343918e8de171f1f53f26db490934ece79,6ec6d2043b1c2c2fa2c5554b142610d9d333075e
c7f3469a3f6135de5990605db59ff5286c6ecbe9,f5bd3d81e78881e7311d4642ac4d41445b0d86d9,0188a558d1fb63818129f3adc8513dddb6bd42c7
726ac5a5a6afb3017e06ccdd75d6a593b97a72a7,2cc621618accab4ce12b8f5b34c5f883fa460b3b,75a9c5b5009e094dd4f1abd166f9ef47aab97c1a
c8e712f400aeb5f56d8b370f7e0feb5a6405b6cb,b5216a19907d45ffa87661879b2a571e589fce75,695665c393c0c3b0a67b060b5da4c86249c77f38
665180a579b47a5d7843c4912086bc6e2060aee1,d53b17cadcad90200962c5942a47cec174047612,d8f02107a1c79c2c4560c5e6ac260f516f083198
f5e5f9645cc90c01a6fcc2c89413ccbf0d1d3d5d,f9957f30a5a70def090032b803925a9733d4cc43,70760208bbc0574bd170e3acd7e8baad3cd90cf2
4da1ad71a4ead2a6643e56087d03c1ddb6303416,71dc62dde61909bd587485a20f3c234c832b9389,2a7aa1116397a409066dcef8048db673e50f77f4
f718567c95fdc28f629bbf213c0e8f2507064f3a,77681333f520d55157353f13183ef0dce9dd0e4e,29a5d3267cc3329ed313bdf3e6b8d59e659260fc
43c50d0a3266282a69f9e2d316fbc73b478c0774,a19e461ee05154f1934c39bfd925740b3f28e4da,17e3c31b7ef802363f2b721f076427735d7802e7
cd3570caf14145f0f75af95171ca4e773cb9bfb6,5557dbedf27c88984a322047c57b486fb7a9fccd,1a71ca410691438f182910025443da0580df5a47
77cc2f4ceda166a09eaf04ca07756f950d1ca806,1b22962140eee3b11bef19380d071ce49f5f4329,db02c7c85aea5f66f4e083bba8a8ba649e06c313
f1d30a5bc63f4bf5916ad20a81c12922ceae68e3,c2faf6a8fd63727b392123b69f5a403b9ed991cd,d06cb1a20ac5674bc70b8e8da0c419f004afeb7c
423940afd7c7d8afaa4d45a5c08d36f83fcf5401,7721995c71a089a8796aac9c6570dd6eed606d20,77e3a402dabc6622fc48d31c641177452ed49867
0ffd4f87808838f1ddb563eaa2863a4d0f984a6d,72667f41ad1e1b310052fe05a244276c7f813ad4,837b433abc0378039d91f0f03061d982b2cbcc9d
b464d3877781b483ed4a1af04784cbbf175019aa,595edf6f9b5bdf4d04ce6580cae49debc72cba89,256ca9d210e9fb9ddc11ca3caeaf811ff1d97dea
bf5f7144972fe1b99f2dabf2f6910b5e93090eca,f0b322f4ed22a2164aba0abad84925a1f40e383d,cdc7fec019bc6e77d40e11c9c3bb173f95a3b364
f76bb5fc5e29998effe2021ba7fa563a9a4a8e2b,c9b90ccde0e43d3a26a812289a383353b83ca220,5ef44c550a605a72a6f8b34fc3690185097aa49a
9977889f4a2dc700ff8bfdaf231d59910fc08739,cc5814dac195e6c3a60030015339e18d0296fbb3,210674b9a039da69dfd1444c0cbcbe7d5cbaf4c6
f6a444c6fcfa9f1993841e8dce9a36899a8d8c9a,ee187f78f411711fe221f871fea01b203114264c,9664ad4138ec531b0be7680bb274db0fdb39b554
542c3f0c4c916a61cce0614fc855241ba0e4e8c3,4dbdb4f0f1ec9a675c22f0f5650a8cc5b44275e2,39896a1b113912c28ee09155ab6f81cc9a14428e
d936280c6b5810d72bcf1db26189339025343143,9bad5180bb210fa49437353c7643d9bc574af68b,964c04aded9d81191c5030d1bd75be285e36d8b8
4ab310e0ed49cf72441c1072beb3e24206eb6e12,8535c758efc41d890c3d343d43e064deed88d132,929fc500043b93f1e06976d0735c3cfffcb2c446
da3eb5c1785feb0dbd417632bff6f791b4b458e6,022a9b210ffce670dbe4d675baf3b70db3e74b92,bc21634b467631b3350b42f83894a7339bea54b1
f0cc2c38b8aaff7b6b407aeeeb8bfe9556fbfa5f,884d24e321d3db6a74c25a2d0bf09b1e755645e0,e57059eea3959cfc9daeee5bd558b07a4ad21713
6f1d965dace0a9e093ce73faa9e02828db463694,430b2fd7917e4689de57e75a67ad864f38b570aa,c43d8e4adf47edacce499563558c0bbcc9c7fc3c
906d0ba06ef076fa6bebc994e1145bf222449b47,6f482952dee00a2e14dc900815d660a32e46bc8d,578424cf51d3c1a127c5eaddfe462e82a5588586
5726428dccfb87159f31ce505ab1bef04a5f59e6,e9b3db0d78ec4a3043d69de785b951b25179c2ae,814b68fac0e7a2328bf4cb0adc995bf20947383a
8006900e8e969fd4f8078398ce762f1575fff961,bae583118a0e685032f2712943d2ec5bcdbb900b,d56a90e5ed984b10ce192d3197e72fba5b4e184c
8e2478e6328415ca01414db2a77c2180c23631bc,30df9550019731ed3cf29d5e30fc6bff4bc4cc03,f2e0af6d37956caac79c5acf8c8cf5ad08475443
d5a0dd3d2577809d169cfe18aa78e8372fc3b856,5e3efa4455a0c20e72ee2d970df1fa630308192e,ea5ffd597f3b8a50300e9e7d1ea2fcd0f1e14f48
99f33824a7994a8e4fdbedfed79093cffcda03ad,1957ea11cba7537976c6600b2334a9df386d7aa7,3ecb41cd2dbbededc213dc54ee4e44880dbd8336
f59aab1371a008ff7c5f46d2b4d2fa56019cc15d,5085a04930268442e1dfd07f325291dc1f95d086,c02b43fb93381fec8823752d0ac24e76e143868b
c2c7982a22f940366468c2b78e6625739d584be4,e6e49baed14c826a83e384fca0e29e739d3aef22,e841e95390eecdfc83dd7747597d3bc15195f171
aadcb0097781d53e6b555da644d3dc05dcb5f3a8,4483343d00693632b120151f8ea67abf2a2c2d5f,04ebdf8df81632e5e3e8dd13d80dba4c75ea9c3f
6e4984184b94547a91ffdd96dc47046377693a0d,40e1a09e6c73c245cbc1bb3ea1b97a0816fb29e8,134bc7eb423c398b8ae1d1b93b105c2d1dc66667
214936b90e2f67c323cc530a4f022d3ab957e2ed,464730dc44dbffcdd9fb0d3ef0847e7f0a04c633,9d2e71ff699c447a2fc954ef15928f6697d60a8e
776667366feec2f8f00a81ba8d3f016730fd1e5d,7ee31ae252e6796fc32a3e1de90193e6f936920a,2c418b988cbfd4d9737fb34f6c81c52bd32c0bcc
3f8aeadb916de0d20cdef18897275c348133e90a,e1d9d1be0aa9b4029bdd144bb97374c3bf559d5a,50648f2a6052a27c6ab8591c5817d63c830aa0ff
85fffd7a77f5dafbf672ee80493fc42fe09aae5d,43b29375899276a2734571d2be8daef68e5b9008,7368fcf4c5a6845a0c2257ae0479556850184565
89d3d866d2370f8f332746506e97dea19c9fe382,356afdd25bd80af7c674633df6eda10826dbbf4b,bbcc3966445438e2d97e07d21491a83e9b0bbb99
d7a9a7319493dcd61d41e68b3baedcaf9442ec5a,ba1b0883c2771b3a4b9e5ab3954d2a9ea960cad6,ce1f9cce01e1f58859886593ea04e5a5bfd0da32
51326e94f38d72e89bc833c60e20df237502d811,94a15faa7f435b1b8a5e0776446b2352b0359065,7a4110cca91f7fcb4097d156104bf7e12021bc52
7d6b01bfc429e2bc70eaf7449a2f899f0ce4b0dd,ea47cb313def016b4f6359126d45ba9da4054411,cb0f422eb1f04ba531b1acdc0212194eb1c565e6
924f9466f0219cab6ea5c52da9b5676c97f9cf5d,c185ce02cc24c43f5213563669fce7c2c9727747,d16160be915fc86a6ba634f9ea8500255ff996c9
0d6a1d24bd0adb93608b17fff1e956564cc4d975,2629bd7ba92a03ed6b106448b7eae6429b63e94a,2a2576b1d5c6335deb98c92f51344903e912c7ee
c67d35b8ccfe8a4de74ea6f33017fbd9f68979b0,db8c723b9d503f0eee1b7058495170b97326752f,46507f956552ac35f745568284ca6ca7de4f328f
eb96734b2062ee19daf54cd52266164d70e84b02,7a8893396d2598628075a4f3e001622d731e1191,415bf22e01cbb676fbefc4de83ee4d18bfa6145e
4e4d268963dd6d2b596d1cb5a70332015011bb04,ddba001b651a404c2b01bdb88679599cc5df118f,5129c2cb9ac6bd7756bf77f8d94d60c0390e9734
17514ed5c0dcbfcc2d141653b021adf870d825ff,2be8f01efe35eec1c1bb9b278b54de3715fc5b2f,122c6c92cb5e494385d3fa3adffe6bee6ec4a51c
5920d169c096737ad6288a96a37a9377fd8697dc,136f0429725919c7759358a0499a4cec09f8a3ad,6a3f32ba6983dfda5250d03b9b2d33c8ffc6022a
10acbca82824b6a3ebf5dd829941da61211f947c,306fae299e2b90543f863504cd9a35be802d103e,07698050e56747de32c7ce580467cc8bbebb2a28
dd4b4af6a53514749c8ed329cbd9c41ab6f1b7b5,122ed4b76a4e735ab76b44d52c845879e6fa5535,c78e9557f81f7711a60400f8709b5b1fe017bdd5
64ddf22e1b77cea0a29d13f5bcd1e09e8bb17ebf,3ca73da91282ae5ea53ab61ece3301dacb454a43,07dcd22b1c812f4dc659995c84c51fc580383a59
0f0b9833fefa846d3291d275d5d78602212c23be,61a3f6603d2fac4f4b88cabb5c1ab1361bf6429b,2e608a3dd025db0a270cfdb17a382e46547fe62b
a73ee4f403dc037bdc0d45e2ae793f55f994771a,bc84f780ee3baba239b7cf99b16ac8ad70150c7b,968d00fedf64ee56f23796069752cac3207d48e5
e310be017eb68e356085ffb0495fc1d042aaf294,9526fc64cde63ce5768ebc21f9cacdbd9b827219,a18a6b4391ee8c0786fdbccf8154949b41be86b1
4a67f098ee5f2077417ed8b47e6912a0e4794d1e,c28995494c33ff0cf4c66858e8a7de86e10dc411,f134e3b0eec1866a21572feb012813fa14623b87
5ab67753769a4dd11c3d6c4d2356a18a6bf14fba,3ce6cae11d0f754038ac31a3249431903a7909c3,468975aa3046e252c5ebbf4c9a01088dc7d86952
9305bff861034a05c8919a8dcc3783017eff6c61,dca4bde3a2b43a31fa0e6dbc564c823f53a20da2,4d8ecfb42270e418060c9de45ac5a1527150c66c
1f272f8f90cb1fc0a0a9ba3723aad13ebfcc5f03,8efae66956c35ef07d5dd817cfa20d6600b6fab7,3069d74ecce6a302ef844f6fa2819f46af7eff2d
2ce34f7bd3a648cfa5c7af111bbd0ef0fc991f8f,d2921dfb55646401ff156f85a7997ba1d17f2d22,a5f6505edc01ba35c0fd05c2b048b6ab7aa306af
3cddfb4e2ff9fc38925ce973bd29fe36cef3fc98,6b7df6d22e246a54b7ce60e08ac4474664efe90d,33ad038bbbf5d724394d5c07aeb4bf7aa7ad71d3
213a0a704aed3270afbb0c9ec0070e4cbad85d9a,6007ceb9083c0b27313377c19f65dd8fea51fcc6,9a1ccd2a16a48e980662be44f228d549871e8b22
61cf121533572a72ea65a7ec35bed1a5b3621a5b,37bb10e893d97f44e4f130c06ad825a2b4693945,b4df9dbe1d10937f7e61265cc58cab832f6b8506
c7c8e2e0086f1f257af5f4fb927beae687105f4e,1e072aef31dbc456da749011f2ede30dddd76546,5762e687a3ab8fa55d3d7b14177de991b044e9da
4f77cbbac4accf137ac2683b95f5ee9f7c628ce8,5e9eb673f8141c2a931e971448cf1264d55e7f04,9bd785c06bb6f3b7c1dfe2190cb5fbfcfc6f76d2
5065e4ba50b7bcda40c0c010b404eb228a4d3188,9b4033fa80bff4b50cd2faa83a49aea8ed71c17f,a7e234254f19327d7053f390ac93d29f53d40803
abe3002b5badb867b33dfe4457e92535b089a954,b8befe3d1fd54329845387d8c7109827c55a0b3c,bd4c2064726700790c5c6bdd0a55d3d471dd0c5b
e121a753e116701c5a8c68f44ca90b296b67b6e8,b2165570de567ccd94e192353900000376492fbd,4a7a113a30030675eb50c9b1d0e563b6d0b82c73
81e83ffa675a60a8244c2a32723bbb00b70f3e46,6b26fa0f9a4c6c7f8d12a10737428c443c7750e2,eda6b105b718d810129c752ec7749d6a8e6132a7
3a242a17f4ad59a3bccdbc1b7982ce92b9dcec76,cd244cbf7dbd85f2a28b67fabc27455fd23f1e33,08b07122f8c0a270d4f9ccd1bd925e14402323e7
bdbdf2616830ee919a86d5181440b8db1b89ca84,4064694a5e438b10d71a24fe5d1d24bad40e4c48,a83f5749debb1409e18f0ef92b2e81bc9d0adba2
962c5bd727fe1930421e1897d0c8aaf6fba6a489,f78818e38727ccefbd1c3b1415d186ca67f34fd4,5a2d884fe3f3f556bec5ae3a74917d31c5ce896c
5bcc530707062fc715a4dab703848388d67efd7c,fc41306c4585c17e34d17a5f3618b59806152fdc,59ea39ce75fd1f8f5d3f9cb5afa264c3198d8a96
ffc5131087cc627c3ce957de0998d92518a3d958,fd4d6b8fc3f139bbb41eaa96d82055b25868ea4b,c200bf531176074e75a0d8efab36ad34886a3cd6
967b721e4ffa310891361e6947a40181e7288d2d,429454c8f48b197db4f8d25fb382cbc074f23e38,698b5de389b0342acb28bc6f753b79aa1b922933
eea8f3277211a2df7cc299dacd03cf600dcd48b5,e45d8578e8d8c5ee425f5efc31439f54ffd02ceb,2563cb6daa45b7b4ff2034f3c383a5c080c5f756
8cb92fd49a8f89d830850e3f775550342ccb1a8e,e8c3f5d6b0a19348358d039c2f975c920b39b26e,905f0b1f7819d50eaa2a0cc0e4c9da7e491d6847
12796d176d278f11843fde6abbd0935c21eba2da,455f603c8c6614f10993047e3c047fb8df3d3f2e,3c3120845af13d067111b13bcdae08ce00247333
92592be8e43db53a29b9f12d49efa317fefe844e,bb0155141ad1afa1869f503b585f9d29fc5bca6f,b97570c8b3b0e1c0f3b5d6c337b026686d5d8a68
ab0d7697c3038537c983dbedd52046fe27022d70,3e760b33c736290988741ce7354824cab306e952,69d5d648a9630a85a0ba9dbe0f79345152294112
671c674d6513502c0bb5bc477d83d4ee5615738b,01d6358f93faadd4ec8f61c1146d6a5178792580,78af12b58483e701da0097898e26335382e4dcb4
5abfe21f39cf60800c77ee5f22198d94e8341054,a3666aa8c96c198b294bd794cb1fbc6eed2c28dd,f56aa9abe79fff9dd5f36e5f092aa2629dd1c6fc
72a49b68cef4c213f089c79fc1d47b2874ba146a,27675967f85208af3308f342a4e2ca0d0a8dc0a9,4ef2a889464dcf5b05569da5ef97cc883a4a6938
050519f16fb7f00d857776249fbceab350196b04,7e53fecd092c55b7675af5e6bf5dfafbe9e74da0,fcb646bc3bae2cd53070cd608bf281b1da534271
e924dd0d16c13c27bfee35e98376e05bcb887415,6d1df899e61fc69117a2e061b17cfe241d2637f1,dbb6f95ea74a7d510502818c38e9dabbe8784448
cbf444bbbe699581354288d36b27c43ffcb47c17,a5d1ce26a00d1196bea7292c828caa5fb8a93f27,12496a638b4c5b1ec45b5435c8db03ea34e851f1
8295173f8665ba60a3b6df56581b280b448cf6f4,8c57d20abc119d71c86bf24088623dbced3565b7,3e984294181d96a590a814476616c1d3e365f458
2805e44ccb58b9c8a31864c6ccedccbcd024487c,2d2906205bbbdcc4769ea5587625deb9fa30c83f,ad8ed4b48d60ec8becdf5609d9b1a63cfbd1efdd
5066a7eb2464ad8d4a9d10bcbb8c848c66c63e78,217b3ea3cc200030e22b40831a479d5073bb299b,4e4910cb8409adc60bcb4e02d907d75203785a15
67cbb7032e1025996309689fc2fb3687c48b64af,4ebf857ffcf8997a3d5efca9c4f2ae2954d49b09,6e7e6326822490236e1c46895221212bd1840366
83f2f7bf375bd50366d8ae859ae88fcdc8ad795d,acdb65c2a33517d623d8468388f323969a49d946,bf5048cb5e9655558802a7f369fee009d33b57e7
238d09d875d38d19c2ff77a12a8b463ed4a524a8,bd6bbb6cf4fd0ba52c1447dff58a26dfd98579b9,ea401ccc826b13e56965ea4dbc0b79b8a01bb7f2
392ca81c20b781db7c33eba2b8609f71ce90ab15,efd58317428d3407d7ac5b5986f9674698a4de70,2d1ebe4cb3087935ef30467d6d71ca74cb8967da
07461d0fc3a36fd6071aaa9bd13f2d651ae0a74d,c881d057937f8146701634e884a44f58e29d24c4,abf831c430aff63659113e53150debbd0bc8724f
79f60923bad6ba4e0dec027eacf66a892375fae8,15b2f9a7b1482ab9b1abb457066d494f1e18b57b,2940d0f45f41fd70107d2660a5059f4682833fb4
346b57e238953710adbf9b576cba46a5f2e33817,1c8579da2e401ee0dfb54bcbd170130c0a653659,99c84da071bf59d35e0e0ec85f83dc0a2bde7bef
2102fbdc97e9cdcdb56bb5e549018454197351c8,db843287a2d21b94049af809161a9dab8884331c,bc76487b878e59133ce3c2cc19ebb13f9a9826ea
77b898fe45cecf6a52176dcdb86ce0f63b9a8f57,d37117c460f1cb65e6d750d9085f628a0dcec562,0bb781c92876ed29bb962e9129a4f9f1c14df412
6fb4b9b7dd751e41d7ef808c31a33e7810169c24,10db5ea5dc0093161900a4fc88d2905735c3d95f,a1c8e92904f3504fe6c3a7140134b910aadc04d9
8226233aa3f6265e9c29b120493fd1fff3e6b5ee,812732cb6ad97a11c9aa8f2b0767f8dda2dd29e5,5ad2d47e236b80d0d091667a665c6a4da736c1f6
2bce4d36db45ada7533f2e6d3d42d84d5b58b711,e85aff2b967839b9597ed00d613c268d1a6ccf50,7b3154911931d4b92c619c207e37194057c00b68
b46c010f82aae51435dda77ca93d91b1401b0203,e0ad427b6c83a334362f42f8d1d3782963f76fa3,82b6450f198b15bd2823554d47a275eb836c9933
b463f2a141166cc739f27e5c93c9274db683ad2d,ec0bdfbdd9235119d210efaf7243b0ce2c9decff,f701d2f29498bb4766d814265995bad14c68ad13
cdf1ceca765df8b62d4888981cc27f023978c39d,21fd8cd5d3f98ecdd2847aa3bb43cce64af8f7b9,c9fd115ec575728f9a8b3966b5de73f1477ea549
0c3e179652842f9f65b810ff64447aefaa9d76f4,99e449eaa1b34d4d45df59600ea65cd8c82b2e7f,f2abce7ea58decf10255bdfea14740578068dd4a
ef738f01cf32f00fdd58c7687dca7581fd54126b,0e647a073e5978f2e6aefafc0b034b187dbffce7,7ce1a7c6a0722dcfb6db9f2c2c3a0a54e4a5fc8d
6e7f0744ca11202c2defc6c7dfdd5863245612c8,99dbbcadcd19d4babe656949c20a5c643dd22a70,6e6c946e0fd1765f99110e12c79db27a400c6587
95243ed6ede742a891297e91d687bf510c9f31e0,f42817d1a2d3a3efa595c90d58aa82aa57f77cc8,8822be8a1f1c1b6affca58be1bf337be4c345bb1
d84a7d1bdedae4f5bdb31c406c4f052ff728aaab,f6b4a54f7d2de15793e3da1a477d1ef274f31cb4,835bc62e2a8aa887170510ecc2ebdadee27bb4e7
91d8009b531b61d41604406e3a6a94e92f1b9c41,1f19b113983906e1cbffd428eba4488e78b4cdeb,abd494624bf2e722938b14f2eb01ba91f4227799
4d571a19282490972e9434ec4059cf6a01fced72,2e5b895d70f68daaafe52ecee8a66736b055decf,c6a549eb487f3bb5b0578a56f08db35559764b0d
188a21bbfdbbd2c5c0a2b6a8232bf5da9f6ffb90,968e23546c6614cff0607478721e181800ac38b4,baf5ff4e05987a027d8912aa231ecd3c79147dd1
4fc763ac5033ae56e908ee263d538950f71e544d,d2726c240648a1db264cab515969672355746c97,177b38dfe9423dd714a99e9fc34abaa7f032df66
b5c7997c88f39c0803a8a5f48188848843f9cc6d,c1d8e32eaedd102759c3b5132228aaf493026b8d,39164ad732ea12af79ecf267172146569297aa1a
cc5ee6b868935bbc3fe22c349b9c312029d88523,4b39f7dea0383c96f62f381ab46f866bd8e2270f,026d23632aa3343756ebf454d4d0961048d34fcc
85207e94f8e4a1904a67ba2a3be06f7b69ef146c,2e3e3edb5fb5b137c79875e5f018e456fdd8c664,3258937d97b8ca6a4ea6b6556fe46664da9d65fa
cc2fa67dfa475710c57c4b3b73631a0f3a959e3f,c450b63f1ccd696c8034142a985222d3f01895f4,020a58b0750902e161a29bb1f8218052ddcd2d54
c1eeb8beda0df3f74741677df85259e86b0a789f,6f88919f3775a94c3df98f6b3d2c03f885202e03,0a383d8c0f50bf3ed3333dd57f295864fca02cae
5adec3ca98120bc2c4110ebe354dfc50d7095ebe,41db71c21c1c00dc83de8113ad0b35f5250ca2e0,3fb0fab410ac4c791227d74c1bbd8ceb45f653b8
b00c0e44a596bdf167ded7900b3ba71ea903591f,890b899842b741f54f5191ff369c8a97a89ac845,2e8c99947a978f8614d4075b1ee0d9caac4945aa
190c77e8633d185d983e3e59d62443bd443bb807,ab01b0ebd72c646b66a6bb3fd55ed717b9852541,494dac5db57f60073f2d538f66b6570b9fd05beb
2577180b935364b1a84ee8d38f8f6a42c0b812b0,1011c31a80e0ea9e67497b335a8293a49cbdecb7,9a85ac204ce5e0996478c0c4ede0138ab5ecab15
3989a01968ddee76110556f2cb2390da751b9694,c745ae4836a0f19a1733347f208d263d1a5829e5,7778d20003ab3b62779243cfde33bd0b129bb61f
01a449c807e4ad9a4142977ee86b16d6461ad256,1e136b0cc7ff37f900adcb91b2783962cf9d7622,5124ab2521defb4623b6866e4d5c36726ab74608
6599f1d898003773f70c24898419f4bf6bef78ee,d02921d66b14ea499ef783a834388be1322620ff,5be1bfeecad2af3cc4acad908fa649849a231bf7
7afb665c92e9e1787c518c1fbd6d205476b36d04,7ce19c1ad78a75d84765790f077f228b448129de,a5dcd1c44ddeac28ca8fda44f6d60e3b179266e4
464b3ebbed39dd87480513372caadb5214fb1e3e,f7b1ec24352fc4eb77adb23ec70fa47388734c75,bab60d819ffdd3c7fa6081634ebf89ee130cc61e
7110d1e48e8fe40a95738cb993cb06fdf535afaa,cf7ad98dbfcaf699983d813452a0a5dabe68818c,023f08d54bef139841faaf7c954732498e139277
674ed4069a2fdf69362353707cbfa08fa222d998,ddbdc529b1e3d99244e2d0cedcb20195c0fb55e7,99ab6bd56d4d60aa3cf5ec2680514a143da4dd1b
04a41fa5b08de0a837f11af30cfe9091c36a2830,fab4ca449bb6ba351500c5443a3e9c0567ba19eb,3c58f26e83b91e2d79e894b03403d469073c7113
074ce9c50fa5d97afd1ebff5720ece287f767f6e,d5867793f6d16bde39e0e209a11741ba8d8b0388,ec40db3da7ab1d8143b4276518416aa2816d792e
4752230c8f5f5f51774b90e52ceec3a142b3f62d,6bf4c7a68d2491971350170e80414a07e11ab4f5,7388735b11726d1263de7058d7492d9f87f9bcb4
b4bf371b34b19d4505b8a330a1b9250047a4b8ca,344da9597f1dc072a634820a9431146d0b7c60f7,8f68988aefeec865263dfecb29140de582470949
6c7e6191f64ac8cea36e963028c190263d8a2ea9,fd28cc0db04b00612387baba33f30f8e0dc3825c,d502bccc1b03094d5260f1494baf49387f674273
a925522ead1e0ccdbd0c77c57e2ccc147b61dc67,a4672fbd1c097752430017fbe84a26d702e43e83,cc3cbbb7b96d75e816f38a83abcbb08b9fd8843d
2c180cf101b6a49c1f8bdf462cd7b4e729600ad8,07413be8b569f000a158c290fa856365557c3dd3,ca9384fd6c265aa76a9ef59229b3746153e6114a
00d4a6889dd2f79981ebaef3f839be5354d2933c,236e10d03aab15949f7c2114ddc39b63cf2ea364,66b7ed45fd0f260e2d9d9c00b844e27b7b8b3191
6cb24a392959e10186cb0bdc9347ef78ecc53882,321764bdd93a675343fa0045ec22a1c2d62639c3,ee387f7c66f418a23f78a0b6ceb162bec71a5d1b
3511b8097269e7622ef97c9a6da7f0db8a948888,df92d88f39a81ef2ec20499ea82cfdee6df04df6,b91fc3a0d3409b39e20bf0e0120ec8c072bc410a
dcae87bd5267914c8be0b57481f355a3eb700f3a,0da5d57c1e54cafdfa4f2233a17e4d17dd5ff694,d55b2c2a35d9a30f4928cab612f02d70e2704fb9
4012c3dbd47f661805bb7a831c6c687807ede3b4,ea6529ff63225e13baa4e1fd2c193b84d1432048,ee10850a5793b69b19dc82b9c28342bdd0018f2e
08050086b950a6bdb5a04f6054d58a497f45d7a4,7e73e0dd2314527e9b9a79e51fdd5727e6efdad8,01dc62b1275ca935ab65e856495faf3300f6dc62
0662a0bd44c557d338e577cc29065db54b57f202,b3a9c36cbb77bcd8079505ee9f16b68a09307ed5,dc9090e67f48c7e23f7701e46427169be78d03e3
1ce2fb8a4acaeee52446e881f0da0d0540097b2f,9f077d4ac04479b4bc3e46a3eb8465d1916df5df,703ae75ba6a9d8d1c39e81e319e72a4fd19ef702
bb3095866549b503f6419b773fa2e65c0b88f320,c96e20378024002d340434835ac2cf912c8ebe90,4e3a6aa5a812fbd1aee6394f98cc4c2425032735
e018264ad93c77e2855f144d004c26873d2f772f,5a0956d8050eb4f3f54ba0d8b9fad41fea3a09c3,470e77a5725fdb0eeffa9475a14937779dce364c
6fe647ee3dd194e7ccbf230782da0c42134245be,342803532de444c5c0710e625bcc2b884193fc51,3094f756903a6c06ff7786a1fa972ff6a61de457
12a2c56461dd689b24756292d4f069e8e24690d8,d0fdda6da718e26af14c17fc9d7d0fd3d5bd9fab,7bef4d827d905fc57ed773c2aa70f157a573e225
7f1050464a60977ad6261a108e4e839bea8fa8a3,4610980f2e9ac4269074d2d0613290ab78c50bbd,10fcae34a957e94837fe376fa828815ab99d80a3
4b157a14988b5f0637e61b5555ca6e420e896b99,b58fdc3e584854a4c4fc02bd7fc23f378263d25a,c9d9d42f0e3cb3d413bb755b7ec11d99e5446ee0
42eb06f5c660df09a392d99fb41166ffc614e0bc,95ad8f1694dd0efd0774767b0a08b79dd53130d4,284317d877bb10d11ffe8f6f8d3cd34bd51ee837
fb7cdbefb3f14cd66a4960bbeded3e6a739a95f5,e657aa64317a385a5c6fb52bf6c752e883220eb9,ff3acfb8cda7f6a077dfc585cbe9acb0d8e34418
5a617cd1082e80008559a012673db2eecb6304bf,15865e760244be485772a53a6eaa09f80e5ca8ee,fcdbb31ec4f057f1eb169a1214f6c50a0ad5a90c
c4a1cdceaebf8d01151fc20ae3e3a053180db9e7,89d27751911d6904fbbb10660a0194c43522fc8d,dcb1fcd9b81d364660b9ca5906e7b2f5e0fe688f
d0cc6494280732f5be8ccfaecbafb2b6b7fb0f87,d96600a02d1dd4ee53ffe9bd4efc718f906e80d1,b78761efd30a814d055d78078c3f9d0422ef6291
5b32c81befccea3ba64fc012e3e4216bb875dc17,7e4753bebd600951a76838f3e7c08f17d0e65505,e0a78c2485bbcce7fb5972b2c7ab7fb6263674c0
2240c690784bc6117f8d602c9eedfb23d0d8846c,44051b4af33b097a1069a0702108fc4799864c84,9feafc7bd73705fea94842a34ef704192350fe01
9423d5e390b94f34046ee030b5712e466950640e,716e8c8e8975337c2f40122becd0b596b3461586,8e5c2467e29e86222877085a43575f04ac1204df
c1d43df4a1e58702a57452499fc00898a1e421d6,f570b6cb7bb10b90a7eba22de9d4d10a09e83703,c917639b91bd8d0d784a0f84e6dc3c3789ff8520
492d75483d05af525822561fc8232c52748a24b0,7fcbd1d7e0a24bbe476d5ec4e67c458b742190b1,d708bef92f5353e010bb13857469c55e671a6e05
292be9029e729b03f4f6f2ac415d43ac90fdc03a,8e7791ac232d88f298bd3a5ed3c6cd511c48ce5e,e4ee8fa6a2b6fbebf8723712c63d9e0504d1396e
03ce23246f11b42ac3739f91e2f2433c66ef25f0,1b06599e8224da182c91896475658796826a03bf,550d0481b343effe45626780f047ed090a88bb11
9f60628e5b8283cdfce7e9f6feb7055eb4b52a22,5289aab4f2bff99cbc0cfac2d3993a7fce68252d,dc161e519f1641a8c44f289387ab2880d18e6c7b
54f2308d2aeca1b90a4ae98a94ab044149c167d0,802f24dfbdcba129c833416f1ac273277637674c,5db20610dd8dabee146efd6703a62c2d15bc641b
feb5bde09cf9cc79e26b01080ec9400eef03f600,e86d3af7e0036346c5f189dfc8c49138181f6d6a,655a5f526cd9697d5874e85727adae18e89040a8
a58567004b907ab6841dfc7d47d9dfea7e824df1,2dc0995067a410daecf4b6cd8744823c1f876d19,3ce6c478ccdbd58c04daa6a07a721ae1faebce2c
6404478ea444cda85cdf7f8784efba0ed6669ebe,67f3a7502d0f1100046abd87c5df2565b8d945b8,b733e21fd1055e821b9d9fee644e54c917be440f
5bddb3a435103997b2ae5b7f6f75a4de994ec571,bf5f37b14a4b92e9c441cc5bc2cd9924d3cbfb7b,e132ae2feed6ac06daf9e22f48b735841691188e
ab0079434302d85260bf18c420611bd1227aab1a,f66dd54bc277618feb9cf38d81b2651a4f10db61,5c55f1a16ee0c41f8f657f5a706bcb3bfc8a8f2c
4f711a8b2c534fa786922acd8453c49b40bc1768,b0c0309cc1c1dccfd11acd3284b2168d6720892a,793c157a9c69201caf0dca17b64b55ec06e34ed2
222a41be7b5d3eba617c8f0530064911fff84cd8,40196f4a437626044a4a40baf9bedacb3fc984e4,60623f39a1917afa3a03a44c7a8b66d6fcfa4f7f
0f1c4b4db8bae6fe397c14d06ac2d2e0795265c2,89aeedac1ec47570922fe219664c3374e93aeb8a,da899df6b2bbb980a2d047b542eee3bff03f4fa9
0b3fb55c6a8e75e869ed29cc1ad09189325f82df,f02b7508de42be8a2768036727447cb16106af0c,4825d2d16c2af3d3658e12637fb9fbed32f86491
49af134ba7e2b99153d51eadc8a190bea19f8530,01e5f4855a596496921e45f3b098f86285097d4c,d255ffba8ba16c21a006d7ed9710ff095c3d30a5
5b4c104aafdacafe36495a89c4d0e3a8be62fa9d,d083cc7247bbc6895eded5624933114d1e90c50c,72661fd5c106a5bc1e689eef63ba7636a01d7d24
5921fa9a6285f501df028a8fb4e1d10bda5653b8,59fca3a01de11a06d304d72b74df611a4e046495,7b2cd0bcdc450b6c117ace262f4cd9d82e471a5e
e9acd759a4aa88a8ad1ff97a574f108eb7deef33,f60523a3b92a98ab693a37d3acf2a84dd0d321e2,7a15312b54869784baf92d15a459691fd6c8c419
06da0b3db6563ae317dfc108fe2425ca8b3736be,42c429bf450ea9f674192c0a0f4faabc5a0b9e12,be448e29f63fd5d5d2b4320f24bde4ec197ca895
f7239e03e7c4e21aea30ef17393a5303dd5d5ac8,c6874df5c8ffcb6ad97096e63b63afe12e86b08d,b4bd15a5c07ae81b0a7f7906bf61c3c6e6180751
77b9d62520dbc4cce3751fbdabfff0ca73aa90e9,2a50d5abf82d4806129fe9b6475a090dc9204534,e443936e12822b1466e9f0ead1e464742412202e
6147d6d8a02903b1a11d36424dd53b229aacee6d,b4c8c1da12f2aa006862bb1212ae540521604ca1,8609c0803e592a3e9cf2ab9c2fbf567fdbc750ab
6dbe71cd3000e8d396fe2a05e8e2f74d0c012f81,ab969e0a9b19820e57fedc21d18e0e1335e74949,1da7ce46de3829225c6c50d831656e46109ec7d7
683a92bcc8d791f4f23fde8205229b382dd8fec8,f289f2694ab837b414aa131a0514c56fee4950bc,cafd708b6d862776b7454e1b229f3134ccde5009
22cd8d5d62ca165e36c6fe39c9054d18322e51f5,abc4a0a4e6ef0c0622bf155edba8c8394fdec95c,30166f8eb79bd6a0609cdea2fd91559bd0a7eec6
67a1d52806449c5fa249d2c2b6e84bec4c9f1c6f,1e37eef3d240ff422ad2f92ea9cab6ebdc8391c4,273a598be86b5bc65f23c36eae35e88356389a28
116c861af6c13f6d3d0d0d91b6dc4e0c1eb88550,25eab57a582a022f3336e052971fd56d9d3cbfd9,d2447026de4165b06c574c99f54f6f646b897d88
2a93e65511cc09cd0723e63fd74e88f693a1c140,86c097086a23476a6a7cf73d28bddee86039cb5c,50a37d00e78c9b51b6eda868fd28baac87361d1f
2b7c28e41a496cb86ca5b59bdb64596c0bcb3fa0,3cf00af48df50812ef32e8bbb82eb57f5edfa61d,33cf86ff9f11e17c1e3dc78cd4fb503e2059193a
ea345f34aac81046f9865da1186024615e10a85d,c06a3f2ca3254b39718b1ea69653d231a0e8accb,abee4d46b668e5985ca49f3bcf5dc2b53e244f7f
15a5a62eb4a0cd3de7d8eabf394fd1fe93e4633e,e26b29888565c291d9d1bb80a99d02ff28aea1b3,5944631246cabaebdaab78e5ac36426b7e2ea51e
0bbfad1add6d76b4aad7bac9d6b2cb34b8f7fe1e,9c9c6cc81bcd2d99e54a7b040b1f80641ce49b9b,e5ac99a4c97b52c95b26829b6f62ec0029798e7c
bd226c00f16b778444c41673678b2ba6eb6e1000,e5df46722ef25585c66dc698943515ce95438283,acee4eb27ac492447d4dbde978f8989dcd292d54
89f9ebc7b7fed1af0347c9290bc8d657fab8ccb3,a8cf67d73b3a9421ec3089eae5c54e38e934161f,6e7a82440ef55b0e8d125e49b791ac8dd7ca43f9
bc4eb00a7a1d2c2050a8056d13abaf8656897bc0,f4e28ab357c786dc55efc9f9b3f5a4356f7d0629,326776c7fa47a36692b800a78966c66ba295ee38
9ee672f9eb8584c4d2de627aa131f6299711776f,4d33e5f137bce78e1d14a02cee370fd42e6adebe,d5a104f493227253eed8daa13f8b631366bfdccf
4966e9376477defcdf6f292a8ef84d2079c7ce41,98aa06d47f1bb52ce525dba52024f6cbd5e636e2,597afd9f23bf2abb384f3ac815f52f8e1c2d2254
6a9b4a1b13b4e0585301037c6f26838216f43ebd,1d4c28fb35ffe12a16ae79c8e6cd3c4a85b38c7b,c3e94051a18038745302b04dd6e1a75fa5153574
bb49c190afdd16da94cae4c6fdbc1e5ae4f8aa7f,6ac50f4100ee4c4e967dbd5754d338d4c7debe3a,088c746d45fadc744878771d586ecd42a1d75b31
9d95e6159ef7e9a88b50c751341e789db2e1033b,985e8d3d13ae35a53b3353ffe79df261cb8e5680,8e4e229a5fe9e8086d39bf36d23496794e29fe6f
d209d3ba846b9f8a5858efe1a261f793b30349e7,2d1ab3410dee76eece1a7e7b980f0b278fa19310,11d16be702862041c9793a389bbf5c9ce179bda8
986a6feb95287ae33f0acbb8854327f43c6227b7,0634d5349d549e3af38d845d92b727504c752857,92771760b79fe0f30e67400b6e1f131287c621b7
32d6cf7093c086fc3e963880860e62509f69d0bb,fbc65314b97740a39dac494cdd1fe238554a43a9,a7a0f47d9802eec87bd1154c5abdd4a5251dc5f4
eaeb6148874625b62b5bb6e8e75f802b88ea11d5,cdf676c9b5334642fc72a5f17928b8280cbe6038,76d3a9c4b5a20a226aad427a61c87e12595e0139
7de854ef1ec86310c67192a734cd1114ef03ad26,a9d883ada1de38e0c6cabf8832952111ad56fca1,73287c35d20d3583840fa115519ca96baa659d5f
4640120dbd167ac8c800311e52f6694dd3c4307a,c59b6a5d8dfa4a20eec23345839d116905de03f5,c062061d6d16782c0e0f53e3fc9f2ad4bda0b905
ec02d0abb083a556a5240c27b4baf8a7dc606cc6,22bbcf4b27a574dd3e8bf1978f10f35cacf71b57,5738a6ccf12819d7a4a039ea70e80f69432e3b61
a362c93f73148b505d87feea9e8e3c7ade99178b,a6921fff7bd15a4635d0bffc5f17df08bdeaa6d7,47825610b807e0b29022956ed8c6079f82080a37
69fff102af0e272918219f7e168dbc9f3df8c3a9,2e70bd7dcb7ede8d97c18582ce725597bb0507b4,d4e0a79d9e43686ec0584a87d57acff189f01d01
5ce96de0f2aa890496721b3462629ae99f3c2e64,1a8444087a70a0984f6e2f84efb16db0c235f1b7,2a7744df803e34ae64172be65946322b09748b6a
d93c7579deabaf1dc14abe1b90b91dd57621b16a,f8e04aad038cbdd8719cc7e72b850850c8983713,859ae5fc7c8d7fd43be1e1dc11284c455a176f90
88959bdda78e45058714616f15d3d625b3e5b570,c4f9ec91c92b9d018b24be606b1c7cf74460cd66,bb637fa389d846893ed8e5b4d2b1fd02b1382ab9
b3cbf07f27bd59c1988ff5055f82dd1f092d6f19,9739a88e119f4639eaf51b0eb07a04b3a28fb457,ed2dca9a9b6aa989265b355d597a23302144a818
a87b38f7530f472401ec5e77aec73d37ab1dd47e,6010ece53248848dff792ee6af912ebadccb1efd,29625c71126cf418d6f25f7e868b40e6e5a24c08
c9e8bfd118dd79985f4ee8f42cae590c5268ca12,2c0f10d9887b676545b05e06e2c29a07d74d8fae,60c967f255d4116c784810a1f8bdf45e8f7982ea
35db2b2da3732abc46140a1b930a877d7bbe4aa1,fd26453d5a802abadf17a5a3dc258e6bea4ac632,d5d97169163c83545fbb298b812a7f34d5b7ffe2
c92e290d679ac3d7b46b15b8f3a53fbf59284cd8,39f553496995104b1b674d48eead521243ce70f8,92082ab28f3f7d4a149cf3ca0b6a6190c50be29f
de58691e75b64891a12b106fcc243a79b63f15a6,f21f7f0f506a66a8384c2300330e3235bbb68e20,b26463ed993e184d2e2dc2cd9059ca7a024552a4
e5472845882a4747c80ba6e0d7ceaff936c71484,181ee30174afabdb00c3d631ac4bda26c0c31135,c4ea01cf3d328f81311b2ae0118cf2c3944efe56
8bef91d1de212c03036d234ebd0ece80a11f1867,5cf15be434bdaf2cacca29270030a5fd0ca4012e,30a7199165e96728ee8ab899209fe83ed775454d
41d4e181ea3674581bf32633bdc90376513a145c,073b48de826c232bba310d8b05490daead429411,b2e553d3c403c2fc8994714ed998cc542c6eaaa1
ea812d1c2ea7994f610b30cd459c0e235f46fdd3,65880e66313c1329c4079e2be1a4121baa83ff21,4db332fecf8a81392120f58d42e84142161ab7fd
a9c67f22fd3c74fcdf352f11ebe861d0f526710a,ed2b73eee6ce40f37f52ad0d09d4f30421b6646e,f02fc4fe0fa850f574eab90ac308933cb8eb1485
ec96d4242a682926ef1df2724a9cea074aa69f8b,b297199ab6dd8e698fd8009d8c5b4bc26fb53376,ac4df2b0660b1f7896ab20d30a7f845f446d5b72
6299e94c8f99fa043920d005c4111d657f690e7c,ff0b560fe422caa2692f77799dd382e566a89fdc,145b37425d4af659e6d77faa75cc564c9bfa8395
47d7520b32b13967dbf65464edd65cf713477f67,533a11ec80671a14059c89f6ccd15be44f16f1c8,3eac88eeaf90fa5addcf7b03612dafe9236cd114
e9e8013316ed280b268485762206dc9c3357359e,bd82ad0d4166303b6ff2b0f43ba66d5fc7edebe1,90ebeb275a6cb28db8397cdaab9eb16eb961b835
b5ab81c98342cf824a8337be41ea15e1f5502b75,897f0e178414116764304b49b26db58beef476d8,a0171e433531aa21219e715be55a936ef9d5efc3
0e0739a64f4da96b414f5ed447428c44ad8155ca,9aac622dc91b8c9b6c9293c12901cf9f57d4d048,749faa42eed7c49def6323af3412831cf1e6adb8
6fe9a1509497cac3937163bc676693c832e62fe2,9b9ae2db1ad85bb5d9aa0aab7772b8aea9bb32be,f8b1801a8fb7a247ea31be7260c44e333d069a8e
c1ef0944572b0a38dcc30f9555cc8b78913896c7,568d4de77ec6088683375ea8ad376972e03d3c95,06a00b53c3ea8d0ff655a0b925c26dcb275be1e7
b28495a423993aebba17b3e157ea75e10f5e7179,2ed2c213136a4e7eede7ec2f4761f4d23bb27562,a6d6f938878d5723e8dff5f81def5d2392b0a3b6
f0748ad59bdff939e9d3c2f535fc8e046ec3a305,833a971877521a3a906207fb37e84ccbc9f27f23,c3736810ac018b5aadb7d54c6f6c4c41d1c59344
28964711d7941d466e54261a7581241a97e66a1e,c42b8c43bd8725ca5f479ba02124f9bdb2e9670b,fe39f9ca216b22ca75bf1f065b3a6bdd5fcfd491
8f083f6342ab8d193d5dc0ae2205bad4b1d7bab9,077a3f1892da9a3f493c321f905825a02b82968b,305e49c0b81b9db7872c2ff2717dbe54b92c8f3b
a20bfc07535f5e6d7d27fafdec826ed8de07ee61,bbece3e6680dd7a7a9454b1f55db125619f8e639,ba51494bd7d9f5552c91918ea01f3c9e02152149
5e148c1dca80849b7ddd9b51574cab821fab7a60,67d80d414b5d1e9b8cad34ce56f984c6c51de00d,3c91a7c01ea16f5fc9239b21636d4127faacaf31
34630c2ef952944108b702134db3b99cf2ef1d2a,ff68e7b9de5045c67d723933985da998f115efb8,44094dba2f96fcc6c252f9c42398b6740edb85a1
00a287e77d4917662b5f57ff99898b598c3fe996,b048ae37b20d06da7f9beb52dc7f50c9d2bb4fde,2c80b2419ead1870965686bfca004b2a7315c0a3
92a0640bcc6ad53326eec32db9cd8353f434e777,f2305d1cee38e762aa2409adb9d01dc6751db740,ef4255c65bccc121da2f5943600e2bfd7c1c2ec4
ae17e6acb678406aa91a9029dd6a0857e5c90f2c,f7b7c39129d72330dcb4b37010f1f5b7f729f43e,f01c8411908099b369e7c0d83733ddb78bcaefaf
d2a2240a2cf9f00c8497c696155c9e0657a614fc,590c8786902fb712aa84e1e87351f0cf484380a5,e34116f7dea7c3f35da3a3ae43d14110d4c70fc1
2a339485214d53d5c37a390fc59a314413e192ab,7711ba610a7488361472f2a0bcefa52a573c653d,696b7b6f68d3dd75f870dcb5931dd6216640505c
bcab6185b9f7a02da1aea46893ce7a38aca43ca4,72e88a345251c138efa396094f0e0d5f145f40bb,7f1e420bb05add6439b6ae1028e841ad7780b481
3e26beb1edc839f05063aa957164b69fdf8afe56,094a353d879f36a3c46acb1fe91b56295abe388f,3444b23c9a7178cc475d9f72035a0b7530958bb7
2a5023508a2bc4ff3ba4f3a0ca16366d3df86db8,3f14a19d3e5ad546841bda2f8abbcb8029f79370,d198fc46cb6cec08fc91cd35d34c64e182e207b5
738a0a35de9c93d37368b6ea796372e757eff5d1,1cd8c249b1cba95a03488989ca6eb82232f88608,4b88fa8e3b56330086d17a01fb1f836d97dd04d0
471a5eb4e01279d5444dcc9f51f0c730e309a889,c85bef5494f4ca409b37791f96acaef97eabc7b2,81c8078735cf79755750e39e0a6ad2159ae61ead
665c1b396670d57d6c595bafeea3aa732f52170b,546455faca05d2827398cd0f2ab76ebe45de5b1e,01142f11d7f6e50b6b80b75ae9a611f8fc662d78
b637a3a022e7f959f07f9c60efb619621890499b,d3722861599383de61f0d09158917a8aa691553c,9e3f64733359a6ca802b5e913ffc4c6626746ad8
6f749cf43d6bfcad745e6639aa1b5dc09e570c27,33db5200e62fc14f07a000ca92afdbeb8f4dee0f,8d864559b7014df07a9fffd16e0654cdbafdc421
2b66f60a8844f45cfad54fb59703b4c332e34171,10191477aef35b233b08ccded1b8442ad763c156,cb959c2e6fb5911c74c07e23d00346902521faff
ae892610080ecf4711f1b105a6464ed06ad639d7,554ae218cacff3de526f7f89f8f1543613e615ed,61f9bc35e97e554dc79f282dcc6f8a89b1a1a3e1
27fb9086aaa079212cf225f194efd225e54c50a3,e0599bb231c48e7a039e1703c09f6c6ff9a62632,e9dc638a76649987bba77eca8c789ef49d6433c4
68bc5da3a23dd74a2fcc792f7f12223855644196,60919b497934d50e039c7a44962f101cb32f129e,0600287c638a5507710bd600e334e437675fe959
6df2eb5fd44a69d2f9e8f663c8a4972c3cbbbb21,5e0d5cd92eb51686d5299ab62f6ce3806af8b93d,be2c1c751df2f669920b3826ad495603fee09463
b1a72a86e5b6af44300a19aebec096df00000e2a,50b6978e681268a2ca80d62e8a7d274f65120719,22eb1e099fa15b018ad81c0bdff24462190b7afd
e9ee0a0be3513d2949cbd1b120f1b0e90d896a93,f5de329076217765e1127c424c52837a572f0f50,a9db41f1e5715fed88916e4cb2a11178af2bd10a
6421f2c36bc406e30f732086588aeefd9ff96fc6,2099e35d826b5336d0aa5e1717dc6339dec27cf4,c785fa4435a9abd48c8e338b1935cd5569900542
de9880375118fc0718080b97bd61090353e32fef,fba3da47c6c762c7e260f89bba56bdead6c42ba7,ed520548be3ee7ec66e4dd909c0e61978960d7a7
59c33d69abd815c2ce7b1dd4345f6c99b4391570,fbf68af60533634bd627ca24a9a6b57d4208df89,6a56ed24abc94c040a1c41a7890cb5fa44e06664
2f33c970066529c482f37a6a77a11b01bb7fdccd,6ea0050990e5786bf369dc68b0971f433e8c9069,c3ec62878eb04316a545fdb98553f5d71002bb07
16881556b915c6916a488334328d586951d76ff3,0e4188749bacc70a7d472f05053a90a1d0ee620a,7f3a5eb9abbf23c97b22ac93c287ec7e228f0ae3
943da88ddacfbad9b5d730ed61c59cb31529e27e,702f79ec8cfbcf1f077977f595b6aadbc186abd3,c6aba5cd8dbd71f7393b1b52ba401c20e09341c8
4718029fe07e813a2e61ece0ea9bd6d3db3d0bac,90844c2027e078fcc1ff6b8d3df911a77bac2ed3,0978f6ce16085662bca71344e135cad6a507ca49
3da54dcf9f87336887f592c98c0088372da876e6,96aa2bbf740e1af0e814fe6d07250fe06af9d510,b1f85792d7a7aa90bc2b200d3d2db0c97875fc32
9813eb9048a413d8cde171b9e2fd558da1e3a46f,5ce9353d58cd5ee2679dc510561ff35914329daa,4e28962115ee9479d465ba00a1db6028d2badb60
6ca6666d28d27151fdf2bf04c570d92afba6e154,57107c331093212fa5bc0d8fc865b43755ff3f12,7ff393085e3b1538a1c14f3ffcffa92a6b4a6c73
8120fb8b774ae89bba6a3d186e4b7723a84ed3d2,54dccaaad1a768d2028bdd7ecb238fe0e5415bd6,d29473154267150c65be268cf070941573a58ffc
411fa298ae03b9420a722ed347428c27ee423c29,a8cb061a5063fdab6cd5c1a92d7abe5feadc0c8a,527c68b6c3c9a77318768ad43b1558278dacf465
4293d4455c6481529846ff30ee7f50a19ff31bf1,379c1414a7088019cd71b98ea36353e65bd9e8f5,85c648e60318526bb63aa57dbf3c862805717606
971b8b9217d257dba56b7cdac22d71492fb6a7d5,62f21ae60dfaa4dc6f37972a03ca9acf33d0b8d1,43b4b343950aa11420fac1471c4d3a647541f2de
b108608b2918674762ed04b436604bffad4bd58b,6af886c2b961d5a4ed7772f81d6348b8634ab385,78535bbcd884a550ce399bc6c0ce8ca47017b45e
229eb93e72156f8d7175c3ae379087b8a46b60e9,b7b495a679e1ed166c6f99f1247398d3dec5dd4d,366d1332d18eece8de310aef2b9bb7af07d12e7d
5f3749dc49b9a7a8d68af715d51070c8903d1ddf,627fb9a25b1866f9fa30658ec7962f4cd31ab145,5075198a8b76034e5b5c36b8d783e276c6f11b56
2f1eb9be18338485bd807dd03ea602d41948cf6d,ee3b5f5a62f09a33031f5276351bb1877ba83b5a,9f3dcdb211ec3cecc9013f45e811bd0f633a7072
f62ffa74dc5eed4acd756d59cb891a3bf49f4eb0,4d57dee8d9e98e005a94fcd744aa3047a20e3a98,4808ed63e3717bd68a3e1fe0c5bcf63463016e0d
fab610a92770b9e5c3cbc8427c88fa770821e414,236febb14891bb2a46f273f69aef5cc7212982c6,f1bcd02aaf66b7eeaddc6173ded485938f8335b7
6cacd9c824d34c42f71977b23342dcf2403b47de,02289d1f5b986c96b0843110de46a143500f4c79,40418f5b3d5d69b4c38fefbbc46d353b84bc02ae
510a281c3fcbfc67a8691a892a17d37cb662dbae,8784dbc095442790a2f24cb675fdc67d1fe2d08f,b1d9d34665ce1f26bc1b95a87ab085a6bb3530ad
559fcdf73611ccba421b988237b062ed84a5e287,98a942a37e4d19a3c85f03c3fcc01f907abe3ef2,4053d59a2c9745af6f84fbca70293cae81a05006
66bac7c415966d5531b9b1f020147b522740040b,a5f3040da528a76bf21187f647e15c24c82d980b,c0fa45dc922b2ee1fbf6d63782e50f8b46c162e5
76753438edfdbf29d3c12c6793ee5ab9663eedde,22a4cc66ec7dc79315a0f63d27d2ab003f7777f1,62d5ddffb8b56411a06b8288b6237e31ff3c711d
6556d18bed27361321c0a2df91a1a6e126db2b36,e0e8620deda3a3b67df3a99a1f7b9951db533d33,74f95238064736efc2e83d349a712b8140f566e8
1fd2d3a83d2f3b656e2fcfe6a3399255320f5459,e87c52d7dc87eb53a11e91e2b27f55abbc03cc85,9695dba4d98dcadab0fd972ed9b5b20d3323781f
33eef1f9b12f4063fb7c93c01f4b184f0e1e4ee7,5cdef8050bb607ca65845f79a35c95f3cae518e0,f832444eaa72854e53515b253914221095c92419
13055bb58a2ca715666b5f19a8ce4b507e921886,20674089bd3306c2b2b9bef14647e9c41c6499c8,aec7aefdd5a0beea97fe69de99815f350afaf717
91563115c42448df25ac313b4be6049e0f65d11f,a75adf542dc2e3c8c0ff80a976d96cc53d5598ba,a7e19e9f068422a4d6ff58ecc1559c0f5627612c
8d2d91d5055e27ee3c2bed9444241d4ee5bd6dbb,5d97ff43fa4b34f88279ef6e944fd1874cfa5c0e,74ab27ae4717aed64f7aa12a1ea5dcc772582961
cf6a97c8edea0f589a46eb3b862ef36455c18ec9,067d96242c10b0ec3c24f1461d71d450d9d72fc5,d1aaeff832bd6b0ef20f1f38c156622b0939ac7e
9b280db2b12bd6fb201ebc967af98a1320ca14cd,eba76dd0526f13fd297eaea1cc0d6228f88571b8,46b52d92d38fbbda8255542e888d23f0359b3081
038230bbeaa0828d92b1740874b753308afb162b,816ab7ffcce3ae3b73fe5fbb0cf1f363a9efcfff,edbddec98a5e2ea120ea0217656cbc0fadd838cd
a6766d62eed085ed4ac65e7ecb81876b0205f11c,0ae45bd2cf17b5d9dcc39f4f4590a214329e57c6,54aae023ea2f4ee864c4ef3ce98ad387c166cb52
5acd7a7b83643e3c4f8dc96955906b67ea14eb8e,9432a550e190d0530971363b55918ce85c045d58,bce88f2e2bf76c3f979902aaa60598a0487f1509
f6c741ee73d12001867ae9a750165320871cc340,78f23a462e3f4d4c3be14d4ea2a83877093543c5,fcaea2107583d5afd1d2cf43e7d85d32ea1248c7
3d3c904ac588dc79441b0d9c29bd79b6744358c7,4add05c625395fec0a2eda897f3f3dec67f760bd,8bef28ccbeaa95f39020c4c954ba9bee9ee5c0a9
a73869b879537feb38206e95e3ebbadf755fb406,578ce51fc3178e9a6a1602337ee6626426739b5f,8184287ec0c49498f61a587290a0117806282d64
deec6fc4ba954e698c7e928d9d2cbb2724a40b43,fd125b506e5f69cd2d70d011745c73bb35f8bfb8,798a4d76117736af4bafb662ecaacf66f0c45be4
69d40dd17a37b87ea0d9ab6aac62703819652470,4f9c19d94334a8ae546c0e9e0aaae699f16efad5,ac89cfc6c705d65fa0e8a359d0a83e0a08a261ed
1d010d918bdc0d0eb07220f75ead869100093f1d,5198e47e36c8bceb2842570a7e3f4ec7fd8748e0,ddab39dbdc65259d388133c8a99f9ab028c0e879
a285500d3680b13c2c5795d99c51404764b7df39,1d70437017f8158469f0d91186ccfb177bdb15dd,812736bd416afb2f02c894259aaa8b74f88f9c3f
cddffbed58d6cf218eb0266455b0ae5c8bc806a3,481741c65b34f6090e319161eadfa4612f786736,a0d4cccd873a152308f0f917f636d17ed6d86100
9b87fb4a347a3ac3aef351440911b50899b5e444,e8da1d081a710fb13101bc265bc363d05049316f,16cb409fbf3004690ac9cc22a41e4d564f1e441d
1923c8a6117876ed9646ed0ea8a7f8f2f49123bf,27db63969a047b37e4cacbd5d1be12b75cdf8dd7,637645b6d6d534f65d56a5b6a8582507f8f89941
81fd3e274831ad5caab055f3066cf3751e96d4c2,d6ff4ed9673ab5a0cd0ec8fd4c1df23429755d17,06cbb6edc7f1c0964999224e64fdb21238ed2bcd
7f886cc4b0f57b41c7391a2e359b3db16281232a,9f47e21da3c24a06be2dde8435acd3b3a2d1aa72,be969205ad77a1ecaa8dfd98bcfe6257d3a07b0c
76df7144bae7df032872ce6a009b6bee110ef2e8,09625785114812ff5b3565d357426e7af2e537d3,c79df5f0fccf50ec0c18d580af898b68021d49e4
d8f06aa4f163efae1c2938662c5e816e25a42b64,e03b9205206455c56174029ccc35d27a0e43b61a,8817e896db8619b278e679b1c62bbec316a12f0a
a1ee4e04ed8b5410a10b49b854fa17420eea19fc,3cfdf000a2506431a9176e47aeadb1db67d7357d,86643710c438d759e902012bd98c90a9996f070b
f1cb5d8f71cc09bd03a3fc6a67a1803bc2265016,6a6a17717ac141abdd0b6f661f766010837ff212,a764c035b23b0a278afa3710542ce850923804e1
f8967668371d7b2fe86362f898745d1710ab9abe,a33e6230a00bde7fda922ccf94a49da79f0bff5c,e865ab4c3a52fac811b39f24b4572610b0e59a7e
d0bf7acc188e3a0b701c58f48a196bc2d8ded78b,1b393c80aad885242259470682078971d29a83a1,9a7a97175ef8d78e03d878b29ee5d48d24186016
ccc843f98319c4dc3e5a6654f4c20a238969e284,91481a5fae82c1995f41256dfdb08c0f278348c5,aa43441ac98ddd6cf5fcb6b6109775a4ec91ee33
4c8e802dd36a951f6925bb8bcf4c9ea043235f81,e8e53d13cde14e49512f220373c6ef2f9352e1db,fe0048bcecff7c5c9af3fa64be991da072fb1ec1
32fa0ecaf991bb0f8ecca00675a31808976fbef4,3ca3c7a60609c3dd861f4335bc8118a83f0a0551,90eabdd6b4cb82333039c102808beebc9df0a3d7
283c213a0c6ffb942860649f703b4cf8862e4f5f,8bea5dd41e86662f33771e442650d774af1a3d4b,6e4e3b85800d8f12fabe4527e4c13ec5002d9a02
e74797d41150a8b333a104c245d69a700da0401a,9274f17c527a2e785206282bd05fe7f4ccc7a01d,0103964250203de699636e16921fec85562f0b17
16f5863847120e1990e3bcb14948d78a04936df0,7974f39522b36a525cdfd730a5c989d78308e88f,e0de75224b17627c9087f5cad5180c43cf8fffe5
7c21b371051de1de1ca7891802b48a51a8d2197f,dc1e0a6bb3391a0fc1dc1b031abb454b0f1f4dd7,0c6287894b88ebf70c22f4c65a83e8ff2ab99315
3994626cb110c51bb87776f71fc886ad15c0c4ff,abfd975571b3fd59209717b7ec76e2740aa97507,66b471e5160235499f94848a8eed6084c86497df
e8b0fc88e340b1b288e9e31ae8f3d5b7847ab686,6ee4ee960e41ae5053cbce3cf1336d20e57be942,45bf47ee05bde9acb4c64b1c39ea0009cb405c7d
e148afd506194474790e974cad61118610935f93,f73fc7d566fc275c067398b083de92fccbf8a1b3,0c9b622a742063d1496cb47ff9b18db2480fbe31
bb39ec161058e23c3fd41b3fcc9f9c47adb20779,c92a035614a1c9866ca2daba28ae283974b68219,41a6c5e967abc1588e2fa9bbb301704555b31b7b
a76085e463af334c83a13341f3349e6ee29d396c,a76038e1d1eb5a07a2cab78044e793f947247457,b6aaa06f83f64b1f574f0ba41ac8566c2b5d325b
dbba2d2746022e583890e6ddda9d081eea30d40e,ca29df1aa9c58b951d8e2dbaa7b98a4e56563f3e,e2eadc51a3516e7945d559531ebe4bb7d9a26bf7
534383f6860ddc205294134f53d981ed1002dbb5,288871059448cddfb241a8a8be22854b5e71b640,907e8402ab8ac165fe0a35cc81d180db03df8330
3a095f5ed5b1b715f5697aaac3d1274ca4674251,ee89b7c9ec683320f2fa32cca9b46340a77b074f,1fce5121f3b239994a241d91508f928ca2052988
bf412455494aa6401c89ff331f89ce9dc1eff77f,1dd80d596d0f11601c6c834df19cc1916bf9ea6b,7cd082ba5fdff0517a53e8d711ef654c252b5b51
83604b709c0e8383329d3fc67c37f380a6279404,8c67a4370be13ff0fe91ca86f4107680037d1657,573f2c20d757f2bac27c023d421a81e028c5ecd8
0ba7ef98b39d7d34ecc34f36cb230f5f9c9f0f2e,d3782401347e6887bbf2d9fc421c2c658beaac6f,34ebeb15ed8e3ab334edcfd953bfc328c7b52b5b
1c7626715d14138249a4a7fe0e9fea786ec00959,b29b81ae7b610091241f2f22e53ae2948e114a61,09587d0c1b6dd5e8de98b1e5af284c7a51523d01
6a00f9f40367640fb0ba40f8b705ba93da7de93a,4556cb35d1c96f4d775a2ae993b0476453d232a6,70908b1449289321e48f58b71266fc3e4884071a
743d7c50d0b74afe5709a7f976af2cf3259ada49,9e7895575ed1f29e0493d1f6a8e1704786ff1ac3,a19deace45acd25050ecfe0c8f31db1255982876
60b0bc55354360e257aa58cab02629465f1f28f9,dadc10658ccc475d2f016d5c360d1172d1d66842,29cfa3b2252eb8305ebd322ce1ca55ab5092de69
59f293711a806f74b8ebfc175f64fd1f505af73b,ae457a18adb106ee3c91d3f6fda679a16ba5264c,252707a873aace64a0154f099f1dab71e9c58426
5a680f014892d09c531e93ff6c058731f803b84c,ad72542e9e3eec2f4ca704690080534786c93dea,f27b55e9b2730ea8b4c8b5a81143ae618cbd31fe
2cdbdcd5c56251e49e7c56391a8adb04adc5912c,dbbf7e7f3bf1c565ff756c97e91ee5df1357b130,eaeb8b70fffcd163dcc3945ad999649b6d5e9227
4361e36ce0254e4cda21977745ec4bc619952253,ea8e3cfc37b068aefe4c0cb20e3fc081ef043bcc,26888342654bf4e8679de36aa069118cc4a52859
3b7842c30e21d72345fbc4708523a283848279b4,492754ecca850986a256273918bc4006fcd63bf7,2372a069268bb381d8248207ee7a0484811f5b27
a27bc236a06f2dde0c4f8521f1ce0d3e2f75856c,0e142c00cc432cf238e33c7274d2c08b396bb605,430f1910ed39628284a38dc8a7d44e0380c9cdd6
ec3a04da9b8f5f172ce3563ee17b17cae393eef3,f1b166d6b8013fe8e9c192dfe9e3908c5b379625,ea659cbc2065d5c0ccc0dc8804eb02efbc9bccb5
762057f46d321c99d1cd274a7e19eca5180ba746,dcf6063dc3669441e4c0a2fad206f21b253f2916,a05aa25aadd53a6e9857e511a82158c782c61678
591c1b0177b188bdb18572a0b3b20dd1d1ac076b,3ef0db24047a6e5108585a9be8f68bcba18e4903,49ad3b0d2c03a4bbfab9fbe779044357c1e0546c
a45e5e7ab643ada0dc7c122c405a3e84078a9e89,573b2554f4ed717c9d6f8ebed7e0fcb29021ff86,e7ec91eca8b4182e97a6cb88f50504285495df6c
25e832940cb6fa76e0c365762f66c466a1e6eef3,51ab0d759f6138a639453a429216f0907ac8dae8,60c95032fa92ee43565368feb999d9c66e1d9c64
76e3cfc38f770ac7fc6ef9cc2a1720eea5b4e99c,5d02c65425b2cb33d5c3b6ca07a13c35b4dac90a,b456833b03f54db6bea77cb2f4df20c856eba971
927e3fd455e895dea7a8af31eeb5bc82c6f7d24f,706443c354b0c9db48f7461a15f48086deb5a187,2307dc8f26b202a6eef263f2e2d7e6d2ec04a641
4c8249de3429731be1c98dbe8a75ab5d9ec6380f,f9b216f99a3dd7822d9f3f112aa1ebb7c8590f20,addd0e7dcfd08c9bcdc1a9d636d75941cf1c8530
61f01ded6193cd804b04960e151725e53c8cddc2,f382f2d6edcda2ea561d522194d61a8845b596b9,fc94770cdb70e26d869c8a75e2b9bd70f171e692
9e8d779f316db1895795a5fa191e4e50c27ffeb5,a730bf2b003c3715c19d4fa0a7c56407e3760f36,da5865139840a94a35177e27297296244787876d
e6b8aa07d7ebdab77f72838fb3a36035c4d75d19,c13517634fb6065309eda729db210ea2af3b1e32,8bd1f196393e22d49f8bd281da3d4cf3c0926891
41495627876fe3c013abdd8e9f650be3a3ccea98,2ce4f0baf561ba5ace64b9389c9f156f0c618909,d45076d9d6bb0c73c91b9a615679d3fc277e7cdb
9201047f31ec67e94b578ace4ac6537db69fd3c9,71c58c7b3d050d931f624c485f762f5fa1e30e51,25999ad8fff58ed787b8ec2999e5963052b1699f
3a34fc7be3402cb52a436935f31c3c4ccb5a2d86,def37052f159ff189b79860a51f66fb97f3904ab,03a961709b0a41630ae65f3723df5470bd34d58e
d153c75e84df79e2765ee566a40e2e7b4af1e39d,0d8156fee9625e8d85aa67f2667b7bf77e1dbfec,5562e3e440991e5d1270ea81925c403e1425da4e
598da1936e0f95aeadea62ed77cd1eaae45f43dc,b68512a96987120e021db04cd15865bc91e4e102,c3f27a2f1c2fe0f1db4594aaa5d111eaf50dc78a
98ec81896e01c501f7215dd2a39f535621b4c4f4,eed6effe27a384a2455c76d41811677aa2279ac9,e28b76a64e197166d26620b550ff959e22bd0435
d92bc0e7606b7e1d207e55fca54deebcbba569ff,94665a40d760b6cdc22b89278c201ace10a0b57f,1b2d7755aceb4592607340d8703410aab776be54
c42e64db82d1c0c40a4b470d46bc70e3fd4a2477,d5a50eee8aeab634b763e2b8e9c80f4936c50fcc,d2a1f9cb200b2b2b7ee5219c16e4250b037cb043
1ac2334b593e9ba9d9b3442fd1c1952e8fb1ec75,a0b637530cd7b81d5587907e0867075f9d7fd102,c26f9329b683ec0beebc131ecae9c120ba32627b
bc6ab39ea2f13d24b8a53a177901cbf3fc689143,14dc066d6ba599bc2ef8a34545920266f956adc8,4d6e3b4e1a4a9a0d7eb8933d83c154de1f612a8f
b11434a6f8f8f41730b7ec49c21bfa613bb99378,90e43e055b34073fb92f5fd7f89a6a4ef790bf5b,b2350d90ea29de8c1009c8d1babfbfd9a25df899
9b16fafc526d9ea57209fa6d48a364ccb72eb1d2,b923613eadbb455b35adae8facfb479b7f9f3629,b2a5334a7594238d83b84144e41cb0e37d8fc1c9
98ecfb1e4146927de0530a862643ddbafdc7a249,8eb2cea3494b684c5e5591e12b98511636ad1353,ef15d3d9ec80213697bb2acbfba3e6ca0f8fd487
37b5147b19c893de4555b0760cc8df1aa24b0f93,95dfccbb5e35bd5e97013e0336ee6a95ec6b04b4,d7f1e56191970344b538f551391f36907e9fb048
27a1acdc7d90a8aaa931f2d011fdd6f28695bafb,ceda27ae256cb00987c9face4adfa80a20477534,aff2a424312993642fcaeeb34814a43ac6973dcd
83ce54b8153d6eb47b392517e3092ae0f501dcee,fcb5531fbc90cab7e998ce8eab655182d165ac50,f5cf8956c5622b240dd8f2013a983afdf5b59014
6a485065ba42601a46eebed8ab85705bceef3f23,2ce3656ed3e43445a41168015466e8490bc39653,a19add9c886b7f64a2371633e16cf8ac2e9447fd
6dc47c71fbd26f85458ed5f923e60fa109f76bbd,e28238da9b5111fbceaf4bdc81528ef4cdfe26e2,a8352f3e99382c195ea69466e2f63be2ff723a9a
403292a13151dbc265748d2119f9d1bd52fb9d54,7bad1771390cbc297580a4d5bdea5b5281a9012e,b2ea782eb4cfd6fed9a85619390793815c204dda
1ab6fc9a4bf25638a2e2364f8d4679025fcd3613,f6b5c513bb73bc476a71769e094ea8401eab13eb,82a8640111169ad62aafce0e0cbeb2fd6864af44
af9c9a826e888fa0927a1969c93bb90dbaeba124,7cefe8a822589c09be7d80381a6ef9c4cc32e3aa,94c87243ca2a55d5374a22900b59bfbdda348d8a
4193563190b9a25de40bd6803f58e3529539bb18,776c39dc0a8b7563b0f511d19346e280a749e9ee,3385ce92a2ce8a7c6b47b02c689e8b28b8fc8362
be39828fca10b355e2cf9ee514736e87157748a0,d1f035f456df43bbd068ecda33d2ec08d9190b2b,fcae0e311db59f8c545d7b2f37f94a343c8ac206
e25594c48e207157dddad49d8dd246fe59537e57,3e94af163bdff38073de96da87ed074c167afdb2,cf5feb0dca15e1898739352de4bc0028b831d0f9
8363c48863a1d8ee33fe1cecbd184030f86da0e9,9859125c7b927677e77085dd99b4b4b83df65ee1,eb8325300e523a56d4a11c8f2dcb16f5892a5cf7
2606cef21fc2d8d3679d33c994d9d5fb04a68def,fa5575ea549cb3b9f6c70c3d6429db41fa46864b,b821b9d502b1cfea62fcf2fa36f439eac09739a3
557e82373484ddb4b48373d7e4931d7b234043bd,4db653998bc84211acce9ca2945d06dbd2feb90a,7475d22154dd441e70e8c256642e33a1e6a42dbc
b900be6142403533e6c6d7cc2ab78eca1676b797,db980a5d18d1de83a9ceccad8ce9e283d58484f9,c910ec814cb6bfb0627142dfa44e17ecafc9e49b
4e3c170ad4fc325c532c2075dece7459b9682f5e,7cef39657f0211ce337b25aae8c0cd7901b03718,8aee781950f2333140c7bace9bd9c36be86af4d2
1bbd16d1b7d8c7c48348d63a5bcba07e32ef9982,078aa5d04677fbbfb0818bcd0b004719c742c5e4,9dfda963a3df7c62be5ec5c94de0b149de590f2d
ec9c81e77e0f39f2a5748fadac320f6251959748,ad35fc82af76c5460dce612b2792398bcc9833d6,b6c4592513f8a8295093b82c5293c2570003c33d
46dcd4da760057b54e5f5694e8f75408c33fbb3d,dba189f4af385e887d479365612d398358d9f732,8d90cd3e64c8e2cd348f5f5d88714ee259f05527
4144f8d93a7f63d62ad13092c72a290b3a3f967f,5395e52539816eed706dbbd90d3ef5051857bd30,eed1fbe38aad67688da6bf7b142e146ca34a2fbd
a9698b6f6ef11184139ef9e53c3bed8b24c0942b,b82af25e63e562264c0cf2d3ce5077a272129480,90305b6032926a4e7d19d8cdedb183310d56edb7
6a94d2683bdf2ff9cec4aae2815d079b592c0650,bf17a84dd28433d810b4f83dec7bf08a1eb52c87,972a9df03189ef97cb7de63bbf9af1e56f74cd6e
fcadc801638ae44193e61aafa7ec1a65630159d0,63c8e458bba2831baaae76913d61ab0ccabc4b94,1148caaece7a1924ca70f4a6db73790bb02c8856
5604bd951ee6bada9d50bc86d8ec1dbdd84e6948,a16f35dcb18eedba213c9311a76babef6d529dff,e66378ee59998ae15f8a3b6afae4f657d17d37c3
2da28054d4ebb426bdf6fd3888df387c4cf6d0fc,19ad26afd850fa79b4bd599042a87c88abebdf14,75c16b61266043673223fdfed30c543e353d4b6c
7ef33cf4b2857437662c9aaf505d824e3fdca023,425707e936772a859aa4e0208fd671397f0b2808,2ed4071c1e02e8374aa8ca5235df314eed3dc7a8
55482bd87644bcc0d813b90b4c67187695d8ff55,8d441929a8c725273d101a0cc3138ce59f9c59e8,90b8b9d121a3d60c65022f3456d896f68a472795
7bd1ac4507647dcc1b07f0ee09acd8676f0960c5,6e1d7b4e57e0317e53947c0f33203c28325c0489,c6af4df9b91312d1feac6863b934ef14794b31a4
f32ef29253f6f347c568adf4686de4e10893bc6d,0e9ea11859fca6ff4a40536c22f8c25483344252,5012e45d0482034268a530ef31a3e33c2360e1d2
3d6c53ee74d148bba2a3da49d76792037b78eae7,de650dea55203e30699f786b59cc811498c9671d,6c065e69fd17b5fb5fd7384f4ca97317cafb11dd
43bdd8c07e7dc0ac9814135c4c99ad463ead4890,d2c2ddb337c3bea49c1fb5b6ad7408fa128b2d53,815b17a43b059c1aba2023ce866200f6cf887f2d
3a07aadba2db6140876ab58ab55ec7b0a6cc6d93,c122e16bebcaa76a8e1740d7404c1eaf56082a9f,6c47f8f4d79d3cd571e5d6526dec0791d2b2c8f8
b1e65ca49fca83bd215b4c8e8427560bf9083cdf,f5d76c55932f8e5ca2c267fb9b0a1a6abc3936ce,77e350b6b8dc61de3cba519b0f4f79b25eea9f49
f19b390c685209851873339a9c9f9756b0bf81c1,0c62ac9f1624faffca6d6505b6564e8b9969d3c0,e9b394a5507b35cff1ea969ef7991ee0fe2c6d45
6eede0f71f0fa802f18aeb6217d3f82b9d5834a1,f7dcb68c5a0173048e3a1fb2cdd1a2c5c0f3b761,89605f47c23776c423698a5b4bc2493060e3c13c
65b442567218f772939978849f85c497f96c4dc7,99074a557895249d03538e5df9861fcd6ae9a6f0,899981f318cdafa2e2e4764f0bc5a26889091ebb
dd5c2ea6e92ec1af35393ffc8ab83cf81fb80eba,d13a8671274398f7bc01e2a9dfbc9fd4b2bee4b6,59811090e1269d403f67bbf74d6288d4103eebc9
2a196899bcac210138cc267bb47475075aa07cb0,b5a71086e840fd6080d2d376ed43d31918ed1d0a,edf5fce7e33aa26cebca17878b42971c8da91475
e9594227538ce6dc537f25cf7082b5853034282b,cc260eb7b2549e88bb6c2aa0480197ee5eaf5016,ceab50cafbfe9b4b8cce092994fd1bf888e9c476
efd92fba01224190b6b225f487ef3735aa9c58a0,dd13b4608886c540135bf83d2992107bc03fdeb0,a401898139b7e50d9b6e872de949b56e4fe0e24d
5afd809e88788ea53097471a7ee783826475d15a,35958a9b6b927d8ce9b1d0002ba942e14c6b8422,abb7aebaba5721512c3d16857c78781c60259e66
33ef88858ddb65eedff41e3a1108cd6baf563917,6407b5f4db68d24454b0fbaaad864727b5c61352,260368ea557daad41a5395c9d08bf1f2eadfa2fe
5e7330448dfdf3974ebf638dc8837c87bf0c2e5f,bb4d3fda25e858b0f9153a0861fd8336c6007ef2,a135940cf5184c7af0b2ca1a7c72f58a45dc4f3c
6757bf3832ddfe5cc0fd488e98b20d5245fbe8bd,85230758e453f88ee2b89665f774994db443d968,b8723226787a98cd1bb7a1020dc0e73029991df3
44dca29926bd8364d5b013cbc6820fde67cf3e75,55629aeb19b0e7cf968d33c9fc0f465baba8f82d,761f65cef8dbb17867efcb380db2b28d1454e701
32f4931fd24c18db383d9ce156dec1a65c83d98a,131c1e1b938c14cd5a3892d92d20f2950b13cc3a,e7218d09fbf59d858cc952569537d739e93401f5
a2d7503f714ee8ff856efd8d17548fbab928f0ec,3f24bd38864d884b37aa4c8da025c51a437452cd,84de6a00491c1f20c7fc988d01197f8ae012af62
d6e8375e64516fd5e2310c8baf4efdd4420c6e36,079905654dbb98e0838a18e3d25a86b03889c012,85c7368759f5fb53aa23e03c8cc27c2deb424b62
7d23c2e9d0f569d3560f774da097ebb443c8c737,6c67798272308aee107d13be45ca61f0a7e5c12a,832b566097608a1864baf649e03638603d610ce8
8595c927a87f661700dce8391bfab95cddd730ba,5135b586cb692ca40e08114cc25cab5f709fda76,e5957b1ef0a3bcb7d6d04a24525f0a8634e26ed6
f2a5bf17fc9192bcb7ba4c53800e6cbd726c382d,3695bb5da509d5ce98ff59c2b0a76da714b61578,f9a4631adfa3ac07fb46811aaa847691e6de6be1
645fe8a0c309f3c33297509b977ba76954edc05e,a93942cd272eb048590c7e0ad3a373067853c4da,5a60eac0c816b8d4c107d5d0f751ce487f70df61
92e5ede3478073799ed5df091349fb4b90635e92,8a0498622b029a9c1150347f45a2fa310099a2d0,018c1e5dfdcf49b3e7d5e3035ddb089b3cfc2897
fd94b6db913cf9c38ee03a179ecc180ef52db711,29495c9ba57dce83d6753ed19e301855ea37f035,9adcc891cf8bff2098fd9360ae1b4d5d508213c1
ad1c19864d20b4fb311f8e74ace511a58c40cdc8,9061fba9ff2599442b5fd214efaa2789c34a261b,cebb47fe9aa7298b8ff50bc2963266f78ce4830e
c1db756617aaa5ed0477ce48292b44e1bb997179,4846bd78fb0e7f1199ed3d5f52b5099bb183ccc8,ed7b0c5e68bd870faadb6fdb8b24969cb434b78b
5cbb36f218ebb40c708c29b342ecbf43e7ffc6ba,4b1978026a3c63f1de96e8e310b4535e2b2d4197,f097d1ea353382bdab42490a2cc91d239de82e24
3a11ee9a14ae2e43449db6acdfd9e1312cde68a5,83969d3ba38ec2321439c98a7da615ee66b0e228,6cbb3d982d3f547ad09a73aaf5939c6092ae3aab
63a2395e2c552f5b983406f20b88dd364458bf09,cb96acefc93200a2e035edb877edd8cd5721c5d9,a6c7ed5e61f961a022897dde1d47140998466a23
f51798e449aa229723742425342b84f41025791e,657b9a62033085763aef3004e928f56abb9bbc7b,897caac4ac733e650c1e0109e692ddd066ad9238
b26703feaa97b31004bf833428a0a7cf8315e1fb,df3a0af7e0574f160e3934175b9ae4252269a1d0,136022a7b2f24e0005aa966f84042815d6d50187
e746cf96daffc2365178a934dcd1eb28ac955f4c,b0e1867b4c2658568d72cb1d023a5a010d483825,e024fdc5d7a5ff55e3ff96ed11ebd921fd582d78
9848349610219cd0d2dadc67b112fb09a8317e91,cc7d67d08cca783f2d0f439b24285a526e9185f5,f562a8d9fdaccdfd630db4792ec4e0ba3a8d6e58
62a57bf82ef45c28142baa6f07d3b9b8873b7d57,c43f671baa06671d2aa86653f3925b9dc8f74c4d,d1d0afe337c11f386fc189630265b6142f5f734a
13fb30c52ef398c3c8a82c262ea64bb83567fe55,e21186cac0739d0a8290759c551a3feceb1b4360,68253e2a738a32d47259137de23d67c5adc1d228
168016b865d3d1ea7de06f0be713ca4ce18b717c,7b09eee02a70122b34747137458412f1a29ae541,c8fee693450dd3cd085a662952b4239483e2e1d2
5a6d9ff5329a79ddc330a4e8b6a59c4805a19113,af1194de4d5a33681608e7e745249db774e3a22a,4f9acc10f092a6a59a8c213ca29c08227ee1ab61
b8920670f442575cc5e981066c1512377d2ac50f,2187bfaddd5734e223948e60857b502909e80c8b,efbf5eaa01649749fc7f8adee03b63db407ec2a3
965bba5ab477bcfe124c7981e47f53457e718928,b11366c95b2c9eb3611e71919692eae50cd0e7a5,dbbb91705f606be92e0cc9daeaefeaeb290ad643
444fe092da1e614163712d0710f6f38b2948ee3b,1a66cde35bd76cc076e25f8c2f71426f333117c2,93752573657acece7e917904e59078ab99cbef93
88cf633b973ba2002e8f392ad0748b614bf1f1c9,123f196d5d4bbbac76bf1b918a6a0e4dda0174ff,1fc54dd8bbdb83ad9a8f82e4a16d73a17178b655
9e9b38d0cfc08bbc3c9aa873ba41441b9ea0afb7,b0675058f5764236ed3b32279700155fc968a1ed,c32d556a3c1377b40284b68ecce8a3eef74fd8b3
9a760db57350c5efcf0521ece91c4157d0fc1d36,a91e547832499249ef916470154a1a2b31421ee4,f8848dd1857855256d50e4855725fae3aa5b4d60
ad7cc0e69d28afc3091c8b9a1e90175533efa9a2,b934517871cf6fafd0313b4ab408886cc0c2df60,6cbbf9c52aad12dcaf3ff5e44cbe19f39a5b7018
920e1c8d1916b723d2aa60268f1c6a8b5527712c,188cac3bc6dc666167aacf47fedff1a81d378137,d12bf094aba2667fcacbc7d4c9ae6ac2c32b2e28
32261a0f6d6a7277bd48712f13a4480c14c75a73,02aac653d2599332b70af2cb3433e8f5d76e6400,3e5f6d322853f4615392217e462a59f1a9c59178
1b6982107f1ac4b4111e37be0a3649d155a2bc1e,bb51ac77dd8ba9ad3512f3552515f5ddcd051d11,e2ade64a1e34f6374b9f3a4f1ff802b4b9a4c803
a835d8b533fd7ebba6d375602a4b5c981ac465fb,b150480c60aff770924e4ffd3382132b189aba2d,41b8f6a42e7c43acf8295c26acdd861210ed98b5
567244007ecf2a289cc6761dfd53c4db97bf0ee9,45b1d592f5a4bf280c7f1a59394aac2cd8f4a541,dbd8259c48e3654620507cfcac4f532ba857aaab
e2a26ecece15f944eaa327c30143bb55a4528235,27aa4d4e3495db95e396cf32746ecd93020f484c,1c86a4bbebf6bce1f14f2e3e17ab132fb3ccb8db
c83e6c34a90cc86ce1c3f3aae1da39d618793335,5670a7543cb170889fee2f3e8e65ccfd96c0b18e,cdba427bcf82e1c7af5a47b132f17550be4a473b
130c36c406e500af2dfae72748bdf470db602b5f,36f771a3125ada1b155bb98b62765f88bb9bb540,e142953c6d2b796e833e441773acd51325a7ed77
dd0711a27e85d15d45dc47e7b014c6bcc3fbf230,626e23d89fbb58d5eb3aa4ac9532fe8790d1d689,399d82e1da8ddef74297867282862598aa96fd97
d35be8a9eac21ee762b452df1ea879c9c5699f03,2c51abf40dcbdfdfad4532f571e1f095dff9c8aa,2b48afe151a41943520040852a7d075968ff1bf6
3d805b8a9a2e9803f58ae40ce286b274877f2b78,a1ea1dd98e7c76d656a232e822d3d7c47063a11a,fb66369a3bcffdf7d2a96cffe8c633b2ecd12182
86547d35d78ffd26e1d0b63187ebc8472beb204b,3ba9cf5b4ffe0a10dc0874f69e0d72e5c77f7358,3fa77a4f627e5ce993c88be7849e27b64e7ae80a
be401422fd786e0c14b27340eef512f70d1f668d,49ddf159b26fc34b5f9a0385d1e82edeb75e894f,9fc2b9062da63731b113043f5550b6734ae0eea1
c75bb80b140536d16e31f140a111a14c18ae7ad2,a7d1f7d7712b7f8845a59937fc9e22e67a7fa5ca,35a57bac94046da556fe8af48b1e791d23df9c0f
e050a019a278827a3ae9c0a32cdcb2dde00ce50d,f0e31628ad7d584507612b2d7c4ea017532cea78,49fb1b4c292e3fe305a470b3a2c4dd52f6d46733
cd8ddffe426f37743c0d17ecfa990b5b9ddf442a,f18524f2fe32fdbb798b38a19d9e9bbc24fef3e4,e62cf5b9e7f98f8beaef2ab288574aced94b15ec
57935a895cd02101ae2e26701579133fb23f75e2,ae12a79bf75e2019cba48e94d54b1f5c2fe07f92,a1064ad8fdf5b5941c86eb5d94009a264e9f8cbf
6d3e3d06e2bc18dc15000093869e821a050d9b60,92cc78e723496ec16475848d6339bd8ddbcad9cd,0eee70ac816afaebbc567e00a5c18a6ee46873e1
3f7bf0fd70b339a43889898efa59af4fec33ea84,e748e4c7ab79a4dcacee4f106f53c5699d55dda1,7da9b4a98858e6d82f297b12757b32e62c8491d7
c40f518de4c9ee3c4e6bafd2ec909dc4ca286b24,a0366d7d28f806b3bf825d6613040e38d3bdd64f,342524c31234981a48e52659d07ff2e52cbd81b4
e67670fa70b7f92724ad4c55f5fedbb3b4231615,c5cdfbd9c03c0d443e5a4f4a7eafd5ea1c2b0e21,cda8971baaeb240bb7c5075faa96dd4be02d923a
2d680afab7ce6d66ee736c93761c82141229ab67,96f43001588a2a88d10cf2e2a8d5e8561e98a774,8fac3d62ce2a37cfc11f16ed5d47761c6cfd57d2
12c4290ffe114161fca1a0c5ecdcac5cfd7f87a2,3d2c96ebbfb8ba47349db24d327fb1b577ab12e8,92e60d210759a6250e1820f891c8aade6214ad20
3db1415a449212d8c3ab5a9085106c9f11acaa0d,95f94a279c1807554ec2c865ca045aa29bd9e5b7,1b08b89b7b552beecc90672f8ed0b1a858169658
3c2703787cff417098cd01d1c51b4b5cf70f2677,a714e2ff35e78233486f4549d646980ead04c4a5,19cee9b8415bce777f012d5ec7634497f0cd53e3
d221f42a578316c99fc74674b037e54725bfbdbc,b051e7667c5051b3ae9dd511ad235aea19f2c0d5,9e3483fbeb8743afdb32df31c859753adfc96039
36afcbf7fea3dd51e292b20594ef994f683d26b0,314f632377306065e939fb1b17593168bca3982b,827fe2bd83a9ee5d77b49cf4eb8cdc3ce0369859
822022186611aa62d08c8a328f69f37bad2dd38f,57466587c5470ed174144263608febae128895af,a2789d611f74b71fefbf8a3bc0c66f3f3ec3eaa3
df80d4e6120edd441361bcf9e2e64045ec042c2c,931bda56331fc2fbd376ce925c4c9923c92498bc,77f53ebde3c14b1e26734fc0a57629e5149743f7
aa5517d44228f2909b25744ed2fb90770d45dfe6,e942c00f8259a6d9505d1ed849b36399e9def989,71df6b83c64d331a3a7347f762e80755088639e2
d3abd339b7cf9b3c7e70679ee65a4732b56ca37d,f2bd099afba70273fb8ef60dd42226feda3808bc,3cf8ae8433acbc20e09eb6bee6c6e1e1000e6b9c
a0c87be0fc75cb242378c1029e5fc58e7dd41a18,c9461b73139c742a7a86af045212e08dea83c72b,3b43bd027c51f7914bc8fe7f938a7a21d58c1d85
8bb3367a491826f1f5984810bdee49b8ee35552e,8520dabebb53c28245bb39d8b52503aa750e02a1,e57ef24e37be92ca117302735b9e3584254483d9
a27cb35fa83d995a33f90474c2481d367cf6b14b,c21bf747fb3d5750ce62ef49ad5334528e2880ba,e7e4044bf053846dbc1fa692b9d559225e385f06
ef53f9bc25aad1cef20f3cd7e7e248dd5d172e25,47789734923810f9363f0ef384c2aca27171dde8,f6a8b045c2f52740186feca3d50c3211c74c775c
7da8c774be6670d6cfe3dd9b707d4e47c0a4870b,42b052eb83682e0bc5dcbb2c8d47e045c462dcfa,f3f9c68ddbea571e5cc95625a7a14fee620c09b8
0ba4cee279b0bd8b13dfa27ff9a32b6b80397d79,69c78385718462de06ac5af39e5b1c2829582bc0,170c112301ab3bcdba04a12657ae61dd275496cc
1a19fe1f033a7d4571f62a4506cf3a60d37e3080,84be45f55d92a379c237d76f7b2db9e55e0603d7,1b439134083d3f032eab1ed5ec5c016bf4be84db
16bd996e74560b716938e825ad216ff57b9a51aa,2a44ffe51bf56f86ad3043e9f578e268b860e4dc,247423400f0d0686f2eaaf5de7d95a99b258419e
9d8fd6d55e486d7234c597a89823e0dcafd91331,7488f1e3f886d215ca392e47bb7c2e5754c18985,a5702d89e8703ed2e5c4bdcd246ff9421fd551d7
170051672181f66a9296bb6f8dab13bfe0a03de4,cc27576339115108f045222df45a8acb3d91723e,a1a2549cf10e38b25c8f277a41dc3ba409a7a1b1
96d4bd19ac815bf860541e51249fef93ebe41c76,c5f4a6acd0d48a567e2d11bb0041c92a2a8db897,487ca08cf31ab89695d703d45cc7861868251c94
c4899b5dc080d09fdb5ba48fcecdf1f9cdbdb5e3,7a34677b2ab134fab30a19c6bb6249425e802daf,977ca19dc013324096e5ef2ac6d9e2ccff824d42
e0eff8bd89aa0aa3d631a197f33863241c6b13c2,230142e183d986fc9a4b1f8f32b42816bef6be26,f00a932cc6fec80533ad821192d4be8266446839
42d91c02bdf7c57fb2df8887d92e0fa298c4d8ef,a1abe51f2a760d47c2a12641f7b7fcf9c634d4ec,1e83d415c3a2aa7b66c191bf40781d40e37e5179
bba1076e12d2c689b405b12f16120c1a46f9b69a,8ad7decaa39dac87fab7f37f75b7da0aea49b2a1,7854152304110571f6c1a950f3828b4aceded90b
851af5033fb80d4e19c4a7b5c44d50a36f456374,14466ee9d99918072db8982765e621c2de309a9d,425d17c1b3407975f531465d0aea2495dd5315ad
b9a8e6832f8db6bee1abeb9e5e958de8821d949e,af04a523bb4881f106908e231b94561d889f2d81,e2905b8fad1750fed539e32f40cd69619beeae39
5605cebd462b2011437b05d12b320c3b6544736a,ea7b9c73f3ba29a464b2cdacc83d73129f4f8d6a,e1f993c363a05c12f7d54d9da46e7133431be624
28e7dd77dedae2b592eb3ecf7d3188b23718f637,81b22cc5d1673cee927fc645edcf8a90fd8a7f8b,c0893e5c160e21a40086e573dd870ccfce6e53c7
babcb631f8f24998899b6fc2112025a077e281aa,adf9f98f7c182131fe5f83dac16411645897f123,e0fef23d77e43c36d6d6ad474a21e5d1235742c5
30e0df384d5961c5525c70f2878963f04ec9bafd,4430422489633ac2fcd7c8833267ecf9cfbb9361,e19f60503b81a4752596a845e9dba035d4510550
721e988da2298e426c5ebc78205b2917c7169816,56006aa002ea57a67ff1d7b7c69c4261b6bcfe84,4e959de2c73a6a87b96dfac61334628437afeedf
3eee2d8ff34834d7f17f7970019db5e5ab0f5e1d,4c6338207f4b13eee54c34e67502630efc4d2459,5d7e3ca24005a3b76d307c879d76d05e99ae59b8
1d73dab2b0e61165ec2100a21dfd4071fffb2145,a6ddea87b7eb020c03692d383d9592dea2be0cef,d410deb7ae8f405e9451bd10db24a65ec5f30a33
4510945465e4e8cd483c64d316d1d43005ffb585,d7d65fe0d7b62c61f4751b896eb6ab9271d03a0c,7affd789045f9bf2a141cb96c50c08cc484e0100
430bcac389c29a5ceca7759cfca69454aa31abf9,b6b2785b66023ad48242b2a7bc55e445ccd48238,e1288897f3639a08330dea060b23283d9e455558
4b659175d9043c58f5fc78f3ef159a09167d45ca,32f8dc7ef5916443ececb9742d4ddf5ee8abeed6,0b6942de8ac5b69d48a07cca22539945cbe5d201
baf950bf76b7becc2a13fdd4d2814a744ee9b52e,1bb4003984c399f8a9d881ec1d1a231d907c41b2,6c5f9537b36d95ea91686af22b34c2087634ec80
ee0ad3ff86723cc14eac57aa8f5f625976b557fb,ab581c5c301090d6c68c24437af404c0a5962990,29bae2297fa3cebc09fd9d18a823a683aa67daed
f2d6b4d530b0e7f7429bbb1a7c6459f23ce36b24,cd8aa3f0e0716b44cf14ee24b4463f1c12b77de7,a641860fa84fb2686b1360723b13625f6ac1866e
51fdbb5524512dc3279d0cca38d44b38160b8111,f364bb6b112e7765544195e4d16da1f5943f415d,a74a35a16e236463207780120735d0501f922800
cd6d048588584e4a641de16abc7b857eba961e32,9cfe6e97a0688bd6321e4a42603e0a6ed0cb3815,459dc68ab9a7ff969a121ab5e22e18efe41b9854
00a5d30300e91ebe54ab99d4b64922d5e6e39850,69761839c0c2094d9ae69ae2d0283eb06d761df6,0b45cd95f745a2cfc485062e1bdc171984d68568
3cea1706e9208fb739b0482519fe48420ca520ea,4793447be120d6d3d9fa2e53d50b45b4b00ba2f5,aaa6f0d9c5ea729efccfb200f4ee0125cfa6c847
e77ec69de4f3db4d89f2e9287672d46cd35c949e,a9dca3268982c53b363346f2ccbc716b7d695183,8b08486fa1ffa3f84aa6715bebe98895dd83a0ee
4e8ef448eda713f0b54d8ff02b2c195c6f66dccb,5598ffc210c387da7e4e166aea1c018bf6b3f185,55deefbab5a5f3f203587cfdb1f065251d3321f4
e54197e9d2b5c595cf77d884fec32f0639dafb8e,ec28b7586c4b74823555f196772743fe9bfa3dde,789031a6e638a733e34cfda80ec8c355e2fdea63
821c22a38f8c172e3a6eca20e28027d86f854876,8ef0f590250b9d1f374dfee8409827fcb3020d4d,dfb8794d4d2cad05b61dc07402610bde5febf506
ea417fbaaf750b7e1fdf1dd1150416785501e270,e8fcc5343beea4180e7e1f83bef6e27e19dde242,fb9c7183716e375d2c35ef7ffe4e6d1400d62993
ed50a1941b9ecaa3269d4744fcc00f62261ca218,3e75ba52f32d1e826b9dce0c406f22628a1ebf0d,048385fd7f3ff8573ef72b00fbd02c20c21e0710
bedd4edc727d8f31b9eef0a40403b811656f5c04,09b435cdab4e310bb7d0f4d6e4aa0fad3e916ad2,e9ec4a8bb3c08c399fc5f674e07e9876b5f9411c
c577ac5ce9329a112fbc31e3360092f445752615,6bbb10e64d1f3c5e613e9242b3598c30d41888cc,70b0cb99d435314ec92cbf65749bd899e5d4bd48
22243058345dc952492a1846fb13c2f7357616c8,18eec3055e0b05bad8583a87dcd70da07c9fef40,3cae3e7e4861aefea93bf7598444b5a292b141b1
33dfb6cb4e38fbb9f960c900f3c57a8aa7faffc0,ae47cc2c88688f9daaeec061d870db8f88bedd52,64feb6a5cd3bda525fc0dedccd8d7900abe88fe9
7f41bb4718f238a86ab07aeef677d27c16a43c5a,9c10167b6fd114d4996debe4ce117b3df3d38a53,6e84ee580668f9df9fe5cd9219fb2f1858fe5d98
f79448a9ffff84ffeb2242e7ec442477ad6a022c,7e3bdd501c189f7446bf34600add137a2be25cbe,87ec3d6fad48ec2179019ba0789c8616ecb47e5c
71e0c12c88dea98b02812f8b9c6b15b766486332,0e05e908d54113f40a6d4ce0870e2fb9f87a5d6f,f1f84a292c9478a02bb2ea40b4c368fa15047e21
c7a0c0bbb4984f935eec3b933c1a00db7b511052,67864b662a9ab677d2653500daed0b40a49b28ac,d3ccd10674a7c3d3e4aab9025f98d7f71299b5cc
d06852e6e9b50422f9a7173119f7d64d1755011e,def475f889d886c05f8de0b3c85b4e6ae4f58e35,63199a096610f3d7b1d1dc07d1715357dccf11b1
c8b2a36bb1671e6347fe7ecb7312856321b608ea,b8933dd267c554ca4f5441f23f14a822ea6ecde7,b49c3fe4f8e3396aec1469fa072cd105a5db2965
3f25438d35d772669aa2ada696c23d51f14c004a,4d676cd6fa2995248eb969a7861168c20a78c175,811c68377596fdebf8bfcee8e8ce773df42593f7
dd7320ec137055b4d1992b5a0b65d4068a86d1c5,ece59f25341cc47a1f3c38919844ca5b0904af2e,22f1289b2a1a04c81e9421ed2a1d36216f0fb73e
a221f2af79ac6f13b4b74cab79037bda1430327a,8f7e61eef68f532103387b9d88d23dfdaaeb3cad,586a7d30abb173acab88226edeb9a2c4549caeda
3635f7cd6fa703a23ff6b93b5264b527b1846c81,95e5eeb2262ed56d2c617ac5e45a626b7a4bb3a3,3882066f235ad7d31ae6f90780c4b6fd6c7bb9ff
40f23030dc4600301936f826949704112feb440f,708aaa7b97f598f0c378578e491a6e16f5a4bda7,ecf2ad3e53c1ca9ce9486ba1adbd82c117a8473d
ccbdfa91505dfde79e981b12030205933e1b20b4,bf8746ed101c4603ea005db72ef9743ee8cf3a11,d7d4b446c147aa5bbbf485b4665ec9309b14fee2
a9cc89ff46ec68f37a1a0ffcf636d7a9a4cfba99,9e228ff35571d28049571bd55f265993f62a0c57,5adde504a973b765c68268a8f9a9910e13851b30
99b01f66343d9d28c1231953d186a4e5f34b3210,66ff7a928c665e8524160da6004bbd98e0889e0b,30cb20bccd1e2ad966d107c43da4e799463d0bf1
2b0317f400596561c986147c61c9ed7248c4a7e9,7909f00c834b31579aa4a9cb50c5cd719c379732,c1ecfc323ae3c259aa3c085dc7bdb2abb5b0f3e7
64319dc019b03af26fff3b35bb3cb2853e540909,0e46041717a2d5fd81d4a5881c50a2fcce8aad3e,839849085b397690e4337e22fa6f51ef1bd88b5b
e41bfa04951efd43e7b89c16594e994702d33f5a,0ea0b69a30d32333ffa6d336bb3c0ef7aebf8f5a,0d3ec87492b9d2918608839746c34836ba19d3c0
488c389b9b8e6bff675fd486d601efe17f3b52d4,2596af84faf82b0cd93c56989bd774789be03d66,224f62a843c2d478e3de70e44d07f3b91a7afae5
4848327300b0580f23eed91842ea767e0cc60227,8cd10d88cc81868bce6f03f481b0bc83946d6ace,12bde4e9030c2c366b1cfcb62bf163ef77a24632
3ad8b4199c6293ef911ceb53ade968eb336c3478,466561f09fdccac4c599aaa1a337153773f3c99c,b797bbf5dc08ecf002c05c73ec1aec4adfd7195d
6663d5ca63d7ef3498c936bc35a749ccf66a2384,644ffa8e7ae3740c4997ac235a6675002eec4911,e40f997a40868536d6f49024e07f928052c4da23
e82c98bfce885e79fd7f9f10cd8d6c060bb1f90d,4143912b7287ad135e56b079a426b25277a22836,8f3cce556d7c3e3acd3205eb747ed58a5f9236e3
3855625b8da2d403825b5fb27a55ad65fd7cfa88,a807144ead497385572b4af461f240422a517ef8,2a4ca98e852939dc2337b66e0c88b9ddab682e8d
652f21b656cf37ad7cd5c627cf9fece13a86ab8f,4750840e89293d286db914f853154f2dcbb10b96,665670ae015eeb151e39336214cf7c15746b0608
e40996cd2c1a0719f324c68ab31cf7048761ac26,144ee6d51d302376a19099ba98af595c143b80d6,bb407aa135c73da8da59dd9a8122016625b08ef0
289fdc72c5e692069d120e45031bee68b3ca3f20,f720ea3a21cf0d65cd4289b9037f72790252c608,b53034705fda8db007d80a2a866a8e60b4ab3aac
be54d40660a006800d6e55c8cf5f0cc5d48aa84b,24acfb806428a1f6d2136210070022dc20fce15d,60cff917ba595ec388dddd080296b4dd10ad2c42
7c64bce04eed17eb0b594a970e38c56d79bae60b,094345871385d9deb3a9138f4aaa287c1f5600cb,46fa168d43ecd2f07bb101ba322d64d22e30d237
219fedfea6ee033ec68d4cd19447595c531e9d61,27476a915b81f5fce5486831db41a0cc3e669ad5,5d104c9115301beba82a7918ae61903cbd6f94ff
647f211aa5622ea9ff21c354cad5d0eff46fc499,a52b3522dc88a5d35c5084523ea5260a1dc737bb,c6effbd676cb27a2b733c3c0d6b467ae6c17f6f5
a3f441b590804111ee5f5912eb78622fb1de0fff,c38cc828e8885d50ee2d71b235c403ee98bd1591,c6d936dc25f443c76983068bf0718b9bf8cc2f81
8ae016fb85a071be24cf1b9de24dbf9cda432df4,c1e2f557f124dd6d00ac869446da0e9ad2ff74c9,5a123d33bab953b780933a6c310fc6217ff3e92a
d24548f8d8a26e19cd306b2f58ea5f2a62b6ae8c,071ae41d2485ae3200aadc10757c741f71148acd,3bb2586269c876856a834fb0d72a09928ff9d16b
0515be62b4f9e3b7b9b82c90128489afecb6767a,8696ca652d6f9686f26fa4627b070fe1da589077,bc72021039c8b01e5a76ebbaf5a2285787c6e7e1
a31f37b5e560433aea4eed2162d2dd19c35d7549,ecfff40f960ff65a27ea4cc6f72e21dc9e36b651,fefa163a354885c289f9672673cd65dee2960df6
2005e3c0941051eed2f5d224f493059b47c40e8e,d74d41c5d217d32d2e81e0c65334cb7ac61d2b39,519a102379bf41de2a988f9c0aac508a5d384a51
b4ff9b71d318be9463d054b4c8cc998aadc8affd,c94531645a31d8bfb9cce98e6c8ac7c32e9e7eb7,52147baa0495218ea06c588d1f849106f480c4f3
9b8af14f47176d0c97a7b3b07e70631e8bbc044c,da2649fadefac495f3da024bf955aa889a0e5108,93438ef1a5f157d2acda458c15f5e074f9ce9866
33fb8874799a1c90f79175f108dd21702d696472,60cde554fda8facdd2f7d79db327d628a7dddb69,bebe53ef9f82bab6c8a6396f4c96d53d73db796f
ad69c6e1b5462769798f96d71d4327a5d6eab3b8,c925c1aaa6fbd3091c7917603fcf49cf7faba2f3,3e21d24098ec9822d0b6bac12cfd9492e8521840
a778fb2eaa4c793cd7f6f3c6d4a864dbe308184e,dd09bf64b39e402109394dd0f4d32cc97c2352bb,022d2804a9500d50cf68e02d398af269ea731291
c33f47a707add75d246ab1efb5e63a8f21c9ff24,5cc4096f41544ea8ff8948aa7e6058ae37bcf12c,1f7636612542d76c4a9163de1f126f9d654fa6cf
627fd6bce120c83fd3446f01e44f3cb147df8de3,3770b55ce135c7d2868b6e5bfdc95b17bd97ed1a,3b3a0a660cfd8427674a6d689172b4bc4672ae3e
48556ab039b1b2a6507377ba1f7148655a0e804b,e555eddeda10f75c367d6e1b0bb3dcee6b5a3083,11712658b0ee16f5df5ec56840161afcc1863613
2039509cfb7940fe9a912c776ec1644cc6d76882,a0b78ad1f7859efbd51f3267fc93fafbc9d7de32,8743f72f1134750b0522330904f57d7ebd535eab
84b60d3f001c642e252659e84923d21924da90e3,8b138aa0597d7c12f0a5c5f43564c5818a4f295e,a47a1c093a31e2352d44f94a37698c1e69cc5e23
ca0384172482ab6488ec7efa643c68c96a796671,9daabb2123594cee642baf50ea3c0cc5e7f7ab6e,8cd6606970c8fedda95a3411d684dbd57379b46d
f670ebbb280f5bf5cb198f12498e57ba1dc5bf0e,6ff566350cbc2ecf8615cae6cc6792939a288ec8,3d55ac9d0967620c1a2c196e2aca66cc62a95d9c
c117c0abf576dc47f01257751b8c10109b5c9c6c,e6cbdba0bd6bba9c4dac1333ce0405a14389e3a9,d38dbcac8f21d79c666649301216ec274ad838b7
8eea58f64901b97890fc5eb4b37427a55036b539,9b4366e4f6d565b0a1b2b2d105e350b0744b8d7c,95d7bdc3da9cd08954dc6fb12f8d6b2ac890a7d4
b891cef5d2ffd8af876eff736ec15045eb02ed92,b247302871aa4d46bee7e0d516a96cb8102732df,1a4b97a62a6e6569c3b8146e80d489ef22347df4
80c8575636a7b2e41f9081f78878d6399cea84ed,ad1812f90aa26c0ead768ab1ed32287fb9dccd67,15c95e0ac7f66c4e21033d9e01c1328e00ea2545
c22b6c10b7a29b5375e95102e43ec60fdef32b60,f6cd75add97afbc45461db9befd4d47325a8384c,aedacd916089f2392d89dcc9d5a6c0e2e95fc53a
0f89852908219e54e76a72bb21e1847305166d52,4d62764fa34b7c0fb8a4699e689e3ac8a846ba94,c6b059ede6d90f87e4507c0cc4e258ac8b4461e5
601c8f9c8b23db6102663ecee9b1a697b410bc4b,c67bcf003295d9ba9f56cf06450050e528c3f305,2eb3f5f0b84f60daf562376b0bcf0dd12776aca1
ed748a65b49f64d53e96adc2dd485e34f550af3d,9ea1f6de197d554fefa42bfb2b29b76918460408,0d256f517f57f80933f3e6305e38df55d8277d11
f410d8a77c0e23be19ee87c33fc160b738320a4d,87e49314892e33419c0104dae47ab463bc6e6b91,be0c92c65d684fe637575bc9187273c5883252ce
9d893b5d0d040194bbbb2ec220e03ec5f88f759f,2f1ccd6f2a1451c13f16851c10ea8435254130c0,f800e405958125dd1b05c79dd06617b0860e3d44
d5a538b5908065ecf83b6f5e74625a5eb85393b3,08dca09c7ee43e2b73fd98c319fdf54934a082e3,0b7a771ca945dc531060e0597c8f1e69774a6451
8382c6f5860949eebe1e6e6aefd156c8dae83fad,553cee72eb0349e50f1430f28900fa47c036759a,8acf2e3ff31df8b8396ad0f416df9e1ac221a9b5
389646adeed406d305c0dc7d13c7133ca176963a,322befbf5603040e68207d847ce87f5dab7917fe,c482bafdafe17ba5e23e292e1127e6f103444ce8
535107a700c98bb89e23332f2465f5b896fe6e1c,1930aaa340a808e6ec530093d7463b157646646c,188fc9c11281018efcdb567895f6137a5862552f
76474c85bd7b449a233d409727a53e71869f3c7b,bbedb958f61b03c8af63ca52af882115d051ec71,fce34eb4bf9a70ac0b8a9a5417f0f7b327b8bb37
edbb865260e4033930f266b2f453524a68c48ec9,5c792c438db1a5dca3ee6539ecf5b1c84e52e56f,06f35ae04f229e4cdd54de4bac67e785c043a1ae
fc76d9fac299ff9630515bb62b980d09dd432437,62cc594ca469388c8bb45cadd24e73b21437230f,7133ad7ecc46700618193adff85cef84682355b0
251af216ce7c63204152c8cacfffaeab899c8c82,34f1a3ee280a5d2e1e9aff4f2f39c1b9e97c771e,f721210638e919e910d340b4187b2154df8e835c
d97d34ee9c538f4d9d9f0cb4ac1b2fbec6c91deb,3dc64dd67ef64da854e08093e229719ab1e3d49f,c7776d899bba809811549d2dd99b37b80fa361c9
78025d90b3ee3aec45bb100d2bb01e3d931391fc,a20e8b9a3d1c2bda0b5d62d50435a8647bcd7105,c994b5efe8809ce84b3ba52046c32fc37909a65e
78c0c267a5c62e1bb773813d24d12717256d2ca5,1e62913183eaf9906c5ebaf98241a7e14e45dca8,f47ca0c5d102655f5b336f04594f2cc15b9bbe96
92f148e667620fbdc439e5baa13c36f8a66302cc,2cc319bb8e2d21c61e051f77d8d31f0704275289,79d1fcd40d6ee362a0340751051edade7b124027
0261a025de8b59a41b3c43cd07c30d81a8e59567,486f3a0c7f7884895a0e9742a1a3ede419f208a7,e14692f59483e83b1ac55e9741916c93d5699582
21b135a6ecc49cfa6ed65ab0e26bd14aa04cde38,299f942d291fbeb2c3b6e6e653ae57ede9b7e525,7f4b2f63b3e384dc3589499f21e0545205b9d3df
70850835597032f7fb37777bf6fe44eea3b0d16a,d3cc97655125c9e8bfd6577c29ad61e3f4ed87f3,125bd9d5e91d67849303f33f47daed55130208f5
a6e0e1fe59ddc7349d9aae062fa264cc215dec7c,28a3223b6b017dec23f867c8ceead32d2b22bd72,d3111517d5cfd1d044e619766e37c3312ebe12fb
fd1f7b2ef8989c9da4fc58adcf90d29b0df6d8c5,2a83972db8c644948b29e3eb745f2796dd868af8,6ffa258abbf7f27a213cf96fac2b94a27e591dfa
e4d5de8d05d4ac260ac9d9c451d176486d88dbd0,2443fd0ad738f0f3232c779e9d2c9d7ff1072ce3,ee97c0ca03cf35ddc2ebb7c7590d57cd7d407e14
b8f8a1dd1f869bd4a09e571a766ccbd2d641193d,71ec7a94d17846597b89acf6de64caa3afe90f19,699db16fe4d81890f6f9a0ebf525624f34f35245
dde19c01441be3aec285967d6a9aa279332597f1,b49d58a9fa9bab90e1b0501584b0f0d58f01b0dc,69e775630ab21b0a88a13bc5a502a4a96584ec85
681a00a76fef57322c70428202c0dd3e9b68d556,2949d0b5488f58f8fe9cae976a9c3ec00efd30d5,1a410bae128760633dd53f721c7a4865f1d80ab0
82dd70e72f3ab33b1b8737f743e1cdd009d9c8a1,9440b17eea324558acec52a25a1d9fd020ea0408,ffdb789a49f3f5874863bd35bc477a974fc2e267
ff673eadac997e39822148a313b9d343ca9c40f4,22a1acd610072a1c3b57e0a8d60affe0aa8b4aac,13346a42bccca70bd5bacfb1a16021efdaff2879
4096d9b74f2349f9b9b8e3103c02c0be11c70926,50040a2cab9975aff6974bf462a0e2635d9b84ca,1be741681648796d41bfc5f06da5ef26d4581541
24760621984e934604baaf60f7937f0222dddd14,49d66b8f2018386d7512a5abff875efe82ec1a88,35e52b90f5763f65bfb6953d4b4bd0973753ff2a
a9f3906dd552a0a2e467f3c0dc0b40f9f55b306e,dd586da7093bac753ea54a5a7a1ce72a64ca919f,91be1793779f35e0ba8a9b46b6b2e23fc7f7ff1f
fd0f72303beb9dab2c170cf89ab57e45d7a7514c,2df57e117b52f4cc72b00837141df6ad18405cbe,3b455c1cf2ed22fa5a645aebce67fd1066970e8f
cf4d02ef92340976b686df6b58ceef8965fcb77b,63f91a768c34e0a7cba88de066b9bef0629bbcb1,63642b13c8876671ba96ee0747dbd8119aa4b78d
67f89afe99faebe50c6177a2112aa5c56f676de9,d63b6294b5e8b033f98e02b0654572964c5f972f,d2edd6fd2f0bd37367b396d23c8c45f9a28c6f64
bcf77c70fdee6bb18be5dda3978659cc8cfe6618,224a7a8a5448442da597dbbad120d46e7b24fac0,fbe64536d1b6bd12b233ba65976f2faa89239782
c96641f901daa34aab14f6ccf88e860039dbbaa7,4f7c2890299bf18f9ae0c274f1eed967005f2799,803a6fea24d5dda205849a092392c555f9d39338
5e6e24ec086b5d71352012f55b713d264f60feb4,e8a03ac8bc1319da1cfac4e3b753066bc83d23dc,ba559329292b7e06efb9cc1b22d86055ddd41a87
f7e4c0f28229269a4e59aeba7fab6243b9eb0e2b,ede47ffea9fab9f2bca9c7bcdfb9a5c6c1f63b7a,dec6255a190cdfb47f7b82167ef7839e317f3bde
a37430c245d8ad18303c18db03d3d98a3061be66,fff60f9f67aafedd5369c1f8297ad56235a6ae02,6ff403139875c45e257ae3f4b291dd6f8254d1f8
0680ea46c85c1482460989a78989cda79f1dc89c,1a26c0ccfea520bed7717b1f72aa5fec6ffe464b,df2488ea6e9f0036a73b18a9375b0e3da1e8777f
16b14c574ee9d97310968fdbb6bbd484ce1dae71,da4980c4c0fcfbc1e588064fc638c63d7a201066,a5f1600275c7a82972a180d1072733d55955e1e8
595402cac7e3e60ba923834b2b5ebdb21f7e0a74,089e7ca6c8a1cfb24f80383afdd26ccea01ad2b6,84f0b94549750466a5f84fc63b9130f865e6b4ef
3a85a5a9cf7e66c8ffecb22e1abd10f3b5376693,11b743fd6ab270a5c34f65ad1a133892d53ed3fa,8e66041b7902f31a3d741ebeaf8b321c2990d171
a3f221e189506777dd25308f67ed457ad121352e,6f5c6ac4107526e2d0856c715208ce4fac011fc5,94cb1c3a49c870888ebcec5c84bba9e42140d4d8
922893ddbb7276d85159ea0ef63f7ebe8f11c2df,c97fa0a05da6fe5fa6e630b4054509974a624bd0,3f4c41b45ffacda2defa96b3fe6df84f3c62e448
e318348372f0017a23830a65f217fe50ec5c5316,267b99a8aadd1517b6afcdc81d4cde4f568e5903,6aa1f3686e3e557bb1d58b1195ef2080416272f9
3892bb265e492f693c20aff1c369c5f186cf0c8a,c48a8ad31fa9b549be358497a7641481c1d98581,3c19adda78114804ebcc8d923b155b43f229b99f
e0c41ebc5a882278c58d56311e9180bc6720c301,ea18d11d410b6b6cb8f98f54cfb9fc1479c474b2,bc7b113e09d921871c1ecb3c5ad108ae7e8ab010
c2173185e7996689cab3b5b41caaf89760b78d73,d911e462b2a85b7160400ce36755003400584282,c4061e49e61398ea21466f63d6b1430efa3b7627
edabca144788a9651c22e624301346aa95b1d9dc,db23f54f8ce5bf8f519d0a7673476210fd747054,0e39e7c12de0812c6daa343796c4d2fd148b1b32
e81cff0408c5008784229ffd1bc1cac39be8854a,5b64e5b9579cadd9baac768a773823d71914f3b2,8b00598cab3618b66c8b68663750d1fffa4ee85b
59128241adc5ca60b513cb47f0316df6d1adbf76,0f07c966b62445ab8bdef939ce15f460c9beae80,9584348c407935d8e306cc9750195c10a4aa4518
ce742b5b4d7f9f750a40581d0219fe2f6d704f78,d50ef3381fa11144a75b300c21c2605ada94b6d3,fc9719f5f989b7785e7d8ea06f82042e49f6229a
bb2e626fc39410627cada94e17d469e8102fe136,23e514621d6e5b0963912debe801603b75f62089,f88ee7b2d8053a1599facaeb0c065c216e58ef43
287ef8e79aac426249c59181a07f217ebe95986b,879f48d2151cc48a54cc11242d0aa07150bf5e8d,38d2f3d58cdfe477b60f3abf4dfe61ab76ec6cc1
f9ecc12e5bac5414286325ae2f940de555304fc8,6f942996a5870c36a5178a27c21cf248c2d3e894,5e9cf637d36db400f9fc7926af8b51b5ab9b8215
b1cec6de2aa6845ad4b891617fab6b134f8ac046,84186db35f1879b102759102797abbc4f9b90e75,b3e64d70e7b712b675d69a3cd57ad089af5c5ccf
da37fabc42ce12bf7bbb5f9ea75a5eec7a8b7b79,545978b290f97ceb0de431e1d7bbc5f11c7cd19a,9f19f582c414a2543d1db7621d1e1fd3db60ec47
84e2613ca87a621d53dca817806f6c66332ecbc2,cf21365a21993c145e9fb7b99f83dfe54b9faa1d,064172d65a4bc04e8205a0c5b560516e70180b83
bf29f2051c6408567e61d428e10b348bd9870861,5486182f568f0151894a6223e8a4255a522b2376,31dff18a61e5ba7bbf0be67c466f0b481c262836
3defa344709ecac3fca36af91829cf48c30f6d22,b521ac967f6ce6e802521d9ec385d34536abc9ac,1fafcbc12557e8cbebf0d50168f1a6c174c511ad
44cda176749d2e50e9b7de9184d475b81f224fa8,acf5675a909452433618b11daa267433a1beac01,b18c10d0d8930b3e49e2e9f4eca8f9b4b09677e9
af1eb33a7502c017a4fa2c7c739b6a3cff6e962e,f4da88726c208fb12331e2bb4ebd8998977fd79b,9f3a50315b1c2fc5c3ab09eaa8b2f5b1c40f7fcc
da47c509dfdaa4bdb4d92a4935c4071191341338,b054febbc8e2a927629eb888105e2a6e0a4a84d9,90e0b426ef479cdd8879cc95b7dadb8d4790d45a
04b28ed5879408ddf5a07015057768b76b2af9f6,a02848632571f0d3cfc676bb8bb38161d4ce1e0e,b5fa73b82c05ae51ff1c0b51f50de32c7a4491f4
7080bcc16000b5f14ea81b0fad40a8ab0b5f9677,526de20d9a1850e6913ae15e599ce8af03fd6666,49ce3f5d2a0e65fd340897a684d73ae370e6e624
beca14334c4a38174c0dd6d628d81e4367ac4969,589fb20386b63be2f90b0fed86868be88d2b878c,0b6faeba68f1cc4083cc753173e8167d4c64e3e0
0ca260e08ced39b0ec1f111b159ada45060dce44,afe2e80673d93a936d245e9adbd6b7ef2f71476e,5fab6cc5e00e52e60bf6155968e9c950d5a4079b
63a8fe07ee7226016f9e2edcd829c03236829584,ade7af52347f580b26312bad7b6a1f1f01f9df22,d53af12a6dab99b71d8598aa82608e24c488b15e
81157e9846ffbca01d1c3e9f49a218d15f51ab96,bc1c93c05fa4d1d595b33a5cae9ed112cae503de,68668c649e5aed88bac022a11a4e78bb3adb3a41
032cbc54a77be957e307acfdf0fcc2636664d173,3f1d62af8e91db86d04cf42c094e17e64eabd258,63879e74cda7c7d2ea7be1680e6308aa7862c87c
1f178d381fe9f66905cdb409c1986dacac061831,c9b88a1cd0f02bddbc5a74c662a2c6ee299bb4a5,6e9521d99a8f1c6002f4b5f0dd55211f2229662d
6e5860cb8753189d62529ab327e07f6b83d0e629,ef1cb852a8fe0d0fab065f2b24eecab37b7bf48c,bc727f9fb220c61518b916307d182a02e5586265
b9668a88c69abcd7061bfb5a4baf74d83db13be9,d98d0c5e62b6fc704ff39364bdc20f66e0dd64d9,6652fa79199d9f0d0c1d433b1c7481571bae9f5c
ddac127347b4dca6ef0c0156bd60f27904431488,5a61f51b3c9cfa8bd2122da0e8747bff97e279f2,4a1db1dc797edb2d8f5aa89ec3b8fe9e8b2137c3
3c34c8b86b456574518ce6565d5ea23d65c63402,e5de38c42d7e767a8625b4042c57ad64bdc941e1,2ed2ca5cf0611267f1f0d58f164625cdfbb6f858
98ef2773e01cb66bfa25c72f6cd84034f6eec22a,ba773e3385d908ad2ecab8c6e50371b19a3c1adb,d72eaaf734e8cc074acbb9ae43bcf25154476ea5
679f2f75b3bf361288e87d1130a777207e7c757d,a398da4c72b5a65018ff8f4c1b70ed574a46a95d,439faf0da88cb10015eede0b7b8c6119ad740358
429d2cdf12f628ba3c6ace311d5a590facc4dbcc,29916bc6f64e0a7d0c745df657ad3eb7baaaea01,248082347fc619a7c4381218e01b96ef32545594
6b2e4fa4133a496c1c3f89e3c71fffbdd7c192fb,271f69db12263731e2efb601e27862b7d97a0b8e,2db4cae7aa05c1dbd754744c608ff9c11818fe92
72081c803ee5ea2007ee77a1bdae0f2a02e94c8f,6fd5b86cff2c5e04292da1e4239b93f34c839cf6,dbcab9cc2919b923595e087a9c4aac133390443c
2c89ddf62b1156ac23c85bf5d34c8cbc98d9875b,af40ae2c9192d5c3ad8370d8ca7799e6015d6a23,3a2342fec4e810872748e3ac2613e552dd2f2fc7
f39cfc75fcb7da60b832e745ba7d442e039aae19,ccf631eabd3f52111825846b4911ee6dc918726a,692754b4228c0c97b08b2857362e7321eac7d936
f249987133a617dd1d86cced6e16be1dd36f7205,9eda172a485371faa535561c5428b5d5d256b96d,f2c5bb2bfdd30aaf65514c79899dc4d5dc1eee3c
5649ce150b66e35934033879931cbed15f911aa1,f1e32bb187b6ffaffed39eb94e75d0b26be2c989,34ae77bd3b0c157043dd666e65667cb2c7116039
e1e9a6728f7601f9994be89374720edcf408826c,82f025e9e7505259228cd1b1a1b18e81c9806a82,1f91fe4b11d06cba30801be7852cf0b0be7a3b21
b81b818a7569b762f653584deba78bb0fca2a81d,a4c94c8b449d5090d2e781f0382a6ba3cdd29c42,24fcd05e8cbc84c6cc8281c4914bd560a36fcbdc
aa3f29eec8ef6cf9280699e260ee4f700e13588a,49cb7b256476409924c581145a760b863b9e755d,5c090fce2ce9a099ad52ea4aadf7abbefdeb67f3
3539b4a6f342a641418d0761942352c158128aae,53e7006d56d7e111ba6629d0296806cd02e91f5f,790a58be52aa745633f5c23464a774d774200fa6
78793878611786c74714f3ec66551cb9050b4077,0f8ecb73e73c3a5ed9ba6ce7fce91e7d40c611a5,6bead20fc34cbb19d66c74047a3c23dd9d6d378f
340499dd3a7b22bebf01644f857254d1dff2f814,54eb8de6581fa93531ac048f356261ef565d7a53,34445a912abc41bb8c95281e51388fd9ecb0f241
90e7b2be56ec428191cf6a68581840468b74a054,2626b85984b08a8e1a3d9da1ea07d72da43049d2,a08c937bebbe84aa66173b7484caf0246817ef34
01dbc63735030485dccf5960470de6aa12e6d28a,3bc6340424b6c43a67a1879a4648f1542ecf1d29,e6a3aa345000b3738ee681bbb516d6d1c0ac7e33
57aead9a1487bf0d0f60110780e5b73408bd23d8,e81b062e2d295ad64a692dde3cf6649282049d3e,be56b641d708f31fb418f5d2f6133e3d97613f88
c7880e7bd12117dda3958a7792e31e6145ae69ef,f87a66f1e69891839a5e039a0b36084d21423761,bcb7c069fbf2f13ab209b17384b854b3d9f6e2c2
621699acca8f4f7683795ff8757c247fac6bc57a,c9b407508aee0ac699f5cb6b4a73638776572eb2,36fe4cf43d2945a7123f77bb602af6c4d94dbe97
01d97bea00960c131451ec6f58ee7593a36ab0e6,16c18e845f04fca60341937bcb9117a40784053e,8591f1218c9990918424536446c8751a0edbadae
b2861bacddec80d8fb1a7f84eb30848a4668574f,7d41f5eb92f5d837bd51a6434367122d7e329f67,2ae98a7363e1bef7c369eac8846d622a703b9d26
5a5abe2419afd2f124f821f76c9229f9a7de1a9f,8802c7d489d067ec1ba67b497fa29571701263d9,9063c3c0ed0bd09880b9e6689934b5bf070c85c7
e7f6da4cb09fcfa957cad8bf160a8a22d05ddac5,8a7743b566bffc2bc27033cb208fee09a9a7223b,3121ee136700feef1f966195c5913f4ed8ba4e0e
e3c5d016e0c1f139711edbec8123d9e6b830a5e3,6f7c1b5b4e67c8ab7e59321c457ac6d2fdc55069,10b201c50699cba4a8a2a553f77bf5531dd6516c
e4600f5e3843028ea8c08772860d931a7f57dcd0,818b6e698305326f1d4e5d3b2538a1504d05a7bb,bbb564437d88a8843f1769ce773c79c6ae0ed3c3
e754937ad3a5b4dc97336d476db90141c64c71cb,2ab16a5a8f0374692494351da9bb6b3d54d995fe,50f76a2ffb54c6825f5c1e81816e4e0ae4e77363
56fe6cadc8a6ff57658a3c6cb3dae4b6c83c54c5,23fa8c80b6a1c0892be85eac8e0e73b758621855,8606f13b243891ad0a468fc4d70b6d655f491120
fc7ed302e7c804143223502510288ffe4697d03e,b641687da22a1d868cf4ed0ac05f4c1514e2c9af,272db1b872f59e6a8b5a1f0a2106a77e01dbb318
c6e054dbb94b811cb91bea2f6c75d5ba672bf74c,121e793c37ad31d488da53a7c1ae67e81414362a,e569863a1a8efcd537e440e92ef16da80cebbe22
ee4d77b119cefa866eba5786f34fda261f37bac7,ced7e40c43b3b40ce4bfe37e28b4a8c78d82c041,a0df7c27afd1247988ec3aa3755d0e47b62e03d8
efc4ab792820526df0f7c448323ed09622f5394c,a6d4374f1078ec113f57fa4bbf74f47418bb0c4d,c293d0b7299101e93228925ad239f2472c316c02
4ba064d8942f2fbba8b447951c1ba0bf163572ec,6597f02ebce8d1db39cf44bd6a1a6763532561f9,d25d094d579adceea87cbe96bf0fd64a111eded6
83f383e0041161d8193e392b2c200cfb0d120eb2,3d5a100f7969531e54198bb3721de2f00738d3a8,87a3bfe99d2504740152fd6cd662c35239429c58
4b179ce4fa92d06dc0a4bc44efa58e3665834e3d,4b9e1ab30a5921fa7daa7dc991e044f59cf48313,24972d986167814ccd7d02a4b7da3798463296e5
eeae32669e88af0ae699b0a9bf41551cd9f7759f,605740fd0ad213bc577e3439a6e65c0d478e14d3,791328ccb551ce8c79956271d535eaf6beb9c569
026781b9a36d1afbdf06c0213bf87d8d8e03dbd6,7f30a8765152d85371074c1648cf22a844d612f9,881ca2c52f58c11d44de6ef4f8feb8bee18cb258
a1bdf11d993f03f0d2c4d0f3955b5d9435ee1e38,649438efa63c3534d61cfdcb8481ba41729c85ad,82c52ed12780f83701c05e26d8144a357e3c6131
268a148d3a6e3722781532ba093e539f72453261,bc798695fe74403d2d3e1f5b38ebad4e46c24211,aa296af787968ba25e586b6af2f22f63a842768b
c605da6ab31e678a9f8e23da7b89b4420ade58d8,118e093c974d3b3407976d602a93192f668e815c,3e14d47b92df79b31acba350d748a465b2cd9989
bd606c6b77d18fed794725aa5f8365dede23e882,35f2fb1e8d77df3b8e894b6ab5481aae51106c92,ae93f8de918b71ad9ceda00f1e05b7554aed4cb7
73895d3cbca2ccc3a93516495837a002e6bb7f41,d6c3c74b468f443deb81d9782c781eeb00a1c63a,b5b7cd54eb4acf37cd3d4108df73f8a54986e96e
ab5c5a7e9a20520ae472b30df8b321571317d705,787454d5b2e8c6f8e7c909fcd1a423ed33404977,ca0323d4ca7519d49c9b8c5fcc39feb6b6bdacac
1606d4e28d1809086629c44f4a6cc190417ed9f3,b00454bb0ec8aaf70496b3f441de0547f7f71cf0,1853d1ddd8916104f4087533ba3a861f55fac9fc
ad61db2ff592ee455738b159dc415970e76adca1,569b35dfc4add6006eeb47c7b03815eac6797ad9,7266981c6c55c521ac70f06dc2c287fbba16725c
eb046b07d07fec12b144ebe3fa00b586c6c169b6,7887f4670039897c66ca0f3d904714121e25b98c,0be3fe9ab4b9ccc01ed2bb88b679123bdff2f340
e695edff98f7092adc79ff2a21795941b1593b52,f30a41359d8be3766d6617dcd9363f04da73fd23,f83223c8b2b44437e4b0f1ed5b5eb89268219420
b88b8efbcec52425337044a8ea652d1d738cb6de,541bd66a6ce4d57737709ce9076adb389d172a8e,880eb3658ae80f73662773ca45ad51806a6b9832
4f4beb6225f8c4e907ad0068dc7e35dc1306406b,52f0ec579ed810035db0886b266fecb1934038d2,da8ccd64efd0c6763e414939bb2420c2fe66c660
16c4e0300cf3dd04411b72bb0547e8f80ad72575,b2f31c4112e69e75e29c29f4472a2730547c6004,c342a5f47373ab522ed67ba1f4e95f9a208dc83f
7d6158d5f49b19dc80558318e974d70a6c7b9d32,5583781f4720cd90c579993352fd528649498163,a387accf810bc6c32d07cfe2e9fd7a131cf8e5d0
3c4a1087f33a319b48b99ab6256c48e33f7eda25,2c72b62a0e153f1888e19c988631d0275b0f34f7,d9a67bb16d321cb6ccdae1d1f3132afa8c0d3bbc
ac0c187b56accbcc5f8a72ed9bcabf1fe340f100,946fc370e93ae5e7245ddad0171d006248bc9366,f5dbd38b7eea68cdcc714330eba4e7fb28c95f5b
88a42c3ee0c2c0c53acdb99e2972ab24ecc9faac,507e9eb20aa8129472e348398258bded6c5eb4ba,f4f6a16796a4b3fbbecfcbe9f77d62f6ecc9e54a
1c1dbaf77645efb1c0e6599d0cc3b6d354646f5f,409de5ac96692fea0314aefe5a9c880ab8983599,7747e1f6c8b51cb9c7d04e3a581663d25e1e99bf
e1d56a99445063bfeb640a3c6e0c41688076b65e,c453bac7adfca20397628a8e981c9e92281bfa04,cf79ca16b49445df2332539777dd879f6aad5b36
50986967f52041db50ec176d31342fcb3df7b305,5845bb90951932e8a6863acc0bdda42d3342e434,0b3238bcd37b605701e958099ddf6cd7e4772cbd
69ce966691078a4b344d6691798916b52476ec46,dc4689ba1bf6dbdd5d6cbdb2e5bccaa849b3346e,b361b41a86c1385540e4f85d43263ec4d0716ce9
1e89579766d31975cd605c3f551e58ae6f512c23,12d7d271d6648061fd0c5ced3769578047b0f024,1b2d29ea1a6c28a8828c2dd4acf81054f177db42
7a228bccfc85f23b97ef2d38620463364e24993c,5771245d74a7115ec8a8744c6c91506d40904285,b440f57739efb5d68f18adaf6d71bf0aa126a8b7
4208fc79c702c8c571a8824a7d606774cadf98b8,e6a68b28b6de64dbbf0cf9eb8f859891308f9fb3,880d0333b0b5804ed0e58b71c29447402ae3bad4
408e388af3e48f51925fa2502a3b21a23478418e,9ee13f2937e57b63c014a3764d96606e8218eb1e,167c7bc5656cb7012290bb4d2e683e9f554dab27
2eae62a6e89673af2a083e3f7500c91393ee3f1b,a4121d2201bd3bee71d7425f75f8ae29dc3cf92e,ef796906e9faba606b8a6280c1dc97a88846c71d
cd93050d7e071642ccfce2410d5b8a12161937d4,bbeb98aeefa8d22dad0bcd1ee62c09b91ff205a4,27be091c443b47d9d8a57f21c508fbd678d887f4
f48282d7b34e2d9d276c9e6c2e5ad81dd7a88509,d03963afe9ecd26a7b1cd149ad0ce9a07490aab9,c4a77a832ffda91ba094b260656a19a826df9806
ec206cf4905cdee0764333d3c5ba7fa3adacf095,eaf9a9f1b986c1d2ccbb84972f1ffb3303bfff84,baa81d5275a9cf1137339738fdfe8becf2af779a
5eb5fdabadb5d025613443b09f4b5cafab1cdf9d,c49ac16a195a306d0a60c289658150c4ac24561b,dd1565c667e5bbb60975ea887c7380297286a151
93d38629aa446397d36112cfe853cf00d013e854,952f4bae17dc5a12142ddb7ba7009aee1d7bc604,d83004dee1cc329b640e68e075240354eaef97ad
5fe4ab49bc3c0d58d48ca793677a2ce72c8f85f4,3c08ad4af5be43950c86eeefca448cea9f1c0dae,9a983632f93361100fdb50361f86337760cfacfe
ff4744e0ed1c64879a672e58849875b6189f895a,3724e00169d4780e538a585eb91712512819c35e,995309c20901f2c0e92ebb1ac967c73b00902445
cd9ed54d35fc4573b4adafde00979b15473749e5,81471859075f0835a88bf09bc3d49df5b6fe6c7e,0104edce45a3671d32109db527a2064514336485
f86a9bd5c026c7a10a165a8225bcf83e17c47b25,40cbda6e7e30dc29ddd7bbeeb9f50325c42a8cdb,9a1083c98eef9645ea5c5313496deb321c73ca1f
bb2e2f83e9087ecbd5f5f652c877e694e00660ae,543b341203f415a4886c1452015ca4c70d4556da,ada576e559748a528e2f663345cb20f2c517fbd5
6ab2cd3ce994399872036947cc4c0543818874c8,dfdc4a4d78d0584a1a9d2a69681a52581be4eea5,39c3d5d035a49280859339b4814a27cfc50ec97f
4933d739388bd958c3e3ad2bc6d11f44b7bb0738,a2a85dc7af9390d1fddd43880a544492f9849cdb,d87a6c89d46d8eabad17c67f4d0f8c987f78e3a0
00d8d53c4e4804eb3722f114eda489e94b4e0495,baf9681684c1aabddc3b06c7d994e3f9a9b2acb1,3071ae231ae0bfcd22494ff07164e2f8b821e6ad
f3401c3f5393ec512d2ec14b8f70e453bd7c9b3b,b35c1182441e95912f2930684a419421c8da9e65,dc16426790e06df8a08c9af64d6bfe6df5d51c63
30c8930c30c68ccad17d87f364718b0f94ea843d,1061965ea597e8ae4c7fb6ce04f88887a62d247e,baee5b9fd4b1217b7facb2f7814eb5df55671ecc
e3b6d70f93e2f7831897296d218f32247f13adc7,b679f8bc06f52a3e00d282582703beaf0acb0b98,3fddae4a40d3ed8e2cba9e5256715b14d9a97040
4b2a924ea038f4304e05a4ecd3ed2dff703e44dd,aac37e31795e3dffabe1cb3745e99d6b75d79f8f,49395f2b00b01e65331ba4ce11749df8291cb26f
749688b3b0938d0c59b31d58adf5e64ec276c179,b8db469c48dbce4cd9128ab2843435839145d623,6a9376cb9e3802c9e7efb8f09bcde88829e3942e
7f3ed9e85c45f126b1aea6e69481ce973e8bdf7e,c527437594d7cba7bf028ae69ba0e2058ffeff8f,55002d19056049236f7c61d984657b54b778325c
2de0bcb8d0fc180b1e1b85769ef55b58b5f50b06,79d739baa60261b18826b202799b82d71fa1f294,02b7cc0e56f8a597df74b821f5413d00a3dd7f3e
09accffd2878899c633c8a65155789a84c68b703,962b36a6e843c3d2d7d0e42cd7d9b03cf8db8b44,3121f3f8a08ff1fbca9d2d3c7416faf3d7cc1523
07677f421412915db1e5453d8b483d2fc8306e42,1d48cd7eba33c5059cf840c42073c3a0b624ead9,59c88f4c7927cfbe4b9e4515bc6a2ddf08dfabaf
6b47a03cc97643fdbdf30dad9fb20e7e21ea6d91,033a2ae2e77427bfeb6d20b76c2e762490b446c3,4084da63abcbfcab5ffe1fa83bb2b50f445ad6ef
cd72a8910e3d0430bcca3d02b783b366cd0a78e0,93365f7e38e8c2fb63dda8e50a570b654560191a,9681378d37b4c5653f586785dce888ea03f74ab2
e3f4bad1646c9b16fdd672707c0145fdaa356d38,60e77de115c2ad9fd823ba9684f1b991f8ac3b39,7163a893e9ea8e98731da28347a61854965deb74
dbf6527508b6de8799239fa025fe74221b91d829,f7bfa0e426c6dd8d5ea9adb7fd042d5e33634b16,170c05592b56e987c2d72c660f066c349ccc85e8
82ac4299540a0cec37c545787ebf0dc4c1fe303b,fbcd90f2860903ed0bd7fcac0fe51f7202156a14,3c57eb42f91348c5f066f70d7f7700b843dfbeda
db137d0528f1228abdf90068aac290359cb4009c,020ca55e257c3b3f354211dbeb9f992730578d99,88ffc9e22822e13511a7de1eff2d6723505f51fa
19fe377455f4ef904b4f71034fc714f51bab1b1c,a8b4c0772c18bc98b934815aedb0256fad88f1d3,637c34571e50d78cc1c9368f0ee44128f06a2bc3
74625648cfd30f1244ca56410a0d5a5a87982c83,4c330f2799c68105aeacaeb442365ad6f8da8da6,1fecb46c52c98e1d55ec875987770738237ee1ae
a9316b1953b31f452d32f6d6fb4a52ea81a05104,01246e4d30d7933b6e08b1ce2bcad9121352304c,5f42443db3ff3a04b64361597c650fee9849cba6
1ffef6ed41fb47c1e7dac5a0fc2120c3ce96e303,f65e4f23853f38d6e39221e9d70abb9867c07052,4867d48e99731b11af3d405c621d1f2e945ba95e
03fc5d23235c1b6b7184b9278aae7ebc4546c2c1,04a077707c334705b9ca639642a2db03b6b154a8,42f447257dee02eae4fa1aa194f0bfd387004858
9648463eb544afcb9f6d65c17682ee05a4cc6c1f,7595dd3624f048163ca3b575333d0e0b86d14c92,79f6ee538dc8d81f876c7f32baaf594f5fc9d1cb
7bbd33bcd6fd57b01619449c2f5c9fdf217c2e02,3db060e47afd90db26f7b5cd8ae1584438169a23,fadf43a33b4bf3c5cd4d73f086d8de0c9c02aa6c
6aa49038a5b9a2316e609b3bccee9bc6acca4e2b,47c21fd1bc4700da1e233cc1c8ede88773105057,feb79e0068b27c9c22358fcf6ce84282e9390b3b
981ec64666491aacab8ec00d0f631ac371f31812,c4fc5fc916c4eca14831a70d75dda09df96778e8,5605566e427158a4300941f4279b41000985fcdd
8ae28b48463fab579e6194b76c238c5d7779e0ba,71ba76532b7bfd39f9f861cbb8f87ff949796ee8,5eda6e027d305b1708b7f938745ee454a1e58342
11b0b9dc57556caca09bf46bba722979ded5fcc5,ca6fe96360edd68e1a9822a614c507fbf9681aee,5c564ea940001ecad02db8b2dd9320ffa42a93b4
1d1e070ad2fbf3c5b2cfbd41b307d59fc67e40c1,f3e03f048376a63ec50862c54579104b7685480e,b514e979bdf7fd53556ba1d58dd5915bb1308f53
e3b93b07c6a6968cbc0b7c8b1d22353faff60614,2e441609bebd024a9cb9d0eb2c3d6885f4f0b092,05d6e20accbf8ea92b1d17949a5d41d583887c6d
3e06242fd8302a9098a30cfe457357ee3a1927c0,b32573d1ebb4c7a33708efe3a6e275bf2fdbd4a1,2044868c10fa1a330c98b21af704abf5a6631816
d06dd2b0ea1487fd0cc91c5d489c843a2152a375,bac4ca19e7298e0395e7d3d7e7fc370fce1fe769,698d432ccea80b6740fc9b7980c19d973b03ab0a
de03a1b894799e2f9133cbbad05c3f6f46af1423,2055ef4e886888a361bc6fbdd90980a174d29d84,62495c964abcfcc8f12038bd90db3f66a60c15c0
529b64790bb5637ccedb0d10926f9827c905c007,277a3be9b06258b5b439b4ad363d98786985e8d1,97f159e4b2c861df559966142a50682130e8a1f2
560d597c85da4521779cb2dde6d5ea344aaab412,122251f71d6bc2395be342a4f5b1df4353852991,b45aee980f15f4df903989529bd8c178ca1647ed
83b5047931866e5ea58811596b64a633dbed9480,5b27fa93753a42dccf78082c99c580952f87d728,8fa3c57c1bb005d27664e66544a4005758f43dfe
ff3b4adc2773934710b014df680d96897948118d,506634f261efed31de36b3766393d1386fe2bdd4,3f0853692c9397088fee4217a5d8466e3e24f6b4
178687531909624efa0328c8a2cd7ec87f5499e6,d575aa5240840b008186da794007e06097cd3850,2d5c1d43cff48050beccc906049cfb7ebac83c6c
4d5479741d6a7165b1592abe890330207dc4795a,064adbf3f8aa7e1f7f1f85b31d2eeb8988a481ac,18c6e13f45298162520fe8d20f3397b1037c35dc
4cc5cf4d0edcd8b18562af0d41b89b027b1bee74,4cb97dcdb34f5912ff29019b5c9b5ffc20b90db6,f3e667da42bc0994dc51aa92de55a70ca819ef09
24315a7f28237e3dacaa2e5352220fc15f260764,5e0dcfb49b7a970ce61b26ec468b662904218236,4443e83b75b36946e8a35fd0dfebbb93c396c1fb
93ae6261ccaef7c84096785c28d5f2569c1ec60e,3ce07ef6fa90d13b7e6c965bfc489226575b548d,a81715d6ea0651bad3436d09effcd4471e8f2abb
d9317e5df522c6ff359c8650e7a2d542d306dd96,7cd044eae742f33e905dc01ced9a8cb1e31f0adb,ae465fa8dc85ea69180527c3fc1e03b25ecab082
e53620ebdb89140ee851e89d2f3fbdf9ca49a162,6f7481fd24bce9fb1d2481b5f7be3cbe11e0ce5e,1351746a46807cecd8064e873c41c615f9af6ec9
8aa9ac99a6a2796e77a5157aa45b327699eecd83,a5caf91f74d7eb8e4863d155887ae09f60e13c34,881eb0fab5bea2ca1cc283d2aa76d75a1904458e
5298e25c8420f43587d174c6d549f688f514a04a,f8dbb09a46c4b48d6ed0db3656aa6474a1ef2ada,27a2a042799566a069ae6d4772ff77405491e794
2c527cfc01eb10f254fab67623eda3d8180b8fd4,d44cae14f597ddd55b803ca1f8591e816a655de8,4f82fade82a92bb32768602a1098388bebb3b2dc
ac6dc582bed106bcdc44b5ebc16adfd17a6c67ba,f80f1112d4faa565ac5a1266875bb9f22056f980,d7581aa1eefbbe22851baf8e9f8db92e4f99d085
28c4c58b345a72e85026f83d1e49b86a9ab18183,e4bd58d66abe436e1d660baeafcdea25c42c2c54,b4eabbe5ceef3ec4542f3654d7a8ee601200dc5a
d7a486f225448fbaec7e31208a5ce66de71d8a62,462c201ce6a4229e562a351da130491d53eddfc9,c98e160c197b9cc53c41ab131ee8bf5a80164e5b
546de9f7e74d80800d8c0641ab5865965c9bf87a,0bf0f26dd57a32756012e677279f53c7ce81a850,2ba04dbd137012def9d723e90cec51dae6788bee
e073d5f7f79db76d758b96927c9287868a14227d,26855a29c8d0a726653f455704fd2917e89876e2,ddc2259e5eb53d48375865a4ff2a442472a2c042
ed8a05d6979982855e04383141350e0e2068d711,43721f21c4f5da7f8b16745cc9ffbc49df070838,bc0d2293a1a89f2a352fafdb0924a30ede104322
8a48d1bbbcc9a5084d93333460fcddcb7871f69e,2575cbc439e7e7a047ef0eec5c5843988b3cdd0d,629c87efc8c8ca951d624c5ae392348a2a93e6a1
53bf5dc6efa13c3b73e6645f4da47544898f1b0c,060a7185ab508b377b3d989768531e47e5187a71,eae74aaee07f8dc1ce1e2317bcfad967701ab218
63e8633262df27bbf20f1c164f2a5a8f5a9e9360,3ed5a4a022db3e68b6c84c0f749dfd9971c70f79,a71cc7158570729c256fc7573b7d556ceada1843
c96ef4902bf78e208033b9226f2475bc97caef82,fe62b3ace8c237d8bd1800beb5969e5cb540723f,57f6ed804ea377783098a2ba25646fcc81c370db
ac3425a14d1cf2fd82482cf0d1118b6d4ce39bef,1ee9a39fe2dbd16979b0ae54c6f5ae79f56af8b5,421d67556aae3632415b8d1d585a63be325ae0bb
d9903e6e16852a5f4a21e4cd73fe1db2f71c65c1,e406cbd9c8143219c368fe15a1b80b1338f16c5f,a736a4bba7c7151ad58edb776c51eca69e787cdd
ae927b06896c08a1df957e44e18e4a1da2bfc01b,7a29d8f54d45907913381878f0ee1d06bb1000bb,1e0f6f9f6465cf23899c470dd6d27aac003cdf55
81464433366a9557971399113c5a772f6639f650,852aee489c39868fad7af9061eef8c2bdfe72c07,11200cfaf63413b745a7186718c42e90d9fc98df
1dbde8a79d846dad16169366a06a12dad949917c,ea102d792f2d757d78cb32c884fada058050b317,462d0eb07c1be2cad06675bad91e4acfece448e2
ccb1985953b0dc1af1ce31a48a12245e2f99fcf4,af482fde235da37ceec7c58bba42fdfa8c3d4be6,79ed0db6247eed326ea5193a073de03bc826f0c6
906571fa253d0571d779475a69ec3709d9e42f76,a512273976991cad7ad139a3c3ae49097704eb75,728fb7c58c0851de7ce64e7208d16081cb96ef45
a75e453c3081f6ba4318bca58806a1be48c924d7,bf57750436afbfbfb6d0ce08245b5bea0242af21,42c9eb4096ebaa8bd165e8cbdf55277939f418b8
6ac14de9864d08c047b77aadde576778d3803349,64e7dcbc8129b40cc0e1b18122248e7eac4ffe8f,bccc0b195e3727c26db7b18e340896cea6ba82d9
5c890b59e3d68fa8aaa90f826e3cc2fd105d5c94,4e8b1cb97ace5bdfce5bc6db5d7b340456d0494d,91946b78d52af2f88709756ddd130f3b9a2ae851
9cc30829faae560f603a19065591176650a0babe,b8bf295cd18560aade6743aec14d308b1f09b096,3cf7890352fe2febc337c886d51ceb8129f3a92b
a2939e4187f2bb18e00270d44d2977dfc86650b9,3447512e2941ed5504b3308e407a30011262bc90,37c3e86c7fb4ae0c78f63a70310b06b7ce0e39c3
e7f9626592d82d098c554806cdc5466535cb4d8d,7c5847bc70613f8a06bb4249e020bd259fef8c13,37ed03667fab8f0a6c2c4fd97b8bb879b6d787cf
2dcb15f88f6a7dbda19922411b12800bb7d27464,587af1c78eaac3dd94bea5850f1a6397728f9057,21cc89f1e337f55ddb48cae69c819de70f526e85
81d98f5ae246a64c8ca7ee47aeba1552f13c97d3,26a2ae92adc88bef97bfb9c05adf8ae53f470bbf,b367d7c905b476245094bb06bac226b4024e0bbf
f4b9d51aff032689bd9525366201b188b235f0b9,ab65c9889b567e6083596f60fedf5c4246d9e308,91284ba543ef8cb265d1a80cb005f7afa63e0498
472f9be9a6ad0046b97b8d1b1ec9a59c5cf4f926,13f58fe3432a0605a046d37b1b1a32d4dcd79737,0ae014a98f254bbbdc2387d45ea061c553cd74e3
fb821b8c9b45626ac54b26b7a87a5bf176bc6b73,cad21584e5f2383d2f66318d9ef0bd3dfc783ac9,f2d739b93af80dcba155ca836196e626369fb0be
318e31487a1e0dbbe49120373fb643815e3d668f,ce702df5264de939853ee92ac13f605be4fb5c71,010127a622d3b3608c16cfeaed46a38d70f5826c
1966ce7c1c94595bf4c7e9c8db6c3c34098a8f17,9da276b352d8d942d6967b8c4867d149b9ac944d,6a28ac53da5123900e10c8c157f8daad01479f53
f9b98092c4c709e605d4d5100cc1a14fff785253,f77b9fa4efffc8983eb392f7ced90b47451cd30b,4769ed948ac11a609bda4c3d489f3b15c1adbace
2c9870f85ab1d9f90f06563d94bf15e32f7b7b55,1bba83cebbc3a6584a2727cc0d4320bd8ea774af,5ea60b97b1551ff26cf0876caff335c988c3fbce
b804fc5164ecb8c5640da684456c248905dca9b5,c21a0f065463d346c9f8e1e982d280da644d6425,0e5da37533baf174b7451e64a1f6ef7b3e982761
ecc16278f087d7266fa3eed85ae6ad24d727f7e6,179fc5848b01d230a25349d614bfc5487f740284,4736cc2360d401731a9fa615b3020a60e2f35c77
dba69917a9664913f85bf54386c1a59aa32c09cb,1ab46c909af6280b56ef3888a4b3e39754b756c7,05f0ceeb26fd3a32c375af1f536525859ef53d5d
4103b3d180a332f4e7905aa72b48fb23103e3ae4,64141c8bddfbb818fe0083220649ff794a9a4639,2b7df4237b210644c13fdd56932dfdee62474cab
bcf320a76ea108831342ce607126ce8c57bebf9d,1dbcba47967b4e3b23476c9289018707f12a1325,325d29307f1ad7b476de9f1578bd73f471abd427
a15dfba97115ccde1cda3ad516a2bb64cbee3fa4,bf2a3566fa7e4c9ff400c9ded3cd83a61e4b6e3a,a907eb49c9c2961818bf610105c87c45cdec67cc
1f2203c304dce7d446d067a138a59f50dd0e3d97,59c77a48b5d4533ab71b5baddfa203186f39b0c2,0fb4fca957e02129140e8303f85a75f8f2b87572
9db42f5e67f25cab39013bd51b0967df70fa108f,cc552c081501670addab1f8c70fdad49a42b0571,821f3e326fb00a4c75ff000852a5152b7dab918d
76687a04e526f0e93ecd3acb819225080254f54d,2e6c3b060d2bc9d5eb14741b0f1f486a323cbff3,f41025f5dd7d1b7fb4367f0aceac021a7a1f8478
b2bc020fd7044c950fc707a16206aec2ec40033c,22de07446dc3b14f4dab989709912a20e7cc7110,a7fe49f38fd3378f24f326b91c90b460d98a4150
f4e955d04fb051456624d46e27a7f4648ab8840e,755d22123009817a35066fc465a6db94d6f7b8f1,4c434ceb08fcfb00a2429559de39de58db0729c4
5086cf7e7236e2abd8d613e4871916f6c60cd28a,594d4cc4f9cfd6c535c20be43f8ccd570a4d23b2,e35403c3b8364f7efdc40ce0af00eefec0226e24
948766a37ad62ce222986c1ea3f474c39f4d41b7,f88622a799cceca94f910ea70d606d10e91c53f5,4378319f874b31534ca92f3828aadecb463f7bb2
e1297e085928a274220a6d5d6da7d8e4f7a2dee2,81b7b80749ce3f65fe899655de51362367b76f67,77c86cafd08020fed213b65882ea4fd3ed411650
e4a0ce2fb5ad8b60b74d98cc92763302517516c1,11b341cc97b521fce9a74405eed2718cbc226e00,ee1916e919ac94a84e35549a8448f61beaeec513
2a46596eddd34d29d8d283a781c9e3f23e08c425,c79361c010621b76e379dfdd9a697f640aa70f85,c3b8b51cb5907c92fbd303d42e6c81e0f86afe91
316e127948efac638f6aa77b282ceb1b5c454372,c52794f94396901717f439233f6d3facc6c44e61,36b511f0572408c1976d1a7ad89dbaa3e76039e7
06fc6f1e6bba325a60098343a3c950f225d0f495,4100f750569162909dbcfae5d3be786ef2d10cb5,99851f22f543106be3cdda8bde9aa54d62ade4c0
b7322ae4c399b69dc11cf82aa76b96944cffde82,dd858f37aaae04757051ef92f915503935d1c779,1fccfd3ee1e48878337a4bf30351b4ae43b927c4
20f9b82543a0414c51c6cf1d57591ecb7d0bc67e,12176d36839702ab84473655e663bf641f3c8d24,ac150e58c81540661ec65cc9dad7926362806b15
9056ab80257b71fb8bcdf90be2f71e2fbbf912b9,7c609ee7c400fc257842d9b0742a8066070d2271,c68ddc5360cf4e1c7a543cfba9e469f21a434ec3
afea558fbe80b4b5688c38b85a622329df4b91eb,8971103a00e24b1f15333afa0e37c5db5415152b,564597a573d450d22cdf649e58e1e0cdcbaa0117
fb3c4ff75be75c367f4f4d505563475ef7accdb5,15398549a4db924a196c5b1405ab532a0e1f67f4,fea8050457728571c56dec8a1b651c0f45ea80ab
2641f65bb7cdd494eb8459daf45bc4f5b1e1e965,f0cc07fe68989577370032c06d9ab21c49158779,0efd3afb8c5e338a7d8c569fe834ed0a1acbd2f7
56d84c92833e87124fb24fe9f04a7a31a511997b,8132ccd42bdc21fd45a37e0e31742238b8085889,c87213085f5d1206bc0497aac77dea261d3be571
13e7f947ea8e1a03774318542f30a626b2795856,a8d496ade781502600a6bf75d509a202a8bd38a5,240739e71dc7f5b47073725d5981bcf757b8bed6
a90691435bbca123be9a9ce39c76bbccb7e70fcc,bf1c674672a48c159fb936e3d20593b7a8c1b734,e88248d453bbaf80cc0e48440d397edb74dadca5
7c3ab69c5076e762120051d4717b9ada1f945b4f,3b8fcfc6ebcc03cb56958b7286f3bf5e7fa4c8d0,b00e9543a72263cd8542b4d138c850f08f78499f
e7716dc05f4099a6488d4e8b25c6e89685b67896,8cdb3deebd6ca62a0fc5a543f62656202c8ca30e,8511b0fc7b82a9fc2919c9e8ba2c84f61190e225
f56587bddd2c7b983e9ead0a55dd74b4f8fef43a,9ee1821622f500efa9268ad130aeee8b08eecd3d,bba4edb6d0b921d0a36fb08f3809f8085d589578
1ba93085f73c8635dfa403a5b98f558dd4247a4f,88ab9576b159dc778ac34423683e9ed432e90dbb,139f2dfe84cf07d03e461e50097a426cd88a0797
2e65a5d458f7fc677442414dfee4058a39dd9b72,80750f7591998694e5849184ed63c17b6ea0bbdc,fd68d3bfbbf3ff8dd6f34287d18435578715883e
550397b98218b7b6b8e1def5bea34175c483c971,eaf24269bc7a77efbdbd0eb0458dcebb77e25dd3,0e9efd07efacd7d4184d5271f6450946e746dfee
7a1ef994b4579a63d4b5cfd9228da6a5ce543d1e,e76c5d96d8446fbbd6c338bc38dea54a95b0f12f,b0d61558e38f7e9ceb3918dbbaab13bc49496320
13fc4075f5a3ab3129f41f8812f0a7448bb2d4f6,1222456c13c21eaa8074279ce737b7e4992160fa,5c46b5116d5e75e4ef12a7ac325a331ace605b0b
0aa851b7f77dc9a0c4cbe808f6af11b4f8fbd56a,b3c1f294ba4b69f2d3bee53730c86af204e456b9,2e9556f2eb28769f913c9b8edb19f58938fa9abd
48eeaf00a4f9beb8313ebbf396f402aec9ef9ca5,6dfe323e6fc26fa7cc35710bf3e369be33b4d025,65f2dd233745fdbafa615308de06b4ab1f2b2eb0
b1a76314ae95e9d2652754b6a7adc7d06bd0faad,f29ff58ab97e2dc4ab553f9d683a63fcb5d81c01,a4240a0c62243e757f56e3f13f19d7257ddf9333
e601156b8c379fce44d8c92e956b73d40806fcd6,e130557d9fce5ae426c040a72786012bfce407a1,f36fbd17b1b4fc327984460acec850a1df7a9de1
e187d49590068d74c6f3b4f09eb0de32e8ec7955,1bc0ae3d18d475d9a6b2033f7a4299bcfcb51a37,d0c7838eec3c0e3297b1c35fbbb065415bb0ad73
85ee93c2c5edae6f49450cc81fb57380966ee60c,80f1d558229e3533c3a732a19074395847d229d2,2f9ed0576ec93815ae07a0571c3e3ee799b5dd8e
e412f6be55f9ba2b45c020a240ed467cce5ac28f,d5c6286852892f3cb1c9766a0837c4eed1d0f70a,902c93f3c3c213fd0600db49371e64e1f214766b
9409ec634186e7453346e17e55d4f3c4c657295a,c3a3cfe80fa1cff78441a38392700f034a70a3ac,2e86cdb6209f56939ae97f8d0e9516e4b81abcf6
17b7782929e4288a4dd67f644500347ec12ef6d5,2d1fba1fa15eda788f6d133aaca8804d4d28ab3d,61397d40ae0c43083844e850d87c60ba74b34d28
7f03fb696693a06f919965fffd2ad169cb60ee17,51f5726343727453333843f8c3093e34bbbad678,ab66440e76ad5133aeedc48923df2b84285c6b51
fc6d6c123d5b76c26f8b0d6b984111ac7017d71b,1de3aba4e3ad86ed2dc533a0042aa696c0805293,5a9d4d44faf1c8042d112e87bf3c60812d025cb7
ffe97bb7d966363d3f58f7c8782d6ff9a26b87c9,c39a3c6473a967b0f8bda6dc4037a813847007af,ebe7bc8097db6017f0959564bec070c942e041be
cba0ca490e456ecfcff524476f6db0cce09a7d7b,7b0578dc173f3eb5029ed3dfef964dab2c6a83bf,ad6e9049edc74085273451745d5d927ab8955601
346962beaaa5e896c155680f220a57a2eee2e6fc,f6a0da71fcd83a32037b6129fbd1f923804f58dc,b6da7a799a116154240ff0f11d94397fabaabc09
6cc391dfa13640cb6297e84de772cc06343beb01,b828529b24e149ed4129cbbf89b34d95f068b8de,edc1c79cbb2925e9f0d1b929d8da01348eeedc35
e60a7d01a45353fe263b3b5fc55e8904fdb00d69,a478a33c3262087cc9fe277372760244f1e558d7,1e9e533e6c27e8665aba11cdf6542798295025a7
e7145f5f7c677cc55f3e9208d08640db49a75e0b,312cf246adc4dcfa1a9aef3968e203660f94df40,3302dae600c38211c87ed5f2f3ec05755cda05aa
a888a141a2bdb99afdb4a0e9e83fc69613c796d6,02704f85a925475c71663e5db5ddf1700c00ceef,a04d2b59f643d3fd329129fc373835a8261694a3
70d2f81e5eceec3ac7ecfd0c188bb1a8adca6284,04631040b8a4eff865e06031d0b83e7b464c1480,bfe5733624f4e7c0a929ed684628b88908d6f72b
485b31de21583caf6165581588015e130425d445,11246aa5b4c2b72f50041d019165f6e3e48976ee,9b1861a1049aa0a646bbb2edbaa6280711bc31ab
5e00358f13ebdb36f70332431b8cbff7f6b04c0b,1e3865a187d8ef54d877185da306713640f935a1,a91c1ab6278349ddab8787751e4b561bdfd6cc2c
59ff8a0f654b5bca8a0cf32bb938256cfcb2d508,90779547622977b5aade4b06a2e0c131f9fed7c8,205e4f34212527488ea73f2fb4ff1a54f03db744
52849480878634dc1bc05288e780483d9cc9ebc8,fc1050a834eb612fd4333a1430fee1558a6c0556,1fa83a91abb262f6acfcef71e3976ac427dd830c
078e2eabf9d118854b09dbe32c4a0dc858bc81b3,b1a91501609c36a50532ecc324226085197acdaa,a9c88ace25531f56db09d2bb320b2dab6f6da153
096d5f50b21f8d4fab941c73982959109fb92631,291532e740b7187638d45538ecebe93a257b4d9c,4a4eadc60eede952c3d39eabec7fb5eb96a855eb
f49da0563310f72c509225c53a8cdcf01a92790e,b826ad8b7ee25ad5e70f9fbbf6c9b789dba8e200,c42bf9cdf5ef417b76093b3e8fb344e54397e62b
2d8a50556cdf0d49cfab4226ce47960bc4c87f47,a27abdd62170b60d641b1c439876243c17e06b2e,c86e7b43b434407e08a4c722d32dabaa2cb19a78
e29d1ecda9162428b813c1478f2c22e6ff6a6485,7284e161a205e7bb47fe42dc35a696fea7579510,8e717f41426df720dc5211801441a6a7efc8c71a
eff10ee9b7bb254c1a82c3e838eee6a20edcf3e8,8f106b616bf0ef62ea94601ddebc33b6c20ae6a2,e56052bb32d191e5de15645a38ac3071f12ace8d
cab3b8c06f91fbb847fca4234d776cdf4cbe0565,bba8558a1a22e5652cf76e5560445b9874d0d8a9,83abe1fb15e2ad290c9e0b0e484d49dbc123005b
ac0e641ce776cb13fc7e739ac9e2e2c2c4b32a21,53459fed2b18c72e64f4ad75949dff30338204f3,d9c786fee68349b4ffe3400cbde2de879d4747f1
627734e104652e6d10ae10e83815ded7f9daa71a,e507f612f5bee3e00effa488a48b0b1280add211,14b3c11c0d94f4972db7a40d09bfca284a24eea9
fbf20eee31f00b6e9cbe53803adbf1b9096a374e,0a886833104abbbb3742c40aa8f965ab14547e12,39f7172ee89eac78c2c68e9c951fe82caacaebb5
605b21af8c51d612fa54852d5545c5bdfd03164f,2de19f9e6695fd26f9aafc2201c1c43ce9d7ec71,bf970b29f46aa39f8294308c8598ddd86bbdaf5b
e0229632fbd5324090e43252aae1e171e7e2b0db,f6651f8855ab01cb6f53d3f70791a8bf8fe01d7d,d5ab671ec33f975082ddf04589bdf9e05a92053c
4eb8f8e5659868077b481bcac9e658f4a6f33b34,ba555ea68de61473e931e799e1c6887d0690a064,055681c8b4f5805b4eaa45e154fb88131c570827
8db51a367ec1b80b6cef6ad0c971df81eec52195,860c32f833d407ea1accb5e43fa81fa7b325c289,73a251410eee81a71e54b157a7ae12187485d353
c64fae2f8963fed5028c4b57edb83acad854542b,953a4e1b6452936c7de86a0c7f14d17423628e20,8c2aca6ece8c58b3bcf46cf67bb0736079bc4ecd
f584c559fd036f07885f527485dd803d3cd239d7,aaeefacf85974e22a3b8f84333a5d98230ac1f27,15b3f1664629c860920f2be31edc10824a19c7dd
52c5a0932d2fd596c5872f4e668212233f08e93e,f5beaa80d810f8164f179c8165d8e7fd1d7b6003,c2664fdfa557b7f8e5f31590864b8a5237d8e989
5bf93d220f34a840bc676d012a75ce05703299f5,bdb611c925aacdb6450dfc4e655f3f8e11d78f0a,d44a1c4100800fa59a5428c7c8db360d6766567d
a38effb29b4f0fc8ec503d9ff1e1cdbf146202cb,5fc78b223c11d08da3f9dea1be8bb59c2f2b4e79,2fe3955be93d40368dd6f1db2c4e49757e87ca00
83d3a3941715dfed0e09d9f8beb57e33c4c48229,8b2ebd07bf1a6b9cd2440b5748f95afe55ca3efe,f8da65f8e9a5fa02dadcd16ee19ce14c44133c85
13de117b8e52f4d7c1c5e3a0ece89f380d36975b,6c50c02f7c97118bdea91edd78085b47534f1261,9e8f09b93f3844cc6f8f5ad9926b6eebcfc06342
abcced55af080fd4577f0a107ac1366b3d5d7f16,440a635bce6aa43e7b26611e4625e91f778dcf9a,c491856533b75b0cd2f58d17b766c24dce7bf575
e17b6291f5c3fd88bc6ca2f73af68b1b80cd82f7,c4f046f1b8e9d71d894431c35d1a642d37f08a02,07da0058e3289ce240c7d80244ad6079ffa20d1a
28287525879799fc0bb5fd8b42976e5dc1079249,924d4b9b53b3066a6ac96ec304f7b104015e3f9c,6f8655ecc9c81617e3873674c4c509cd49fa73b5
a71995a521343e12b951ae07b0ff9d45f1f4c8ec,c88037b8a7e3682ddcf492d74a4322af7c5612cf,9ce7fbeef025dff2124bca6773d4c84b7b4f41b5
db5e821ead12339c031c5f9a3c208c509df8f9cf,adc66b233d33e90bbbb1248887e30287b38b9003,8cafafc3e670481482caec9e5318ea81a52cfe3f
0fadf3515e2cd9b53a99e21789e4b040a335b5d3,5b03123bd411c1455aa00f5ebb9ff3b185af087d,26c69d564f0d9b399c0bc3bdb08b84e05d87fb9f
35701f8fa2f826998b56f6a8a67de9e5a17a4174,fd74c26707e47ea8f1989941d05b02d92fd04598,b974e4a25f99f91d635d3023792a614f87d0125b
e87982e925720e0b29d7c097749802c99ed92125,ffaeec243a674a1fe4b447bdadd9d360dda314f5,9caabdc4e78ea95eba77a4ac9e17be420fbf4188
47d23951104be6402acb8ca5ef3c9b2a1ed175d3,b64701da1b8844dc50c51e453374a64967a9e1bc,f6002d80781aed00cf9549647cae12f17b1ebf98
a816fc2114eed47eb4617e14a4aaf9109988a60f,4c787b4b9f79a958991f248ec2db7a8e6497492e,0c61c7057a91560772a884b44cdd841100105ec1
1743df7b80edf021173e1ed7e4fc24586cd58f95,c6e715a54e9d058624b680c7d5c36511ac7982d5,4c3d8d016eff0753f2b6dad39a8aa08a087c0af7
748dbbcb20d662572667064bf4494f87fd8abc8d,1030f67fb4842fad0edc3d7ef2798ab0aedb7f08,e86882580d4ebcf6392ad27d18f2de1382656804
c1c1d46c1547cafe1e7b71864e100e82340b6dfd,8e79108e518ae31a8a354f26a998c84ff68f8455,02e90adfe1003b6ee2516023dc5e0c38c3ae019d
09f2fa0daffcea9d44570641d341b4fd40346cf4,ea988e0b920bd55fd07baaeaede08ce82eeb45cb,95593f15ddee345e0ac36a25b4de904c1f8378f9
8ec86ad053ed6c0777e2f9d1842de7aba29a86b7,152bb316c37eef709e576061abb8aab413908526,fd1fb255a6d2a706041e19f41521fdb6afd20558
d9e3afcb1d3d8f981d1daa05934e893b19282b32,83a8d584e0bb7f5a7a2da71f14351634c6839afd,4adac78f85014ad8e52d0dbdad28478d54273283
65d4319dc2f9f4643f8fed2cb0cf038ee945d27f,7cbf18c6f395b2133ff1fd8c44cffbe4c7c8f28f,437e7fa75af92b1ebf2dc97084b019374481fddf
de1b3a982b28624802102ba9a3dcce7a71099af6,b0a82993e6f8d0920c2ee789e84d67951e84a334,b71b5b771f4304a82d79ba84647320755253a19f
9f6a3eebb78048432f2240922b18cec3ae80a686,9059ac067c160ff836e8dc7d75b3e03f22404f12,e67094ec28727aa9f0df6f331e29179fddcfb623
6277c21261e0ed4116cf460ca08db26db2d99175,0a9169eb67beca37d9108bc9769011237c8a497b,258ad62c4d8562463516d40d5f4c5768b9f9ddeb
d8340641cc3c64d043524e8f52411e414440b4a2,b08b5bf136c80d80abdd52fa5295589aca38eff5,5cfd214b680339f496a630d8be236382ff5090fe
fcfcdc2ccd310f211d4ffa4ba084f48ca9d57379,43229cdf2e5e0245921e5b5be3495aa3f1cbc907,ee3ff193120005677c4ef63c84ae91af57ff8c37
6a067b55d1523bd258aa3bc8ed2eaa2046892d7c,478a227aa4ca965b1af6badb27f3df4c01b78183,a06a20f9c03dd42ba19457a8c0a4c570af5fd6cd
87137a4aaaf7a9a389c2c34d2eb96ee0e744faf4,1737035501ddd392579f1da5974ecf778e9f1c9c,c81f10bfbd5ab6ac67067933be7c9edccec95040
1c96bf5d30ea0c339ab5234b17cb6352676576d9,52651a7ede3b51d3305f84d5e1ffe90e6811683d,ec2f18f8befdc0423298f1a439278988c0d6e4f6
d270c2ccddda47397de4bcf4fbd791e7d4b675f5,9c81c4a5faa18681f921caa8ca5a7cbdade4044e,6d157b5bf0128f5aa9077daea7f66e89d8dd00f9
657e4bf838f850e1d209baafed59ad2ddcf5246a,2f5cbbacb714ef74a99c483f545d530a01d600ae,a4242e60b2b8dbb6bf5b03bf2665343d7441fb42
80febbd8cf6cdf0dabb80612060d0eb36363a4cf,8708144c509651ebe9e928c500883c4703dfffe6,10ec49d75bf66731bda613fbad531fe49a8e3907
cc2406ad742a00b88568d4c2d9b64c562b42ccb2,9cf31e2bb3a99a883fe22275f205a87c39412108,aaf536ae109a4797c13d4c6a0655c3103596d5c8
4afb07cc5ecfc9d3fd300b9672ee83fa3626d4c5,3c027b0ba03df25a95ff94cb18f15aa1dbac2272,3e6cd16bb56e5f468fecd2ab3250440cad90f7f2
23dec631f52229bc132d7050f4fa7e560de750e7,8bbb28ace8d4ebb6b051425761958e4b4d14d242,e6ba09aedd16890cb76de875abb370512ec0aa01
1ecc880fc813db7da9b55145e21cb6f62b45220e,d4816d12f790f6fc56d492fb8eec520da62035b0,34025aecac5ddc82c0b8fa17873849687aaaad5f
610f2bb3c9a50115f706a01488c2ab5942d3e395,961042356ccf45e7d6247aa334323c44230586f6,a87481cfa4c3e5de8c80387677c172cdf39029f8
0642f145520e2893519c967678575b6a2e3d2542,70ca28701b6fe30e3d0b8d81b02d5059eadbda85,44a5f6623bd8e58b80537eba80048ea01ed72df6
6ec1b7e1b55fb40c21c86eec260ebda0f5b1d1a4,db86dd07fb93ed5aa73827513dbe1483995d8a82,99b7b19f1743d796d9e5f78db2e64fb0c6afe8d4
f1a173bdf6ed78c5440ee794f8ec9bd6a9cf09b9,7e938ffafcff78037e849ef69727ae7fbdea395d,d1348d17bf8d5d81a03e2ea3c36d15add9a3150f
605ca8144f12c6f84cfd285925f91bd55a5f0926,cd8fda1c2887334eb49143c156536ea904f770f1,df4ef397624905f8ab0f9d7fd7673e36da1cb7f0
afbc36897debe5e933a07faf6f2daa961405f8d4,f38b12240d40e4684f7c7de354295812064b26e7,39ab212642b9c86dd002d39a9811d14785b885e1
334ef633a80967422b7c9a213da44731b47d1fea,0d5dd4196f9b83859a45cb62a1c2282a9df18f48,a441d8ff28f7e68a2801285bc58e8cb599602ef9
90a756931ed4e354ed958c55165b7fc31ce05d41,c9f6b93d226d8404f00dbe3786863340ef82806d,07b4ceac49abc1138ed4be662789a618c84c6824
3a473f9148adbe0219e6d11c634dce828571d12d,b6f60e33ca63f95d9c862edb186aadf20f266aa7,914b1fecebe3e44876dd69eba8a98a83501704d8
8648c0353aa73dc211796e0a0cfce6e5035c21cc,4d48e7e4d33604c67ad1c4f0e8192ae92dbbb28a,cfa7d6a0c61637941ed8ac693347bc52c112e3af
b985cd0ea55ca2b91e7b74bd58ccf9688f393bd1,dfe60b53d1a020908d0d585adf8f96d0282ccf86,4adb6b2beea805e62999fcde8f667313bf1a8d17
2e2281387cfe95db0175af1e145106d8f73a983b,f81485a9b10488eca3d521c79cbc15f9ca1ea59c,8833fabb4b16a4a492103636e9253241278f2966
7b05051fc16b5efe71e55dec68336ecf78d37e5a,3218f25d130f9e3989ee3a8c6e3079aacde55c8a,0366df9fbdfc89a0ea03b7ff89abaa953b5be5e7
6ef37d999a126d73500bc57d6b07a76bcca94aec,081af9a892a11c4ae29bfa932acc9b3ea8e96854,a53eb8b230b1783f11bc13898d2968521e3f97ae
bf78823e60877ba498c1297b560159de98cb9a01,c54d1d4b8938af969afa035435067ac224c8354d,159d97e86413c12d36e4c763e89a97c86931ae2c
7ec9d2bf9fb0b51a8962ae005eb30382ebcd64bb,167b5213d14e72cf0dc5ed04c8a6232ab22af047,b499e7593a593b86ee2f543ec1bee6efb0899b63
8dcf4e62b753d35569f4e5d815ae45bb4f02c20d,44f58c702fb70614cbbd3702228443212239b759,a4608bd008938e4e8853e5fffa1ca47c24abe4bb
4527365f0d0aa5e413c476bdaa5b1fb66941f044,0f39633acc39fd200a3c8cc29a5c5efd8ffdf762,4112318e2f22f8df913e17ef086c52a863505802
7fc6d5aaa1ec5245f4c4522f896ec7dabfcfa40f,184c612f7865eccc53ad40f688d9ce5d9288f6c9,cad9cd22d36c362b4de12cc3a80e1b207d5ce6de
0735ac0d1f05e1a017dfe19f2ea607bbb1fd7113,4f42553cb3b884a0a62ca6a5dd7edf80c5c63220,d2785117df1711e874d39e68494c263862584274
7a1c50ff87ab6a9a29f41415655fe65e2969b5e7,58a3f2ef64ff6ed1eec0380ef829c93aa1ed7572,b6527c6c031f373876d81d57da3f2bdc3af25026
7ce2f95db0266716057528bd9fb9083bdaf32789,54d65ff75c15029c7420b5e52252dcc15703b127,dd26c1502c8637ab6bc1741724fe876d66af1104
f81ce16d2abe8f15cd4477cbafd27c048073a173,90cc6db5cb13a68b33e100eae48ebfbad4432815,4fea0e355ea297b6037c8452fbaeeb762402378c
ce5a632432ffcadaebbd5024637576561db422c5,d53a81e2d96bd580dcc90fe32fdf3d71cb412b9c,5e327453a858f41964f6751c5ebf766681d414d3
a76ca8f60e8f91d9594f3e7ae208c6e38183ab97,6ab6d613e0f272502306f306e05cf72af1904420,342ede81ee24eb90a1a31ffc63f226adbf443b0b
293ddffebd9c09cb3327bb97ce03d0e81346275e,28b080d9bcc50c59ccdc9ca300e48a3c0d05ab04,38100cd50193384ec3f68514d15e32d4c47b68a8
437faaab1293556a232cecdb3a6c7e5eda70de95,649173001c2503161bd85280562dd9dc97ecf800,d786b639c016e22d09da7c59e5d62f4d3c4085ff
3e036e4ff83042e70c62561455fc5044991281cc,75e061e06f3dd6fcae380256b04c115f8c6e8296,3d204dd0daa2ebfa70d37916960c7c366317a6d4
6149fe394e66d4612026cfab03847dc79e600470,3d25e52b614f2fdfd0a8e29f6b16971c9eb9d727,964aa8b71bfc312e004d7f41f0d0e04a12313de6
45374be28e8b735ab8244d1fdf567d2ea4574905,5e996dc18f9969d3a691625a19ec1e0fa75786dd,d79c549f039365c60123f239cd45149a037e731d
27fd290150dab0dc7c05989e8c93f3904987444a,2ba0f42508c179af0d79e41d711493b9eccd8197,a0cfed14fa4e9b0b7d6659043b60930e032092c3
424686ce34b2a84815ff79e6614b3bb2ece64d99,677fd4fb00c070eb2f5318589245c2ffda606898,a4ff1d185e956160be4d3c4ab96cf70ef7598a7b
adac1e6db211ade0b010590d5bce76ead3208f13,97e5936f788017402d80384ae987ac55ee08d1c3,d60300e807e911efd4e903412082084b21db8e07
1ed9054bb9e2e228524c475cbf10d389e5d09967,ee98fa8e3f5f31ebbad70b1f2225d62157db2413,9799c6a5ecdbf7d46363a0bfbc8e0ab7b94cf565
60965cdb69c7c9f0142138ee3d112bc325488174,b7742def46354751a38bda786b6abc36be303246,06917784d033fcf9e4a1c59888ef5758971e8105
dbc3e71edac58d1896c0896e5d3ef211a0b471c5,1ddf0149803ddccb0aad22d3e6545a04f17bbe89,cc15a2dba7fc9ad98ecc335fcce6a0c994214a4b
d2231e99e8cbdff20da1d4331fec565ecd3c6861,23debb77b39082f3c483337f10e4dd454952210c,d41d98b70baf95c1767395d713f1b10329c0da29
c8e4a52428e84c11e26493aec1952532e60fca1c,d81170ab23c3f1f76c69034f96d8b1e88a045978,99943610cbef38f25c7589329b5ef5b5532e5cc9
f5336f631141e3f43711928226a7eac5cc803991,84da5e619c4adc3c72c5a6f2da80c56be2899a72,190b27ad45fd6e8dc45643da93fb09c8f85eacee
761b45196210d758fabb7f87573c2632f9dea107,a685e2aa5a9a37bc09efe484f9f2e2c825b46a3b,05b67c740833c9bdd5dfb1e20e9302943b7edb91
b9ca30165cefbe0d857c4f2d32bbb6718b141bc5,80523e192a26f9918a7a942d0adffca8ed180f60,1a08d76ccb9422788daa011c3fed2d3f464f9638
562ca0ad801ea4d6015f8c9c971c8929b9c428cd,4914a5a31f907bdf8ec97ad9d9c5ca3ea52b716e,993db6cf32c96c03e2e339b4d30677211ea5052c
36ecb2b5daeaa10898b4d276cbd8c2ab33f545c8,aba44452f36284f757f4b8e899910b328864ce12,beee98e246d2684dc0d1fa42ef9c77c59a381733
0e0c4bd6210b11158e9ded139b9081858abab805,400094921cc3714875282ba96219af966c842d70,9d7ea2c069d125253462baabfeca9cc814701fcd
cf7d9fa4c5a22f6ee4b6ad563c54718107c168f1,29ee863e8faedc99e3b12b1e4d66b21bf51cddbb,b1a18f569018cac1082670353a18f8742b5731a7
76fc3275bce9cd593ff9841374ac4ef572336eb0,ffd461860b9e36af008caada650839ab99845053,2ee8a59fbda3b2d7fbe3b160a644459cc8064f59
85143f515ddbb545e199b5f2b3725a774d4a65fc,7c545cfa8b3e4d6d9950cb61ab1fb52b9a3d7689,b5d0cd57edfb7390bba5b8fb7b617311774ad1c5
507e728ee87ac8f16aa143e58e7a584dc9551291,a46c6229c516a172c35f68e36b2d35f6713d93a6,33a389dfb7dee9ccb787d70e6aa12cfe7a2ac330
44d9234f385531cd418214f6c14fff10712a14f1,1ea876b5173b6823a10898eb94acec7e7f3a2a3c,508e0dd01cf2d4a7511449e4e84eb5febdffb847
130d1e9d4050a29a8f2ee10261f59487402778f8,dba753eb8d899be32b91af258182243b109b74a4,a7be888255630421c404200098dfa23c4aeee5b0
3ae64e5e175d07677d9c367bd41a4edb101d2a16,5c94ccc4c214ddea0f81bbcc1561a0ec4f4dd07e,eb440e0ff132cf5854b326cb80c697d359e048a3
d247c30965fb9ced124b85502e7b1e7208a34da0,8c73d0a0e2fa2d847cdfeafeba39203200fd7a94,17c0765655f44cd0ac761df780f746f435c3aff7
d7e24e8708bba502dabde291f496b4e2feec3b0c,63d9c1f077fe89360a57f07c3fc5619f91f43090,034c361804c13b896340761ec26f09b78cd5b1bf
9a8c6fe93d3ce3eda84042f2a3fd8b64c50e8f1c,7c023d33d0cd106ddda298cac1e340ebd5a098d2,2123c5994181a14cbd912c4064755da6ab0bdce1
b47687852e39a2925ca9e35f0b9657c00ada96bf,14ad18a82b20d0c9cf48bcdaa8cb0e03a066087d,530a962dfcddfc079343559a51c96f7ca855c906
e9d8bcf484ea417ab2d599700a8e8e5a5d019df2,d1438e0d3905fc5ba6315e4b4bb216b2d07746bb,f356d8cc5198111bcd53e61cbc6bebbe0fb16960
fdae200281798334038bcda0cf43790d4ea6af03,8e6a8a36cd9dd38e516b9af63180cfb70851e5c8,a6eeaf2c72770f56ebe59005a0d2af0a62ac2d1f
be9bfbecc588b206ea124d7d2e27cbdcd8451e30,8cacfc3355fc5c82aaabcc191ae368b282d3d51c,66f73d466b16f14994b112cf6a6064fc271048e3
2f5fe67e56fad1e8a05058fe3099774f5c26d19f,66ffc986c02bc46b3abf1f9e6defc054c4d465b3,00d86d24be1b301eb7cada055e591dfc180db86b
180c23b3956a04de88e75ff33bebceb6b5e0fd38,7b02331168b52fd8f59f9dbdff6cfb22ba3078dc,44c8193cfa93c9417b9f5fff5abdd56fd68e7145
b8154e387757772ddd003f29c78cc8e297a302ac,bf7bf44727c0f26577e093a9cccdcbe44f163171,b077d17cddf1140a5aff2f176e12990f41e00e07
b667be825ef6555eceb4cae7c2c372b514617dfd,e8c627491557ec9da82e99d2c834db9d6f284e0d,e9fa0510d0b589026a57cb027fa45030b91681dc
584e49c6a20fe67d9b1ceee2ce99a0a3ec22d3d8,3431cf5bc032a23946e4e9964949648242836e8f,cd3a06f66e944656d87018cac9d45c542fbb3866
57eba4032c0e8569b40eea12123b3c77e31ee189,ce20ea80436b8dc97c226bbe6d7e3d18269268ef,42f15792ec8ed8752024b5b162aff2b3aa159022
a188322e76155477bc266b686db87c03f7f1f8d1,683b566cb7f30c643103d8f2d941c41f3be2e806,3e7d58bce78e5d8c5dc6c1a2a6f34f910112a59b
9fa091f8f5358d22d1d97cfbc257a9c655aed209,c24cae29d644cb68b0620fe1c576a2b2eeec5ef9,0c7aa1805d0f4e3574ac42cc7742007e625f570a
1850aa96b5e0afa40f5916a70921925268a3d0b1,477b9ad5568da3430987d95eb6ffec03b7e6ae50,fe4f12172124b3a6fe604b20980c556e6361ced1
7b0cd590a60f1d3c5d836fd4d829cb1cf86c2527,28e1daa8e1e368a02e2f08a7fbc1b3275ad0d62b,e91c8040eaaf56e3e6e85edebba4cea98407289f
23bbf87c101945b090bf3ceb95a2ad72cac77c6d,ef16a99c08ac8201c8264b9dce44ffab4c596af8,dcf6a97d64c9514cae9ea9866bbd954ca0e2521c
cc063e7a9c6ea5455b4afdc4d3507eafa45346c1,73420dcacedd0ea88ea26f3c9bbabf31903adc4d,0417504d128f8217972e3d35cc5076165cd0b6ae
c83a047dda5fdc5f6e5940ed6df0fba708931e05,210cb8cb74215c76bf1f3f9860d082e3139ec2f3,2cfb790eb7560f8827f086bfa678e64888783957
1d629270cab501ebf0a2193b4637024c2a59607d,46e5903792ac7bbf9c21910db01df1c41c0ad3bd,32d0531c7170455c208923ff1f47ed56344140cf
bdeb161d85e590f36fb0b5eb88c2cd1e3f1943ef,bb31f32941bf3e95b5f231d59df37d580aa6b676,e048266473f06c7e74ffa726e126a1cb3e11612f
04b0dfc8122fb817789f221f7925d9a613302735,46dcffed421e5f6093b65f17d6721c7cfc46a1b5,c82861588675daba0fdf004b5b471f314843ee13
b2892adebf22e769736c9191ff4a9b33885efd24,431d4395eaf0c4e1e9cf4eadfb0f1de0dd4a1047,b8a4a72760b1db9dd3101da2dd82011f1c6666a4
00ae194e0a1ffe6705a6b990eb5b585284eca598,22ec4a20332f8208273604b46e727e481f6502eb,397293f09f7a3e116119ab629687c64aae507539
74d2d2f0d8281e0d4a293d5569c832f201bdc3ca,a9f522c29df6c2ca2189c9b9582840d52924985b,5d4bb6db9be290e5316aefd9cd7cc18945b90307
4ef30edbd449910f1a5da609064eda65c184f820,00fc962ca310f7bc56a3962918a83fb68a7f8459,511beac49c57ef4c6791494a450cad1886a4fa9a
75d7b66bdf066af9f3dbd899c5db07e37c183370,bff561063fba763a9be03fa8b4d609040f849292,7a963ac56a0921ec1b12701c6a4c02bcd9421154
b28681e91d1fca8d60f7bf371468bd0f766d1d39,6618c0dbf7c282a58eb2f78c868f9ecdf96d70a1,1778fb6fe3f01f16c7de5270b19d3e2f15d941f5
b7edddf9d9274c827cfae90b610d84cd0f5ad7ba,59a1199110f4b4f9d937817994c2f369365ffbbe,800fb6624e395cadc11b0a4ceea9e2ff014211b2
bea36238e7ed10caf56df832ed070f569d6892f3,05b73f1523b619c68e08f7a63f00c7211fb698b5,7343a129088752d50e578547bfc8996bedfb0780
183a10b2928f2e804dde61b04191af01c8d05d6a,0b97f169b0eb951810216ef03a36200dad8ab8d9,8498eacdeb34d2b8cbffb24553914ac8af91912c
8450d4f5e7e24485f41314364c1baabc88aff5e5,091189a40c7de400cd14c694740904ae3032b47e,22d7033d18ff3bad17d2f22331de5f47e296e0fe
6efe984a2da795b134cff8743964dbae083e7e63,57fd8f13c9c8368db8949d835dd7a81d32f8b109,0430e1bd1ae4c64aacb78fa6a8f08dacc108507f
b7afb6237fd0a50d85c54003ca5ee8fed8e03b05,465537583b5c51f1e8e0d2682c41335e26787ed2,552ba9353657a25e0457ae36842afb8a8bbe9113
f2d44148fbf28294f0dabc8ab4260889e2c7e070,b67415d1a82a54b96349e18acec88a3ebf680e3f,bb27442b1963ea767dbcd322ce8beeea7810474a
dad75d44722010acf9c23518958d754a6e3702c8,e2dd3a09dc4184a0debcc3d87cfa09806be7418a,42c5e368bde9ca694e9389c5c8d64e6fec8bfa8c
ee6bfa357a056d26096ddc9064a85a45e84ce5d1,959804798cbfdae932b7ed962700ab26f1450975,43d1036b3a8ad931c8c7a2444b2daaf08c7e665c
ca92c49f8c8d1c226f2a3505181510ac4632a90b,ccae78f97a11267394bc62419c78e14f691fb069,4b92df28cfeacf147b4a3b555a1123282a5bac08
89b1cdefbeff7a773a31187097218c3138e6fb74,b6af220f1a99d352a574b0dda714ae57e1cde29a,e4af0fc1e989534551aa5df34d8fced260bf2787
798d793cdcbc23dfd952e85bb386d7afc775e71e,0b49fba6371411abb804cae8ebca925b54ef468a,4267545c72371e41ccc9c039a52bdc9d1eefbe7b
36611e66e62becc8dd75bb7e42f87966bc65cba6,4888442fb425fc85437547d360ced84d6c65bad0,4d732b44d47e2f0bc6a5a1216bb6d353f465e013
0e393084165b9c57b308920039d1c09c1c1f94c9,ad4fe174b114c63c0fc006cdbc35a1075c3d178b,7b3efe6397630799bd023b6abd573a02018ef356
8f37905609f636b79f3c368b05c86727aceea058,c236ac5e97b01b1f2407957f9908c5ce99a47d00,e1e301dea8e7569a7d68160c6891681438057f8f
e15f731a9b1ce32f5e44116362a457eb902499a2,81d24975f0a5f7400bd3c3e7a2f10b34e9bebd24,ac4b089e14bcd6af507ab6e6f9962710968d6aae
3206b2e0cddde24f0ef1ca944c9693b5082ce8cf,246d7865c552f9000a3c1dbc2fa875f055776f42,798f2ba63272467b5c4d2e1d5362304c759ff720
389c927061ea6b73bcef5f198fdf81fd73177821,3d6710c0e3cb9cf9e954a856b8b5c165cc5b65ed,c45d03851afc8d46c3017888e688ef2426a7e3ca
27a0da5a20d1a1476678f715063450d57954d4b2,e8144afb6b2622825a0b204c90d1d4c9225bb716,f689746372a3889341136aeaa6b6ad852a8340f5
5b54ab2040772b029046f130fb3c13066923d5d7,60690e379eed41b2e342446bfb3dd7254303c08d,2390e70a4e434e5567c0b4e319da670e932afda5
0c5281343338d4963135c58f586d662b0219b445,9d94ccdc38542b77098666fc821a0e225196479d,6828da9c6c843ea5401d82e31a8b2a923f7dd778
311c023271a74374852431c0d9492cdf2749d4eb,b26c009d90049b91bebaca9616ae8e43add25d06,74bad92e4db4897b52b95d4e5f8a3626d03733a3
f32eaa1564e54eb793af9087a8c467681044c5ec,98b1aee2a515ed420dff3f94d424c625e85ee92a,5632af2afa36d8f178c916a355840d47fbf4f5a1
d33e7920a2eb99afdaf33173b41a0723efd72b7f,4bc9f64b7044a10050c32c7664213e60eaa83507,8023fffd3ce6e6713f2b508fabc5cfae73cb9fcb
49aa14170341f23598bb18e720cc6cd033d4b921,d14748813333c3e0826427bef025e3c3a5caeb7a,553a1b968d546f947f85acd344bf93a16a3a229c
0c749505eff609a619e6efe07840efa8ad078e41,2da48488d7075d84f0022cbaf0be8084482d4749,af233b8ef8b75f8f47ceadc5cefa95bcd76d1b0b
8d0bdf2f16632ca4385d7c95cabae36f2e7f299b,891e91590fb2ee43938d78065ca3cf1decee9207,57da25581e2e3b830a072358bf68765a28f9d98b
64ba751ef174c8c40fff1c88aac96ca7d09de115,065a81b72c3d2ff9ca6498c9a11cd2625590daf2,aa0ccd8b59475f48c55f58d837c1f9d32745caa1
b4a83e29a44254ff564c12278f172b2d05d16afd,9ba3b12eaa58fdb22ed90edbf421a33c171e4afc,310afcd78344b1dbe6455df06bf463c9b6029970
9de0025394fcf6d37f7726d17e208fed26a4f534,32b3477fe23c5f0639430f814c6cb8a64439c8c4,b7608b045b9fbc05d2ddfff1ad866d97cf493902
79ff74ac447bca6cb85d7b1ed2a01b433716a120,93d855b2ca1b285cf0288d9d0166bf274cfbda10,f7cbed1a72bdf83f88def30a963aa0baee4ab4d2
db83f9c696ca94eaee9d068bc255fdf719854e40,8f81b213dcc96104d0c3804ee544a80705004b7a,9b63123bf0535b0abb704b898c2e7f4f031c357f
dedc018beb810b57caa9880741a92de64f8f1aec,3b7d9956ca19fa5b451c80cb8d1997e75185e465,64e87c87bcda295da38e615b64068e1f9eaba1fd
de8d54cfef354dc0dab00d3f19e7b463468276d7,e30ca2791434447e1e7df097cbcddd250428ca7f,7fe7e266592d081419f56d47f54df38704e844ff
d335ce60dd4584a89ff9ca56ceba263b96aa585c,c3a6df26ee40a7acefb03c87eaa5d7ab62f52b6d,f2d41e680b765072e791c7f686637aca7b09ab95
a16f2ae35dc914bcb8ce5c545bd9019dac1fd98f,40f9d006d6f931f07b2df21849bd8a96776110ea,9a2d0e0692e726e018abdced722bdc9f7064a9c1
1388e2af5b82e388a14d7e255f4cfa5a0f32bf58,3ba27d3160fbe4b4600b85a4dae0869849598a46,b1791af0a3737f230436dc1103b1e94585a2b6b3
59be46a6fb02c4dfee8580b863b91e0327b709ab,558a7ef1edf41744d37c8a2da450bc4ea15fd347,5ec9386d27b93ea85844bcc56e7bde2f867be560
4f5b708d492c10de06fe7925340f240d029b8ef8,2a6fb3297410fbd4ea149d863c6f783342e1309d,540807c5c8cc03b662c1a9e41e9b60f03869414b
5add7991935fe7ec87f5659b795593268d5736a3,f3b28369474a70f7464a6cc94999c57c1b1cec29,bc3b68ae7e42c9d62e0dbbd9309e5c7a925f1c0e
ead882f58d4a99e73d6fe60ff0f4241fa9b685d9,4185e1dc671c371e5568b2bdd0f9d0ede480fa01,8674d45d7b6e407f09daeeb160747a27727a9926
83f1d1eefb7b819ba405346c73580e7c16d4c72f,f7264d3f2918102993cc4b20570d7fadcfdf79fa,dc6057a112aa528100cab408b6be81162486f767
06f8ad2e3dfa87fb4c8b623a04820df85bbf65c5,50b160651c091249c605731b5887d6430944a73f,72daf3f556208778d53f644711db13c5b24b1e2a
c8052a3f1d18e4a5f151c6c525246b6e331a088a,5c4db7dbca8f5d751aff8796c06c47ca339f2675,155756f668c3623565bf2f7cca2e61466e9912a6
b4d3468f684385086d1146a8f1218ac2d86b3698,2c5a070959e86b72c6e86ac78633a62a7f15b4fb,b5eaa8555aa8bca1977eb25cf3b60bcf2f062431
7aae7a8d51e763fd3c3fe3a17ce1c37ef58478b8,e082fe97528a712786b136263908e1eeeaa3cbef,3f0593b55489a7204ee246cc9ad57d3de5622135
f2f39d4aaadcefb1a20c4fe6d8202f82b58b1ba8,d595976f4cfc6022036dba60a6dae42008220a7a,a370b6ff1d4783db2208fc82f179e3de4e702b9b
5d100fd2c6cb07a929d7b5ad9e59f7eccbdd9c97,c3110dfaa982648f79ffef8de1847cf6a07c619d,87d4c189927636dd8bff5bb0275ff998347ab0fc
a9ab15c60d1ebc2ce17a894b15c69c03d13ada74,366acce9ef86d9f3f572a7db3735d746de3942e3,63845c2be6555b0887c45570a62ea7636d3ef479
1202b2612fc2d80bd448c3ebbcab4101a60e1cc1,971d97c179dd4b81ba52910d708a6aa6336ddbc7,cfee7d07d8b3b18a40690d95a20db6318ec8f53d
dc2c6c8996617465b43e53f88ef0d7faf491305e,5bb4049737468baaf97a5a67bc86f01e496ebed9,f417c87ec8137080b45c58423ec6f7e502dfbdd1
c6c05f839595c5aff6f1cf930c2e0c8068b5caec,1a130056f7ec23cd4d68cb2d954353d38fabadd1,d3c3b79e7914220f4a6ffe6843cd94f69137f280
9355e703d7fbe78c78eeae2708aec79637ca7b99,5c6abd2e514df0c9810a62a8f6dbd29692e4abc3,599b187589b51f8d6e6cce36c25c72a87de5d3d5
d1c3ba96f24008fc4d400353d68a357e0a0ba363,ea9e3e02bd1be61fe98ef28d9dc48270a74b7277,cfc5f17b0dc3dd6ef2dcd5a94752a367c8c2c478
7cb2e5a180df00eb8b5b18fa24a12564ea1bfa09,bf41de879a50447193b8ac33bab610d3cf0ba381,522612a632e38fb54d6f3099f80310832322d975
95c2a5a2d796d208c5e7c86485940c7b566af69e,5f9ea00b38ce9de9c48f7fbd8c1dcea937f75753,e17c5751234075579fdfd122ef5342b136ad0209
56fa196b03266a23c6446eef7d0ba4d48f3a5ad5,2e77e1a47178ee197608c6841982a9c6a3c82f52,6ce57a16257939c96c97fd1af1d44bb98ea04c77
bd1a6a60e85a5524339f9e1bda0f534d6dbff914,9a77a855e48641858be539edf52ce48a44863871,ba8554fcf5edd85995295642fdd0f05a9f1c8866
f75de6c340ed47a8b0bb0ee2f54fc84391b1dd86,125da5f10a8199ade31c07f5fd7103c214c25d3b,3681dbf0c9c365a1123509564040a0aeb9d3a306
4753acb3fce051ceec26d4b31af2ca6d96c0cd19,b810e6d5cf42b881ebf91c5c4602ee156a6d3487,44282acecb50c64e9507abc318cd280266e93a25
6631f83ccf244b4f7c2eb777cbe57459d7bee2c3,b2f6214b33f66b5d50dfe8e7aa59ade2fd76758b,9cb6497faeadf07c48657a342bbbe675107502f4
d1ba97d46248d4061e2e13d55953b1ea5b40324b,bcaa58db019ac175d6857db93693133e0912ebd4,09be204011872adcc3fbc1ffd3a2d33bed479ed2
6cd75b75c3001e2125bbc687b59d878b90a26165,ec76f13bd7d4f2fdf2484e3f5388bbd385f499f7,1802a8c4936be2572af60b0b9d58d19c61ab03c2
f3ded5e82eb74efd6c9d0464381b3643ceaa8f72,8790c4303a6836ed7f21d0fa71c2111a9e6f8599,55aa5ac129fb44d38a1164f4917dcb3182fb8256
03f45f8b0a16e792dddd7c04a4b94ec35a673bfd,99b71eafdad72910e6be2f5a9838470f47350924,1a07e13c023a6ef423917c4500086f242fe056a3
29b3b092518ddd6ea3525fdfc1cfa1d7b512e824,346ec2e86f63643ffd071963cdb371af63a34e76,490c431bf99b5ddeae2d13ecc5d75f08d0033430
21668148d853092dbb56bf5f8160f2eff0c0a1fc,d88aad944eb20e217c1a8d7cd47bd9e7d7e7549a,4e3fc8290a13cfb748416758caf51e840fa060e1
d71f8233735c29084123bcba463b9e955982410c,de51e6a32abe540960354cc1411b7a4f70a00d6d,9a223100d1c5604e4e3be573d93953073051bbc3
5a07867d202654130e326b89c2c6acdf0bce7f8c,d87ba066083c2b7ef48a3ace83745ce65b460632,847ae42cc11fa393a13977cbb810d58b81e60f2f
3a714774ffec45484fce4547c7b2fa72a6ddc789,ef7f2ab5a7aa65dbac4cfd06192faf5594c59b52,326356e8e9000eec4b8c1a24ca3db8515c57f80b
c005544f3dd010457719f39c8f6082172c3e7d61,eb38ba60c4b0efb9b5a6fe99cb7b7825a244062c,39fb7618e4d4e5e088f1381dc1b9e3fb933f6d79
9432af9ec67bd69d61b9e3458f8da00ef1e8bc22,7c01edf8314c9321857c76ec02e6833139c68f85,e09304f67163e4419ecee27440712da5e09e8451
0730e86c9db81917c48711b7f00c1dd503d1ac91,4427392d56d0cc33d961a9af0df1454d9d95e6be,d842d822ff3679bb77dac51e9f147d85a25ef5cf
8e45bb133dda3e4417c9427f1cc2c11739447b38,4664e510e64bd76fa3700d739204e12a72bf5f5e,fecd25bac187d7df0846f58ab719fa2aafede2bd
665b019ef3b1f43c4bef68237a604e2af1487317,da6c0e919b9846586a59ccfb77a698b2093b3b80,e749c81040070d3e8cb0c070e6e63f2f9b54fef4
e219b24aec902218ad27678a06d18359f10889c5,4648f967bdb769a954cdce0cf995a45d9aafdc55,7c443001362afde8da7686d318ff4d96c945394c
79b240ec8165084058d553693e696819c7732f1a,b2f5f6ac7d3527806868807d95621861b3a0247d,e237da95d2b16fe25ef196674215cb341b983188
4b757dd360796cdfd6ee412ddca5e806ef4159ee,671a36c823fcc87d2bd867a644bb50aeac68dcb2,0c939ac6c6e5ec83962f636cec7c98ab93199759
d35a2f53e770df0a1b7a5c5dc07264997e7a4f35,9b2726fe316a385ee349cdec688b79771f252f21,fa384956d60c96d19c3c6ef891f3ce0936b491f6
b2dd980329175ae2c9a308034893c06d6b9592cd,831a46eb2f20a1649fc30fe31bd5eb0a0b8998e6,f85aa24ad0f75a4a32c03ea62503d4cf2901ac2c
a70e4ed9be34661a2ac97994e99899fea47da7e7,553681007535fa3d8397aaa9c296f087808d69c6,fd72ed8c5691877125886042ad5da7e9cd33f9f6
83c9b17ec5aa3644201b414cf72c3166fd2f1930,e20466ffd120ca16ddecada5f822b25f0f206b6c,2bc965ee280146dd77ef7a968776c8759a0f7bc3
5a32b7159e3110c291c8ebeaaa641d3c61bce92a,59ab80bbb06eada221101354f6572aaa6dac8fa9,251ca6b6582660db76aa087a996020bef7bafd5c
32c1f78dc194610895ea173ae48fc2d96192f44e,4340d03ba9284c1388dbbd6bebe9284bb9f5ef4c,924c917276b094964f31f72a3a9cd01d38c7255c
ab3a10eaedf10ff086f89f5e7c940b86a93e130f,55d3d1447cbc07c98dedeff63d44ce1e4364abb6,b9098d8c5fb0762955acee79c0348d375558d44d
d86e726e87e279ea5c73e9c8d04c5f16e509f99a,698e16a12d13e20f468ad022453b708f4bfeeb78,70591f6449a75f084d5ebe630e4597495abe31d6
51035eb0f48892838ab40705676d4cefbb0336db,d1dbbc0a35aca0bcf45bdac1727808f2341b4775,4ac20ba523b5d11826b0f2c5d9e77861d2e63d27
2ef405b3e577461668de1e776cb07aba7ee5342f,0df9da502b666cddf8e5a4a8762202f777b20eec,2679972f3822ad5301d73f20c9da79ad0b27e208
b4b4896f7fc2b0f61a920dbfe3e220d8358a1a6e,4200ebd748aaf9bf82357212f6c2286649298509,a43f1bc1d0fcc3518412feb61019d124ff170f58
7878a7b390e07d0ea5000510a9634181afbed6cb,b0003f71dda8388ad74292edb82ba401296fc106,aaf0bf7e191b8abfe6cbf4540de096d4e5234b7b
aeef060a0ba3bdbad60f1597f66358de1591e03d,0ebb98da7bc60af4daaec6fcf08d6cf7eaee6620,c433b740e445095ee93b3c8cda5eb494755df256
783436f2a12e9860c28c5f5ca2f76182bfcfee29,39ac8a79233b885785148b3f4a2fcc1547dcf599,2b9455e262e7e7f7333180268dac1cb0263b4143
ce134abe46a0a22a91dceee69f6b2996a3959bde,7a19bc012a29b05540b958e90bf387c21c143397,373ebbcf41478383382db9db4b0fee61d649db9a
d91be468dadc5cf2c66efb2596ba4f45d31dc80b,e6d140df80b76227f76f632da148795fb696753f,1f6ac0609e416b083e8e3431263501dd729434fa
09417140dee6b84871b1d193457613b8258aad68,c515d4502644f9aeafd447169e848196a17f9083,263e7e1de1f5b93c9b06ae448faba3e32fcc4f6d
f0b2d4a4cab1f52c8d03cec742da524be80ebd6e,97fde501012bb27041b27a7153b4381a0784552d,c7290bfb78ae1802361d1efd937fbed9d4f4cf82
b5bccf7a77fa90e095eedb24b57b9ef1af768c45,922457e5b58d76a13ff706f9220d9d6350631930,ad50adf5f329454329b5bac372c7b5091c620edf
860a2d01455925f60eb3f14a0289f2d47a22f72d,b5e20033924651f3481c3c223409af31a68e751b,b58469a7bd20259b4e6ecbded940cc3a4593bee7
07a2c6b37e194371572172e72e821163a0266447,e33f720fa5dc519ca19b936aaae9578cec74187c,c74c4ad9ada5fd217f40663fe65820b3136e6c4f
58df41dcf09036df5e244a2781b93f1529c20bd8,5e641960ac0ee1946d419175aa4594d68b0a66fb,98f6c64f826f0cacbd817d84e920c194a33ffcfb
b3a8fd009a8653c759f57549db0926e5b6af0c8c,b67e6ed75e558f7e7fa90b74c0ea7b2130ab3e07,be1fedb2ec90082a6393c6ee2998ea3a8db4ac28
1547f28a4001e3d405294bee87be5c889c87b1de,ef5c0a4ba85c12edfdfcf395c7317c85d34e6d4e,2f3c0bc8bf96ab70c031af16754bbdfff8fef1f0
25e955b6e4d407fbd87c0c743fb6201997643455,b09cdf35a55c30a7b4174868f2145eb4fe54b8d0,1068015c4da99af9466ccf7c4db1d5c8b8bc2780
480200a708885c2d63270a1314808ca0668a65e1,0f2248f923dc1cd790a9588b64d0a2dcffcf3560,21276413ea4f5044fb183efee1b78e303fbc0715
8b816782c3a6a06e4c30b61f89c618fbf384e5ca,859b100da682797de580abc1988b3103751a0a10,4652593a8c13f551efd3313da8616d7ca996d3a8
2cd92ee792e46297dc982a8990638cfcf0244bd1,328e60c15536be8fe559c9bf4b8f3eaea1370f38,e05a618483e8111d531a8f8dbe71988754c5d143
30c06d66c3c30adfee4d061a0902dc79924cd7c0,5aeaf398cd6ca30c3a0ea01fb78632eebc6dbe81,16d8d466919c531acaca0afaf1bab803cbf64c88
db7abc11d679d11bc1dab883a4b21b4c023be2ab,ec3ed04b73a1a8999a5683ad708f92cc823cd33b,36e9e39bcaa5c5175d96b4e7141126b9ec75384c
166a24ae7748c6a5f724325950c7533a25597b1f,f7edf0355ae2f2c1c538c24082048ff5afb5e574,61bf79c0ace37a74fa7ef47ed95577184175f9dd
8c5a48da2bb48162c53380d92d3cc192ee3271da,9792ef566ffa8fd34a18ad56b82176bb9c59c9f2,e0aed719edc7d2c7bcdea2dc35b1d978093d4e63
310069221a259dcc21e1ed90a58193716b8e39c3,e1478e27b3474c802494c2260b82c63b7376c115,04a31f8be27c7136b81319e0f2c3b4fc170bd3b7
36e65b34645b0b06770d401fb047cc5cd169b78e,d3a0a2dddfcbe3d8036e6f3f32e79488af221363,6ba102ee575ca97764117d05c580e30385438b52
1ef148148845ac920b73d8c32d836ca2130a4595,b20f968454f2c803485916fec7d5b4df4d52064d,4b5c6ba3fc0a23b340efae4ac53bccb72c26da92
1a57a65c5fe1a17f8b1d447051ff18559fdefb93,eb5c61281cbbee572ce4fbc0f4ad7adbf678dc78,f0cecf536700060b56eb12c7c8db20ec6e839428
dc5c99be6db706536ef07f18a4d06da831b6e2f5,cafaa9f5b805627f3ccd22ae9fd5202625152f8d,6314d69c400ff08dfe231a1a67e85e9185e2e819
547fa426c7f399f60cc70a06c7f4d1449c6a9634,754c40cdb0175f35f8e1b61472c14d424188918d,0785652b55ab72528d0514b2cf569be75fe641a0
a74a4aca030af59d0e76d8b0455916bbc1917e99,065ddfd8d434ff901b14c71b1ba5eaf095473a3b,f65994ddcb5ebe7e5d9122477ea2cd1e6cfc2cb8
f8f54dcbcfa27eafd4fa8593601c692e1bb1a13e,548e91f104a22e37552632fcfb43a612e50fe18b,c07da2a6546c72cda73c151a064e7508c47a63a6
84a852bc1368345c77cd1804aa60a630af3a27fc,b1151ef4ead1548855dbbcdb65bbd2c5c1250e40,425ef662cc54e3293ef63bab37cdff44b29a23a6
62236ec2bb058143ae3465884cb20f0856482f76,43538416e37d26d8bea7b2fb2bada8c52b24b236,b611c0011d4b874fa5cabb48799ac4a879d66e62
1a65b058b3845a129bd6c35a047e94218b5a0f0a,6c4d218b8d1c00cec55f889ab5fab9639a8159fe,b0852b70c613024ba1558036b3fc50fa8012fe04
bd1da8ffb7240bee2f5ab4055c94dffc48c30290,da65fc54a62b73a8f937fdb1036d2cc736982fbd,9bc294a5ed2ba951f6cc331ec28932c76355a44c
21e13f0c2c71f896dabfb3190144e10146e281eb,d6825a35612f7df856097fc778a74d3cbd88a729,4cae231a521302a6356875b1d2268323067a321d
f672d4cccf83d80351f5353a80270b55b6d74eb4,bbecb015c9c841c77d38d8499d26f4fa6a2a27b1,cc81e56eb22b94c0525dcd745aacc42b7f04ae55
835375e7e06ad42a02640b6a48a1bcc86c4e39bb,23875bd8c47e3cfcd9fc287781c9ff95870c7fbd,7afde9fe77b9f63131f5bc9ddfe1eec55416031d
eba0624535cc504fcaf367055cd3adeab56097a4,51b9f31f7cecef028afa71252926888ca9ea42b7,dc0e6f4aa83c8ee516b6b27104947a23fc834f48
927020d981031267e392273cf672c1bca8b5f6fd,e7b6a08eae73effb64efa5cae6025a72d01d7026,67ea121250f8d89f5d26c26088554cf4c9ca4e6a
32a19eb5b358499282ab50300ebee96114a613ac,f579f6dba5525abfbe88101f52bdf676d5b3a32c,f971398f4700e3847a500805ade5b34e4027882d
48fe8e6208ac91446b65d3a4260413eeccf7cc90,5e7bc906e5b4ca4e4ea05ea8add74e756de40ab8,ee5903fe3e57b68e4ceb3462eab02b31eb0d1fb7
9849de984bb974c4e253f134410fe5b52c28e1fd,d79db82ca2ebdf6a89396c6f73efb39f566ed83b,317b01db6528a6e0e2cff27caca9688a4ddc9373
9d85249ee5454a2dfa037edfab9e9ea29fa135e1,6008dba0f71e1e690c10751794dd442136996143,d2926867d688aec3b5fba8df1dfc09e64610bc3c
5646d14a3c5b7161d4d1c47f45d3ec2f2a8fc854,4e1c9aa1dffeb368e82d0376eeadc3c7e7630956,f372eb8a33e269d3ebb857703c4861bc7e62a1ab
4faba3dd5d7b2c49c80422a117d9e87c5fdc9162,992532d5657f135fb597b6e164fcf39186a8296b,5cf2fac78cfccd72dd2ed6f6dbcf480edc680f46
105382b8a17691d31c3991ec127fb2ac391e305a,fb04659eb956e92b7f0d722c3f3c4403c4cc99df,6f526e83a4d83f9a4158863a156ef06b5428e5bb
95993ea7a4949af99f8987912788dffe382ea957,5ffdfdd04ff1a060e5ace0958c39d61ab5ffe1b3,b49d2f689f23e5e04d8d963cec7569799821830b
0c00e3ae132268798ad2574b38b71f50b1b7c4f4,2ec7817ad4c6f72be0ce69af53ad43ce890ee98a,c8cb48ed7393e5b4b794c9052db34d6478320eab
7d0ef337668af544e9712b025c75beed6f28e29d,4aaf65e9f849a8771046f8e2cdc68de851e4422e,0610d691b6ba50c6596ddaa3906503bda2771b5f
08b7d2ffdb662073c748512c3b5a60bc33d42119,5462dd388ba79274fc7f0dcd1bf9018966842487,4ee4e9ae1edc970498641c1bd864fa58f968de23
ff9aa15143dc4520453a4f35c4aeaff57776f01e,0dea63ab081bfc42541d6513f1f11bc25a126fb5,51249b103a8296dc7429981647bfbffc5ee52f4a
cca0c2e11132805adabe526c4e7dc91d0968c31e,b1f122ffadcc952a67cfd4de2afc72c99e080722,9bcb1b6f2104572fdd1a49dd08b3a729562c79df
de46b06f27cbd94134c533cd2e8016d340fda765,ee3fb5544246a4f3f5f1cada28f38798ffea5440,cd1251bf00fd0a3891feb0611bb4427fbbfcc8ed
37b3a88fa0b455b8e3084b66bb395f3f6510b873,d659ca7427cc2bc71fb26275b6a2e5d2fca54c5a,d47fa4cf1b94f0e7dfb8e826db552ac2bed57c65
470e3b94489c95b9ed86fe299771e50d801c62ea,e1509e1c6d287b826ff8968650bcb514cc4730c9,9d55e3aa0ed0711c8695927b1469565437319de5
d8682f36b99b3da55df517bd99eb75855d85b999,67df8802b1c513faad634e90893c690477f612e2,290c597878560282b24831336bfe41b31a464ab0
ca8bed443fdb37492837382e1415f866c8bd88e9,6548dd02119e46570611e64d5b9038d405a00fd6,f6353540426267c8a192124da5fa5fe83a8d7724
8a836ccafcee73fbb0cfc57e4c7b6674d93fc398,0b0033f53c759ac7c03578873bb8cb1848d8570d,1d72eeb2cfb4c82188138ec3b703b09937c2bc9e
5745635a713dda23ed3761de15d076d18c6143f2,1a5ca1e4bbf3022a549420a8bdf0d67ac0f52c05,a70129f39436ccf9fec1780aca4802ef0ef8a74a
b274091fe8d50ff6d490cff92b82f43b06f77bef,45d8ffe13dcb4dc2eb46e8977e145406641d8322,53cbfe3f85f70d0f8225d1e6432b08504e9e4645
d53ea44fe42c328070b800cb51b0ea1b754357d4,a06068b4f175a724b45b2322c7d92b947605e526,4c7d6b11607cf86e541347e5bccc5ab29c56074b
e3e1285c5d450a34766320e32a0b6387126503f8,095ff0d96a57d3d49a984d6a20f6c0024a36fd4a,6724e3dec8f871c0b718391e6c28a868d876e9f9
5c5d590abbca26edf633815ba771301517ea1cbd,f9fbbd4a88b447e5da34e624a8b0e07e0bc38571,71cc17d60d592700030b7d56624c205ac3720538
6870e68f4e9320f9b1775206e1c1183db646ad04,98563dd06904e1fdf03a0efab4ce75107e4e09f1,98d8830eb79bbc3d67ea9fc3a852e6088d014502
18f2553e8e9440a7bc95bfb1dcaf272fa7095f90,5f215e812667de34f93c9170941eb396cc4b6a0f,aa516f34d06cfbcb0ef0213e73f698c7f9589dc7
0cb047230fd1dca6846c910d5a2b94a4822384b5,833c668e29b7f3207eb1d2f94fa8ea80cde73b2e,4a81f13709943f3959be282269e9a8f01c491046
f3311d95767f33d017f44ed67535697a02edadbd,6608fe63414fe51c057dde1beaada8584a1d28fd,7a4dbdc5aa5c26e363545ceefec120c986de73f2
90685b3b5de1f481a9b0338d14f5fc3d967b260e,b6a686930a1df8012aaeec7cb2fd84d9bfbf9219,b790ea1a861860f58e431787fd36dc1e008f470d
e8b60753118217ddb880db1f931ffe4c6f30b1c5,37cd24f65aec7b436c306c60adc81efe7c1a950a,63e26059288ba398064d7ebba0d9c3243841fb9b
32b217bcd7e9940a4fcbdfe244e4f7cb9ade4c96,d030c85f12be754349ef74282fb9a7ab597fa41d,994ebf55ecc59d97605335edf443868b8ce4c3ae
5381fb2a4f3f6af3daecfe95a1e130844854c8cf,5d72473ca10fb30d4eae79087a9f6c2cfefdb4a1,41be042a28b88bb2e765586dd1fb5e0e5c082ba6
cae21c4410a8db8e89446a57291f998626e574cf,2c1fa9e94f8bee6aafac56c0964004cb3f9ee864,548a07c0dab9d6d1ed9139260b88007f2e1b83df
a86f4728a91793cb6116e13bb270c42b30caa59c,04af66679532741d82157d80c16afa84b3506f25,7fac24bfe5a8fcc9ca571849514a04ff8079201b
b96bd62d6cefe06baf877f35c8628c654855d9eb,1c9dc63e3b495104e6134e19306b98b5937928f9,acc3219aad24f298c8e930fb315d9c893790168c
e6114a573d60a14fadde963c9455387b74d4bdd6,d87edcd4be5681177f219d581edec148432e6843,89d98d9bf1a1e0268d68c3cd436c53e30b4cbd2f
9844fa09490e23a221affbb81cabccc445918af8,e1b6a8f192948f34a704cee421dd9086bd6ddd31,38fd88f0017894f9b69f10a384063938ac704ef0
285ba1cc6f344d9c86301aeccdc18ab77d31a2fd,dbf18e9d294c554ff07b2a2ab074533ae2dcfe02,0e30f6c97c02479a12faaa327c2fe476ca219b41
ea76a1f5e0807d7a3c06ecd300397651bbe45eaa,9bff60e270524d662bc80745ef2b916aee91678d,6b0942166c48136c759c66d8570daad296f2f45c
7b2b51e6f36b8a9d7074266c2dd1d894e6834b00,ed1893bd8fec07f964e2339ec6ab9255b0227ae2,1f035adf9f63f3b63bf5f6f495b59d39bf7fc36c
3efd82b68510341dbc53270a793069689b1ac152,e5a64ee5216b24aa1a58466e72c9400a41c489eb,a6af56cc0d15edf8464a0b07943fa1aff775a0a1
84a415897956e4787e6c71b7e555a92e8a193ed3,0420b033390aa01745306fb25f2b804f2f52c4fd,0167471b9142f35903f201f11a62db7f757f24c7
cc60175e6732c84406a9ce8fa26c1a9100b27edd,e706df5cec6a39b3c22e5499ffa11527c0fa9fa2,d12e8ddd506052db3c04cbc5074ca7f3b3dd4f2e
075985568b46759df3cf96ec6cd08f52037bedf9,2e6d9cc2ec86194f19d520e2899ea4197a44b4d3,edae43588c523da042ad915e06953b48366da47d
9cbd77b05960f368ddcaf5e487a113ef8a61646a,694a360d4cb892ca4c5fd1009994e0c8d0ef8960,9af8d099febb6e14bdca626f0d1283d27b5aecb0
d1242ad4e7a612b2bd90f24c04ca3f7dd8a2f807,0af3f2a903aafdf301d67835b15f7177b3543ee1,d67f878722b78f4d78ac123e351bc74a20a24940
0b176e43f7a7b881f8957c27be9c1d71c58fb2d5,0b84ccd55546d56e7ce0e67ff0928423acab34f1,bfab984080e734cbf53bdd2bf83c0cbf8b430d38
329442eb27675becfad560fec496b72c989ea042,9e54493696ed8f735a774c1b183b4f689d06fbd8,b2a010de7fd9817c7d8149920260c9d1ec04b185
41c42af1586a1548bb6f5ff0ccb9037e7ff67980,f061541bad8a21e3e119505bd1a8ec71200f783a,41fa38d2173523460111fe528b745f1b80defbd1
54f71270484d103ddba65cd7613f1efc724a4b1e,23217f4ac9df2a8a6d2ed0a496cf1294c8a115c7,79eee75aa0aafa7a7cc51f1a79ed236aa44033ea
f3a443f99e78c74cb3606e03534282b7dc1ffea1,0f337a9a2ca958d9d5587c33ececc77302d8935f,f1301a14e172383a02c6a061976de6bbb67ab915
8de37f69b9b205ceab0777338189aa37b1500fc6,b0b60431ad2a06162e25ad380f600dc9d74bf2cd,f6ef9f2aa365331d1c9b44f2ee02dd769a389da2
69611bba2da4834fb190bf1b9fb36cf17f02a086,6a82ca8a1e431a1358f12c08b60ae211a6d13ffc,820f0b290703e98d723f89fae25d4b3d56fc49cc
21fe99bfccf56bdb4c765b5d0dd5c4629c9eca92,1fa7d4f92ad5d55483c3ab609279783ab6e16431,e1d6a355b532f0a7ff613a3aa1554342ebb20068
0fed8ffe7cbc6e254c33d1841b51b3627349056e,4f1f0d93a5022b0f9365f0c1891d5c3d2c3fb376,2b837452110ee09961ea737c0a7050fb88f18503
0d2297c9ca511d68e4fd0a1dc25941ce0aefc1c3,f71871e60d248f1127e033061d6470d4fac3f6b2,1f12737bebcd13ecc1aa3531d1aae1bdabe22950
436c3049b90197acb537a2233771bc1518fd7a37,a45253c7acbe22cbf2ed3f7c43637527623b2a8d,688e20f7a5306b29e78971cdbe1ae77d964ca191
1d5a31ed4187c9c88b0441f28ce1573b1b454862,e059f7829b4f7ff19aa2d4f7b375d865a549225c,e0daa4fe846cbf0bb7c0a825db0e14dec64ab41b
6a259624da012c2e8d82dbd135f4661ca60a9c14,a5b79cc7d7b8894a20f6aa612b418af4a482fa3a,6ed0a74f54327e07f33e66ddcc4fb5eb8d808dd8
e9026b2a1c027eb84fcf708d9d2aa9808409965e,a291347d98d47e317d6ebabbad1d2a99a964e28c,c75982a639166ff56c8f117cc0752cd737a59cbf
c4c71d362c2d4b12f15206af9dd4496558f706f1,8030e218e1dae0f2707f76ec9d3af7aab7e4a9a3,ed65f26e98ddb3e358a0b361f02e50eb8b907214
0bbd64b9dedfc12013248feaa8179452b4415d59,63c4bc29baffd173c2322fe7ea6c2e35f91ff53d,916810db415fd9e4b7546c91c0a76492f3934562
f9608e850692595aa8393cb5d684f681081ee618,c21beefbb2a1a26f84bb1776829bd4cfd3d6e58c,8c3758f976b720e56fa03fad4a65207d1bc2eedd
7ce80bac7d99d795dca56d27ef2833d171a5e5dc,26a547a11abe2dc30ffcae6d3a60a4e06b3ce649,b079f27ecc4910c18da4e8ecb6eb402d616bfae9
97bf2a5beb86eae46a84334a533ec1450303c22c,46999f1f68dda09365050bd55a663c8bc4d90d44,9301931bcc9c2f1c2f5f6ae116ea5ca6b2d78cf0
8797966db30c975cc81b6673baaff62bb40694d8,d7da4c90a0574dd9e87b131a56780787fb4c3a66,f96357e27babf617ca7e55270b28c0b7239c2ed7
1961de4ce0a3ad344e6b72aceae2719ac5f8f748,61be1e67205725559f394d8921c0b014a4239a9f,adc93a26d5db06ff033768f8b9a88e5fa49aee0f
43e88d28416201707d4705fc86053dcfbc707c09,cb019e175744db493ace616177b9a418c39e6981,78a870548c9ad778a32703ef446a80eb9eeb10fe
562410b89b67e8683d96e0375ee07e06a73a81d6,19acce7c8ac271167530edc41067ce1bfc9247de,956db59bc21a423d462a38c0a8398ebd1a5f3f5d
96e2242e289086e2164e5bf812e451a78776deda,6eb2be4bb7416a36b7ab6fef2ab646a49d5dabfc,07bcb62d5e3589d1bc026d1d324d2fd307e128d5
cafe1e33916a15e44f751aa7a6c72d7a22453414,0e28d9a85ee18c1ed14e3bfeee65995b0a30898c,a4499f5a0b21900d175f94c5b24cd616b731eefa
682a643766127fdf2ce8011a66be25bf07a19244,17bb41f2ea3a2aee5df2562063b58f276e5bd13f,6debe5591a8c4303e8c39f19cfcec0258ee845c2
0a3b8df711858debf9e43e1469618e85156aeddf,ca1511b83c836da5e1285ce812f254ea1a0a3a7f,ccbebd6463ceb5933802a48cf411bb86794ca219
d29cc470f6f3c1a9cb05608279c55e62b242e2ab,2e4e6f5b4e45510e3942052a9d77c8a86fa5fceb,743289359b570da1f6101411d7b48e99126758f7
b32912d16de8c0bae711f2e4949a946194be81ae,8977b49bb0a03625927a84ea6d08dc4a1b315ee2,bcef50a51a8b3c58c618674fb2947981f35df50d
2acf7bd1b83364ae89e8f14813303b6eb94fcd9f,b225ba27781e00738f46adeabaa7c948096fd32d,5c9a86794da0cac9ff1ee47b02c7628accba7a89
c4d4beec8dd2f0b9080439859d2490554e83c179,1a52b14a70e115ae9caf4bcc9cd48d61f80eba8f,466f50d173335ea5f0b524ff1f033227e2c5255a
f01bf2e0049084198f670ebae0f784b363c67aef,c933b20c29d25a4ea9b2b0a930aa92242db98501,51c5bb8bdbdbc6ec7587b6bcd7dc8142d2fd98ed
7cdcf039102a65e0b045029016ee77e132fd8942,0b01378398030ec72a05d6d4b6ab71b9f2d2fd23,0a088a319ba7d8d9827b0797b629d727ae8954f3
af970e5be23b90334b1c81335e1cfd603706643d,7b5b41642dd44b6c6d3e7c3cab84aeecab1eb5df,6f223a163459b8d9e5b3a227cdd0d088efe4e83a
714d421ad3a6ce0150e7ef1d01b7805c0ae5df39,b7f23d3a7eb4d18bb5784a5dd30d558f376242a6,dbf7ba4721f8336139e84a99c74b89025edc55c3
5414a589b8125f8ce0720bfcc8f70aa13a8becb3,02d82debaf04d6fd897381b7c3f7a5ade66dc013,54b4c114cb1dd08ab86fe6d6cf9c5f208224179d
e0064ab03f867b2598a441e8e6a295433f908ef2,30c1d10a91da04fcfd68d839052213dac5bea91f,d7f38784b27482d6ed8a137a249c2dde7cb02089
15d6f3808f41c4c83be6e2b8c56f15c5c8a8fa3b,b0879f9abb3df6562644b18cf758a402a552c7fb,0c79db7ee643fe80026b114ac297df443c829720
425b12b1368c93b63170a93624cf0891758d2c02,f1cbc8b4005f2cfd6c83552599e4064a93ff9f49,263ea6f463148053b1b20491cba94649a8f6c0dc
79a74064088f3f3bae71df203ff2697ee7de1b2b,74367b930cc9c3d103770a9ae5d04bedaca26813,30c1523d91af9e6f355a887ed476d4c919762bea
621ca7d416a5e221260d10f39a9cfb8a1f04f832,e91acbc569fe463a28e5be9fbcc57d9ffe690e54,5ba5e4fb4e22824372ef3e61d79bb18aafff4d59
b1343eca01212c5e2bd227587a4a173698d51f9f,8470ed075de657428919e85417ed11980bdc7e5d,4801ddaf0a68852a9b59eeab34224a8aaec87bbe
4d07da193fdb2601de32e9b42a096a0638efab94,3818722b232817d24cc013b64da9b25d4bb312e3,30adda92214ac984d22e908ac3719f189f38e8f4
a6ef71473a20edb204e6e1f91ce735257ee813bb,fe1f3041acccbfa7d579a914899fd2ebcba04102,a067283bcebc6815d9723aa7e52c4fbfb2cbb734
6a934513eaf3660d2476c0aaa0a9b8ef5270835c,f5bf774d358de32514592eca609839e58d2693fa,5be2acb757d337075a72f6d1d60e8b5314b74659
a9b5a7df2d73869479ec5dd20f40defb080132c4,c19dcab3f57c8eacd929f9b7d60960aca51ddb89,1ceaa02f416697dfc369ba245e9875fd6086a7b5
66db4dfe9427b0a9a63ffdfecae77a720aa700a9,29bae9fb3c4931f9bdf77abda736568f4ec9266c,b2509e2f44989fdcabc25a6fa3a44de9bafef118
d766dbca4e13dbd9c55abb2253718b7189208ffc,d78ca793b72df14271ff7eb37c6a59bb27b11cd9,34855a61d3847439c2564c5d1fe1d182c1a2c5e5
18492a41794a3062c76bdb9fd0b5d0f16a96641e,cfcba5038565af140d5b1d4ad45db9a78904e273,444b7254449b307e1129ba5d8527eb7dc850ff02
3cbd937a8d40e5ce27ee4f79e969c1a7be00e202,5ce613e4dd71602e09c9e8f95403a66e745710ed,2f36ba10f5c0a1a17c444bfd40ce5c64bbda2e99
8531a81aab8049481ec4d77939b0e90284ea003a,b4d04891480b29aca310ba2ab7b2ace3c0e3345d,f60a88a38dbac9effe54bcf2f9fd105fb6f1c64a
5e44cfa4865111e4d802fbc2e22f1b0556c1d7eb,cbb3225e6af004eca0e9b4cb504183e58dc9e32e,8c8180d3716f930dc8ed5f669e9010c7f5bdd5b2
c68a8b77c4b9aff8b5a344a25c50a1a4eb830dd6,03e21a8ca4b813c114a4f4404694c53ffb642140,5d058a189ad8df6eb0d54ff561a04cb85309a449
4ad6636f0565c1484b8e27b53a26c870dbbdd5eb,12bfa69736f5990d46b7c056171e3e77aa115f66,3762a704238d0923c4d5bd2ebcb32a286b22e3a9
3299b73099f428c975eb130104c7c690475f72d2,ce8a4b2fc0d389fff326c6cd6037339801fa5619,744c7c8d28a06497137d31d42e93d35b7d2fd1ad
e68ab1a7b272f8fff954c23c310f209fe7ac3e87,94141934bce5329435fde57308d53a9e5194f11c,2995772a029602afd1b5afeb0818d72166c90281
da58058722f844d802afe0e469da52f87f64a8ae,a3ae828b657d08c5f832796d81b22663c91ba2a3,ba6a170292c5f3d36cdfa499876ccb97d6c4d1de
eb4ece98b5bce439d8a0a3ec156a1f7b31803ed7,97560f909c5e598c1622c102c13e844146698a8b,0d4474e11c4af26dbb3e8070560fa1f09a38d018
d6ff2d6eb37eae0da1e9f56c79fd32f9bdb5a378,d6d1db2bfb32aeeec7895b6eecb7773de09089ed,4a1af9eb6946920b2b8aa8d44e460e4d8883b910
1c9d59510c00ba88f1c59389aa4d23cf2ee103f3,03eb9d0c0ac89969bab0b57e803e5ae6fc3a097a,aeb3ea06d49d0051a0932dd0dae542d9a8712c54
915d7a325394f0de7a89a9c0908112f808c6631f,b64c6c4c5e10621069294d461e60de60cc9c7de0,0ecd8cf37eebfbcfdb5143b81e0b5d2c5f185558
ec2528d868f56d8ca3258dac08e59c9b5e133c6c,836a08bfe1ebab81a33a54908d49bd7e236a658c,0f9dfa29ac686c36337afd2372311b6077776f08
4bf58bb2d0ff8c2461f9576b633dd52dd3f92ab8,c2b8089bf4d890729f7d9e6c8d9330a92324e79b,97bfcb8bf2c79831ac8bc616c157e156726ce860
843cc4b7966b612f7649c5a25c7b6a1d51354f7c,fb506b5c02a5eb6b40a7ee28c5d6c5e077bc9140,e255eda4f5891e6fc305427208e70018f171180f
659d94ed3f830050e449b77618b00888e83499aa,ab6a6416c4829fbf205b889377e074b5f9fbc4eb,e23c96dae2335d363926f116001be92fac44e45f
d2f11d1d2e94fa39f6675b10d2348e950425e540,9d8624b6b5eb45939d52c3dc7cf88d74ee224fb8,e0cdb3743511994b97b5d3769050032717ce45d1
f3aa0e27a48c39ad5a912e332ba7e972690fcdd6,32eb50d64d288e13747da602013ef7d80dd129aa,a502921481bc6186b79662cbc21401590978d9fd
197818631a83167df347979eaa01a64efd1c33ab,4be5e6933adbf5e758978cfa934ea5106ad6d852,4697a21761ff7af670abb6e2102689d6adbbf242
b0174d2cae859b1f599595ab9abc56179ccdaa41,ce61e52266180faf9cec3d8497f5ee25ba0478b3,1ecf9a6ef9b70dd0ee38f8165087a662ca46f03b
e833e5b7c6c8aa860915169158ce989a0c3dd119,67dbb5ad94cd900a4e8e0e8f185e95025c008c70,9c2a042eb80df402d3f343ff1fa467e22b38b5b7
333dede76d45f9479725d10de86cd9c9819bc488,b08c41c42718a14470644e12e3d4e1d3f42b7821,b79fab32661f06caee3e11154ead1d6ceab57b00
3258cf1bba05ca3d641d58a8627121104fe1e43b,975e5d04981bf090971ff5c8bddae29cfa1889d7,17f0bc1ae18b5dc17525fced7263078f38e5e6d8
54ad4b25c61d9cdb8b61b447495ba330316ed94c,30c631b6fad1b1dbcc4840afc1f20c3bcc2cf4a3,9d6b66c9e4d5b63eefbf7447653ce9e6478c8958
5bf33deb9d6e7a8105c98a6e5ddd4fe80611c02a,f7886ef2a8e68e7c881ecbd4caa80a75a2ace59b,947c30e9f10ca6aac25e25a1fe2c5286a1135714
738f0a8c839f8a8fff1a69f33ef27963796c3402,7dd98c4c5bc105ee0c1e42baa48a5d93e8112aec,701904fe85297673699f35014d1cbbaca113e9bf
9ed80546cffebf75be9f8e267eba434301c0b052,7c09be1b5c3cdb33069312259500ce50148341fd,8198d88c142ce719f462ad6c732efe303d5a2980
0932e34a71c9ccb5a38a3ec2b9546ed9e2b5b68b,4bb876ed989bb27a5488242915a7f26e5f041daa,56f53ed323d9b8d3ad8bd757ff8216e411b3a95f
fdd8a0537ad58569d073fcb6ec5d649a4519a35f,a73dda69b40c711783b9af46109c5f1a7072ff60,4832338c532c0924315e7d09283eba043566d93c
a35946a635a9a696846646af3b1e3ac02dba4bd3,af2846286502a30fde4e0a22c773ebcd17b7f2bb,fb577a9175032d9c111324b4e890789b7a786943
6cd4fa85b5c73b53e8fa7bbd108abbe30f075692,d0ad23f0ba036df5417506728f1cce50bb5be87f,2aeddc8041f494f0961f6f68517aa39b60699755
876d486e596f1d7f2b45461fd77c347f8982407f,b68203a4aef5aa6f4ea8842cafff25f2135a0994,817418ef1d89e54244614684c14a6b610d514e64
c611adf3d8ed51d4a10b4cbc227232b16d12105b,6a0993de33101bc2384ced2d046514d8ed266d32,8cd0f2bbf8175cfe967cdbe7fd4ac1567f050fa1
582cab6342fec04fa639c2621944b6b8664e02c5,c44c572d02398c52cb6e0242ca6c85f92d5db4cf,4611060e994d541eaf62d2248da99be8662af21c
76099bf30e3b693953af2fb11445f386589fb554,923bddabc8fe1031687b1049b2e39a9f4ad928f7,c8da8b6df400759d7e928d7a50bcaadf2d80ddec
1f8a8dd1602b5ce6ba07fad09d2e6813a4cb3920,6c8e6e2d2acda2bddb8d3c7edd5a63efa5afcb74,9031eb890bf450f9d46929d2d29418295d47208d
a6c86b9d1c706f6d40797c1104736df83fdb45c9,16e24b9ca17a2eaef91c9a074bffad88d846b1d7,5bf217ed536638b5d85d3a2377dcdbcf65fa6c4e
c53e775a0903b9ddc5d65e271eb86d094a051923,0ebe023534e0b830ef59cac58e9b78a6c40afcbe,2a63c7474b53286b72af858282f61c2bc2fa6f9b
91eb56bdfaffb170be11e51f6f72566551141cc9,dd5c25c2bc5377e605b12bd0daf5739eaa371637,b66b156963018f333d755642b7e234224b846e0c
fbd36fe22ef5385116ea09125582bd48c5500432,e552cb81363b3d2e3965c835318e2eb42a98eb73,a618b486d39f3e7b6db8072b51e2e1ca38e5d15c
d53e4030afff7b1a88f1d9e9f3b5e9545076b2c7,98ab19b6eb05e5ead38e54555f944aa0a26bd5c6,2c1ff71e8c0bd2d4ceb05dd5759c46188ebf9dc3
cb4594a1554abd06c6beece8bc1fcd33483d4c1a,789b3614828cfca36125fb7810db43813b96332a,ada0fdf9b375e124b72a2b8cddde447ebe451d52
49c9a1f3230f095cdbe3d88687367bf927389711,4d3f31e168fcf405a1d250e7e28e99b2f373e9b6,ea587ca3ae7810ddbbeb0c06c2989a59c295302c
602bea2a1d1b44e1732207b51cf9754eb2ef1b7f,be04dc238b28e97a8e9d5b1d7a92010c1533bd0f,7edc3bf168bef3b1b590661e9d11467b00b39969
edb3b426aea697596c883b168a5f1a5c0cafedb0,e6b71444729a0a31c375a7b71de41deb65bcc36b,b85b81303dc9968b394496670ad47034ec698c7f
0901f4464b62dc4b9a8395a449abd79229a23af8,5408f4eee64074ec9810a9b8c674370e25d02f5e,03c8ec49ede8833d7e274ab2b3650344ecabfbe0
381e15ff5b2cfa7adbfe0eb5028175e3b2085821,bbc025e3b9c7daa46dceafb5e4d1a2a62f0e9e60,335431fec4b3fc1e64e3d9e1e3e86ca54c7e36ab
ca0f47187e0085a3037c1201409b3cb573d130ac,7348f674ce672f24673bb13ac18452a346b52139,44d614e4be082ea8d060068bc53e6531face79a3
4d975d8a5f65ad009059704de7aa2f5de82a03bc,18f5d5cbf4f04c28ec86467508a09322db404aa6,8b8fa4d3495212afe8c2e82c89a7f36021cec147
980c128724d7239cd40834eae34aa86b9bf24ad7,d0d9a8427a94688624e5b041027d566c34b4c4b2,d57974dde70a9ce1b4555ba20b4bf568fb426450
6737714ca459924d240974160ad8631c45e2d705,972639ee394c9d2f9420db59f56fd1b6ba23aee4,229e50cf057858087d1f5cc5de5c5297ad406f8e
b7d1cba97f3a976f746ebb52736960d155a95fe6,706598dfcd6961cf184816c4f5fd564194159693,d089f213b4838789ee1646c732b7dd14e04e309f
6fe10aafff86e1703bf1ad6ae73912c8bd4b4461,80d35085aed7253f15b5444fa72487d98bb20227,60e27781edc15bfaae690cac9789f3e800640f29
af595389a602100f0b017e638bb8e7e60485d6d3,211db1d6727930170a26045c2b90d34fb8b975d6,0fb946f7d924dfe125b1ba4865534c37258db6e5
e8d90a3042f57403cfb1610cf4aa12461f9b5c34,60ae7aeeb554565d34d350ed75a1bbc931b7e77b,82504a26ddcb45ebb2ec8d5f69abf06b2bf7136f
6b1f77c267ce6ea8dac35fdc01736b29c4d1deba,9170ee0ad3e25dc0356312d5362512dbe280ca79,fc7704a9926dc718681c7d3d3cf6987ebf71fe48
c1493ac46c70318e4c020be278cd6440e83e5d50,e74303e3f9b888813ae55cde8bb4d9ff19fde057,d131af15729fb06ff9852a309ff2888f44cf10f6
35ebd43d395ea214e9f3101394e93b131c23db98,5a2a7deffb5aea041114c3c7e660ec64625df106,35604b0926e836450c921e8140d75058d23a581c
3d580691991f8970f57a808ca1a65f754212fd22,831f00321025aab5387b3f5552d429c4abbd7fdf,dba413d9ac6653335f69a076f1b6aa4da7f10396
635c4c761cc22a6231637679512d99d0ad651693,bdb427b08454cff85dca2fbaccf7249716962845,4ce8bf22b86a63bc8386f421c3b54b6430d06807
ab8097c06307d2df5a98b35a10bee94f764abc38,b6be686f7fcd0039593730a12dbdb453b86c4949,40e226f137d59945b733d399dcb3aec42d934a51
ef02056859b90020adfedffd1f5098719ff67709,28230592cc659ae7a787a928cf6a6ca7c6bb4f76,6082b1b2f727ca18121640017022cf8f1d363224
bc2af0d6d6a5a0304937bbde98edbd41b06ace6c,16a9651046d485ed998db65ba501aacd4dcd1561,21e28e6095f7f90504f47b9daed885579e3a4e8b
51f3548dc282a8856a54b53255216417631e981f,f9a36d68b0a823dee0490d8f052bf58891e7169a,9d0e1bdcfd17bfe244460ed92d0d9cab4d6d0223
aa8050f30ce7a23f8881de844c07c0f17033409e,f83b04bd8ce65be4fe060f89679c3040ed0c7199,a149686c1c0233d1f8cf3dbf488791b315e07cee
ec8e9de18142a49485452c9abd13158d408877bd,b3afae567b3d321d6ceaad5d543a9097fe0e1890,cdec9590e15174576ae13885158c73add1905ea3
2eaba50b82271998b81b1debe9233c7484869f5b,7ead401881dc584693b1ca1b86ffe7b380378d47,260a89e584099ab624964f948482984084850767
d53f2b4acf86cd05c49380a1f4189e733c93f7e6,e531e4c302150045d867997f2a9b786ef71f9f54,934fea03397fc6c57bea208934275e966e9ac1a9
cfa7f5f77a79f0355b05d639732cb4bb995f8355,8737c028337b241f11e11c4c96d588a718d8e2ea,31446a8fb371c63f9df39094dcfaacab3ab38578
28119a61ca4e1a7d618115eb1cc4422f6ccd2083,349f9ccc14243492ce0d832bac5231d53a52c114,35d9f304b187620e49f6e3af08002a9416cc49be
4ce0b7932a6650cc0cacf218f69cd32c9d0bf756,7f5ff469c6bca408f82706abe621e3b00f36d4f2,cd70bf6444a7f9c75e4952677878b42af1b30752
58d2420c1ea5d26dc0532697e9e0bc5a42aafb45,d411be8ad96c8c7fc9b822a4b041fad62305edd4,d2d7b6d0458ad417722f3af642711166ae5585d0
4e3e213652ca07ad7581b0ca4d5d200e147683b3,a35fe4698b65ca0be8f2b5f9113b5394d830d556,7d79b285b04802e5b914e9b64f7c7b8c272158e6
eec2e10bcf82043c2f7a06da2dabb6ec1409702b,b6062322110791aca2b86f75c694fdf51c782bf7,9ae7eba2478f96b9a999276eb64bd378f96ff281
9d2bacabacff10ba719853ec570142a8950a8ef1,68781abf2d98221d0f7ff3d42a235104324737fc,c2fd1c35249b091d8d32491b21813c7d472e8d81
938ff0e7907a4d0356c964d0fe46f22e0104a89a,c3a6d1ef72dcc3f56348761bc1f145f17de15dc0,29a3773a69f72fcb35ae06d498c6e9e635f69d0f
df32b4c0cd4780f434d72a6bdd89334f238da054,4afa4f43cd9ee458e7079a2df722c31f5ee46696,a5cfd52cabf635484d17f953e4155b466e4d6286
afb01acf78abdf25be91600cbcfd799d0b0cdaa7,64d604d34922713ccef6745f7b5d5c431d1569c9,ccc3decde33e43ba9cf392c8ffaaaedd1ade38a4
060425cab6117ead6b9f1f3d293314a4b4b016ec,25da45f6661a314a55e35927d658ec9158033bf9,41483b26915c6a4454b2b48a01caf92d35a96eff
a7d755d6f2c64daaec0a0b7b619498f1662ce29e,d735a2a9ec7680c2c3c49452e2fe20baa48f9e38,8896307f1544174cf808cfc1899262fd25b57776
8af23fd95b538407639a55316a42c2c84cddf530,c17b3e43caec0bfe53e54c632e541cb2d4186468,b3cc7f7ac2e97d699823dc3efb112b3be58644db
a2c89e47f8b538909316deba0ec0f6135d775750,82c794ebce4aae1866d6da42cc8508934da3f471,192a4474b6d2bdee94b1a2de4c10884b343b7d6b
2bd50d370e8a8833095d5d3560800d4cfa8f93f1,4fd3922aa4699491d1f70c3a4a9f2ea9aed05c70,6677b2ffcd6e67e70c1f7a9db24f121bf8771887
f5cec4db7697f7ebd16ef30f80218e5f86186213,dd36542f63e6303a92042d8e14a0b9f7e7ea0d10,20e52d20ba9dd91b35832f1e4630b4470a8585f7
4e121f2776b3391cfb17916cbdd11fd66147de77,31ccc6299d02cefc1c72f655231cb9e5e7d4a26e,3c3c8c49ae02aafaba8783a76cec68eec1f8cb81
0b338549c01fcbd75918b246cbaec3cc8c9bbece,74ec67d5dc60c111c09262a1c5c208d385bf8149,e52d65c8b8952f360db0bc7eb361532556a461ef
73264577658d5dc9410c3ecba6e06df42ce31326,1c33bdce41e2995b4e7c9c8931a0a75f59ff3bdf,ade7add550a2aabef28ca43751b8006f342a2586
668e4386412f22c8121649dce121ebfed80c21d4,7ba39027fd8921ba884fb568e8e01d2058fe8ea4,85b890c2972d292182d8dd0930e27a66d5386fde
9557911c751181fd908c45937634ec3c3e640748,4dafc88b9ad2aff1f1efb3a6af680c44bcd0e21b,749c186cf8c9390eff916341215d8dbc5a987ce0
54cf8960be818f7b15c548f059124ae7bc167559,dd55a351a582dff3195e3213e9a024355903fff6,ed1068a770c0c524b6bafc93c5956f22dc0ece80
2917e9341c00d294497eff158a7530b0088965c6,a6ef35fbca5e1444d408723a54b84ac27cc18b43,42de81a53fc167f2ccd2821d0db0ed8a941e67e7
71b24b8ea753032d6eaf0b4ec8ade5356594d488,6106de4cd6d5ee5e0971ea9d42c57b9310346070,d6ca464b3255d31c9a88df37f565f797e902a42d
10ecc20b5c97b66ad018e2636e9669b4b08f772d,433504407f1be18f6d6a2af0f24f52cc921760a7,4e39873fc92c0a5e6b74d4f4cd35d7c7323a6a73
4edfc9baf6e1f36096ddb1ecd24061993c3640fb,251aad4d52548accfb85414e4b467f9460cb420f,957d20c0bc0529e842b06422afc081cfa3e0b834
1d4f0b9b612a8590b2bb83586555229540b35ffe,1c4899ec5afdd8df173c71434ad5a832d204405f,00776435c6e10c5fdb71dd58ee73bfa99b1ec19d
50b8ef26327bec8cc56683316ead3e0db9253e57,a9a69e3ba98d643c013d08581f87f04c79c10c9e,43db5be21b55db98031b84e95e237b1210793e68
ed1484a87a965142116ffac478172d219e096a60,89de2f4cd9a453dcddd56c88d4abf967b08fb48d,a5da235662d979f1044dbe8e68ae427f503e53e5
3bbdee22d286ae913348f688648ee581e67cc8ac,7d22b9f990fd736824b7e2a6dd58d9b7af5cf5d7,d70f6a86273cdac6b51e85cf174b3c4aa07c9247
c562becf56d7af8ff331c1251e3821fba7f9203b,b0a5cc1603e663eba22ac959fa86787227e345b6,5d3eab7d00376a38db5feed4d6f65b0456d2c4b3
c2b01ef53dd0f3b951588402e9cd316d16136108,e2d01e3adc56ee2b85209cbd84423e7e4e66d92f,c12424f52870d2379d8d949bdfeadf31efd95b5f
a21eb6f30c4474ccf7aa9c4e827ba3959475787d,814ad72c7bca2dc7ba4e9132ab312912a59d8135,f35083915ef010b9041ccbf55a8d925d098e031d
Clicking a revision will expand files
* normalize tree: - do not allow statements in expressions
+ add a comment to the destructor of tsymtable so that others (and maybe me a well) will hopefully see that the destructor of that class is not completely trivial!
* fixed some issues to get correct values of section_count, works better than before but it is still not perfect for unknown reasons
+ based on a patch by Laksen, optimize (v>=x) and (v<=y) into (v-x)<(y-x)
* support aitconst_*bit_unaligned in the intel assembler writer, resolves
0034222
* relax formula for max. nodes to inline
Add missing TFenceFlags and TRoundingMode for riscv32
Fix default CPUs for riscv32
cleanup: remove ARMHF-related comments from RISC-V only codepath. no functional change.
* addendum for Mantis
0034333: also complain about number of arguments with the maximum number of arguments for Copy ( = 3 ) is exceeded
* is_range_test returns false if "lower" bound is greater than "upper" bound
* fix building with LLVM=1, thanks to Karl-Michael Schindler for the hint
+ patch by J. Gareth Moreton to support BMI2 instructions
+ extended avx test generator with the newly added BMI2 instructions
* Fixed overflow error when calling align() with corner case values such as align($7FFFFFFC, 4) for the longint variant.
Fix riscv64 compiler compilation with -dEXTDEBUG
Fix compilation with -dEXTDEBUG
Add -Tlinux and -Tembedded help lines for riscv32 and riscv64 compilers
* Fixed writing of method's RTTI for aarch64 by explicitly writing the $self parameter first.
* Reverted
0039947. According to Sven, the $self parameters is not required to be first parameter in RTTI. Appropriate tests will be fixed.
* Fixed overflow error for the qword version of align() when i=0.
* Undef FPC_HAS_TYPE_EXTENDED for x86_64-android.
* avoid range check errors
+ make use of the BFI instruction in tcgaarch64.a_load_ref_reg_unaligned
+ implement assembler optimization Str/LdrAdd/Sub2Str/Ldr Postindex done
* avoid to create a stack frame on aarch64 if possible
* take care of the fact that x and w registers overlap when carrying out the Str/LdrAdd/Sub2Str/Ldr Postindex optimization
* Optimized generic implementations of tcg.a_op_const_ref() and tcg.a_op_reg_ref() for PIC and CPUs which need 2 or more instructions to load a symbol's value by reference.
First the symbol's address is taken and then it is used to load the value and also store the result. It eliminates extra calculation of the symbol's address needed to store the result.
x86 and other CPUs which can handle refs ops directly or more efficiently already have overloaded versions of these methods and are not affected by this change.
* SetExecutionWeight(): Set execution weight also for nodes with special handling. Minor code cleanup/improvements.
* Restore previous execution weight before exiting secondpass().
* It all improves register allocation for variables inside loops in some cases.
* replaced "is" test with faster field value test
- x86 align does not use a register anymore, code removed
+ introduce tai_align_abstract.create_max which limits the maximal number of bytes being inserted for alignment
+ new fields for more precise control of alignment
+ support of new alignment control values for GNU AS writer
+ support of new alignment control values for binary writer
* better alignment settings on i386-win32
* improved inserted align directives for if nodes
* skip align directives after unconditional jumps
+ factored out TX86AsmOptimizer.PrePeepholeOptIMUL, used now by x86-64 and i386
* generalized and simplified the code
Disable three operand overload of MatchOpType for avr and jvm targets, which only have 2 operands max
* Removed 'inline' from public methods of TFPObjectList and TFPHashObjectList since they use private fields and can not be inlined when called from other units.
* Reverted
0040181 because the "not inlined" notes are issued not due to access to private fields, but due to string conversion. It need to be fixed by overloaded versions of some methods.
* Removed unused local vars.
* Commented out unused "size" local var.
* Removed unused local vars.
- get rid of MaxOps, it is redundant with max_operands
* MatchOpType with three operands is only available of max_operands>2
Fix 3 operand version of MatchOpType
* Moved inline methods to the beginning in order to allow them to be actually inlined in this unit.
* Rearranged the code to place implementation of inline methods before their usage within this unit.
+ Added overloaded version of stringdup() for ansistring to allow stringdup to be inlined.
* If a function can't be inline (contains an assembler block, etc) remove the po_inline flag from its procoptions.
* Removed inline for methods which are too big.
* Removed inline for functions which access private variables and can't be inlined from outside.
* Removed inline for Unix2AmigaPath since it is not necessary and can't be inlined anyway due to ansistring conversion.
* Addition to
0040225: Forgot to remove inline in the implementation.
* po_inline can't be removed from procoptions when the interface part is already parsed. It changes the interface's CRC and causes other units to recompile.
+ Added the pio_inline_not_possible flag to timplprocoption. It is set if a function can't be inline (contains an assembler block, etc). When calling such functions, no note "Call to subroutine "?" marked as inline is not inlined" is emitted.
* Changed verbosity of ""???" not yet supported inside inline procedure/function" to note to be consistent with note "Call to subroutine "?" marked as inline is not inlined".
+ initial work for tls-based threadvar support on arm-linux
+ check if initialization/finalization code uses implicitly thread vars
+ i386-linux support for tls-based threadvars
* define renamed into tls_threadvars
* compilation on x86-64 and i8086 fixed
* non-linux arm targets fixed
+ support for tlsm_general on i386-linux
* redundant code removed, work is meanwhile done by aasmcpu.optimize_ref
* i8086 compiler fixed, resolves
0034552
Avoid overflow error in riscv code generator
* do not re-used gottpoff symbols as they are PC-relative
Fix riscv32 compilation error introduced in last commit
Use same parameter type for update_reference_offset override
* better alignment on 386-linux
* three operand shl for shifting by 2, 4 or 8 can be simulated by lea
* set nf_write flag properly for vec. nodes of types with implicit dereferencing
* better alignment of while loop heads
* fixed adjustments of lower/upper bounds in range test optimization in case
of strictly smaller/greater comparisons (mantis
0034385)
* moved finalization of code generator temps to a node, so it can be getcopy'd
(needed for LLVM, where we need two copies of the finally code: one in case
an exception occurs, and one in case none is raised)
o also first finalize parameters and only then code generator temps, since
in theory the former could create more of the latter
+ new spilling heuristics which takes care of the usage weigth of a register,
not yet activated, can be selected by passing SPILLING_NEW when compiling the compiler
* finalizetemps nodes should never be considered equal and have side effects
* don't generate tempsfinalize nodes in except filter procdefs, as that would
finalize the parent's temps twice (fix for
0040345, mantis
0034574)
+ MovOpMov2MovOp optimization
* building on i386-linux fixed
* disable MovOpMov2MovOp optimization on x86-64 for now as it seems to break
* pass volatility information to llvm.memcpy
* thlcgobj.g_unreachable() dummy implementation + llvm override
* fixed dynamic array constants for llvm
- reverted
0039188, as this hack removes the type correctness of the
instructions, which breaks the llvm code generator. Put such hacks
in CPU-specific overrides
+ customint torddef type to create arbitraty bit-width integers
o use this to handle non-power-of-two-sized parameters for llvm
o no general support in the parser/code generator, so don't expose
* systematically capitalize first word of errormsg/sentence, patch by J. Gareth Moreton, mantis 34618
Regenerate msgid and msgtxt include files after commit 40422
m68k: reinstate the inc/dec tempregister type hack again in an isolated way (it was removed in
0040385, as it was breaking llvm target)
+ abi tag for i386
* arm abi tag moved into pascal file
- disable cs_opt_use_load_modify_store because for llvm because it is
apparently buggy as far as type information is concerned, and it also
results in tons of spilling
* ensure the generic version of tcgshlshrnode gets used for llvm
+ volatile() expression that marks an expression as volatile
* disable matching volatile references in the assembler optimisers, so they
can't be removed (more conservative than needed, but better than removing
too many)
o the CSE optimiser will ignore them by default, because they're an unknown
inline node for it
* also removed no longer used fpc_in_move_x and fpc_in_fillchar_x inline node
identifiers from rtl/inc/innr.inc, and placed fpc_in_unaligned_x at the
right place
* only free the temp holding the function result after we've loaded it into
the function return register (so we won't load from an already freed
temp once we emit lifetime info for temps on LLVM)
* emit temp lifetime information for llvm
o also allow freeing temps in the middle of a routine for llvm (we won't
reuse them, but it results in better lifetime information)
* add nocapture and dereferenceable/dereferenceable_or_null decorators to
parameters for llvm where appropriate
* fixed bug that caused the "sret" argument attribute to never be used (and
a guaranteed internalerror on AArch64/llvm)
* fixed paraloc def when changing the size to OS_32
* fixed shifval for big endian (bits instead of bytes)
* set paralocations correctly for LLVM/AArch (must be register-type instead
of parameter-type based)
* only coerce the type of the leftover bytes of a record if the location
size doesn't match the number of remaining bytes
o prevents a second "single" field of a record getting interpreted as a
"cardinal"
* support OS_32/OS_64 in AArch64 cgsize2subreg() for MM registers (can happen
for records with floating point fields with the LLVM code generator)
* initialise cgpara with valid data for the C-style "array of const" para
(necessary for the LLVM backend)
* replaced some stray cpointerdef.create() calls with cpointerdef.getreusable()
* pass dynamic array parameters of cdecl routines by value on AArch64
(like on onther platforms)
o it was passed by reference as a side effect of the fact arrays in C are
pointers, but a dynamic array already is a pointer
* fixed type consistency in handler for array parameters on platforms where
these have to be passed on the caller side (i.e., AArch64)
+ internal sqrt support for LLVM (faster on all platforms, necessary on
platforms that don't have RTL support for it, as the the generic
fpc_sqrt_real just calls runerror)
* fixed dynamic array constants for non-Darwin LLVM platforms
* support for compiling the objects unit methods that expect local procedure/
function pointers using {$modeswitch nestedprocvars} functionality, activate
this for LLVM and also activate that modeswitch for a test that uses this
o also convert the IDE units to use this functionality
o requires extra typecasts because implicit type conversions from
procvar(p: psometype) to procvar(p: pointer) are not supported; on the
plus side, even those type conversions are checked for validity
o note: requires {$modeswitch nestedprocvars} in all programs/units
that rely on this functionality
* cleaned up blockaddress instruction (add type rather than hardcoding it
in the assembler writer)
* fixed taking the address of a label in a typed const for llvm (fixes
tbs/tb0468a)
* fixed <> comparisons with NaNs (use LLVM "unordered" comparison: succeed
if either operand is a NaN)
* use ccallnode.createintern() instead of
ccallcnode.createinternfromunit('SYSTEM')
+ LLVM support for the FMA intrinsics
* fixed LLVM code generator not taking into account constalignmin/max
settings for typed constants
* fixed used resulttype of char-to-shortstring typeconversion in case the
shortstring type is smaler than 255 chars
* simplify all type conversions for formal constants even for LLVM and JVM
(since these happen at compile time and don't result in generated code,
they never need extra type conversions in the code)
* force pointer-based self parameters of inlined routines in temps for LLVM
to ensure that their type gets updated
* fixed result cgsize of LLVM's second_nothing type conversion node (new
size instead of original size, which can be different in case of going
from void to something else)
* in constructors, free the temp holding self only after loading the function
result, as self is the function result there (follow up to 40501)
* fixed string constant length when going from utf-8 to single-byte code page
(mantis
0033666, patch by engkin)
* handle constructor function results that have been migrated to the
parentfpstruct the same as regular function results (see
0032687)
* addition to
0040631: also force inline self parameters that are already in
a temp into a new temp for LLVM, so their type gets updated
* (modified) patch by Gareth Moreton: Speed improvement in case blocks, resolves
000034762
This patch improves the compiler where "case" statements are concerned, using jump tables more often and creating more efficient machine code in some situations:
* If a case block only contains one branch (not including the else block), the initial range check is removed, since this becomes wasted effort.
* If the else block is empty, the else label is set to the end label - though this doesn't decrease the code size, it takes a bit of strain off the peephole optimizer.
* On -O2 and above, some node analysis is now done on the branch labels. Most of the time this just redirects it to the end
label for empty blocks, but if the block contains a goto statement, it will redirect it to its destination instead,
thus increasing performance by not having multiple jumps (this won't get picked up by the peephole optimiser if the label addresses are in a jump table).
* Some checks now use what I call the 'true count' rather than the 'label count'. The true count includes each
individual value in a range - for example, 0..2 counts as 3. This increases the chance that a jump table will be
utilised in situations where it is more efficient than a linear list.
* For jump tables, if the case block almost covers the entire range (32 entries or fewer from full coverage),
the initial range check is removed and the gaps included in the jump table (pointing to the else label).
* pass used tls model to the assembler
* better code alignment for x86_64-win64 and x86_64-linux
* not all targets support the tls-model switch, use it only if section thread vars are used
* changed maxjumpalign:10 to 16
* changed (max)jumalign for Darwin/x86_64 from 0 to 16
* fixed wrong change of jumpalignmax from 10 to 16 in previous commit
o renamed jumpalignmax and coalescealignmax to jumpalignskipmax/
coalescealignskipmax to better reflex the meaning of these setting
(and the difference in meaning to e.g. constalignmax)
* update alignment values for Darwin
* (modified) path by Gareth Moreton to fix case handling
* when optimizing range checks in case nodes, unsigned comparisions must be used, resolves
0034782
* fixed LLVM memory leaks
* don't emit 0-sized parameters for LLVM: clang doesn't either, and some
LLVM backends (like the AArch64 one) trigger internal errors when
encountering them
* patch by Simon Ameis: adds mcu STM32F091* to compiler unit t_embed.pas; thus internal error 200902011 is not raised anymore, resolves
0034570
* improved explanation for warning 9034
tabs to spaces cleanup. no functional change
* fixed several places where the interface crc could change:
o unsetting po_inline while parsing the implementation for various reasons
(interprocedural goto/label, accessing a local in a parent frame,
having nested procedures)
o instead handle this via the pio_inline_not_possible flag
o noreturn can no longer be specified only in the implementation
Change default debugging format for x86_64-haiku to dwarf-2, as stabs is normally disabled on 64-bit systems
* modified patch by Gareth Moreton to make ie unique, resolves
0034849
* when deciding about the case code generation in case of size optimization, the number of labels is relevant, not the covered range, resolves
0034818
* -tls-dialect is not a as option, removed it, resolves
0034901
* constrained generics are also compatible with formaldefs, resolves
0034893
* modified patch by Gareth Moreton to pool TmpUsedRegs in the assembler optimizers, resolves
0034679
* fix and enable MovOpMov2MovOp optimization on x86-64
+ patch by Marģers to support the x86 assembler instructions blsi, blsr, blsmsk, adcx, adox, movbe, pclmulqdq, resolves
0034815 and
0034799
+ avxopcodes tests also movbe and pclmulqdq
* fix MovOpMov2MovOp optimization if no -Cpcoreavx2 is used
* open arrays and arrays of consts might be only stack tainting if they are passed by value
* avoid assembler errors for the MovOpMov2MovOp optimziation in case the size of the instruction
gets changed and the first one contains a constant, resolves
0034933
* factored out OptPass1FSTP, used by x86-64 now as well
* better recognization of procedure exit code
* factored out OptPass1FLD, used bx x86-64 now as well
- removed unused function
+ tls support for x86_64-linux (not yet enabled by default)
morphos: support section GC with GNU LD as well
* do not call the internal assembler if -s is passed
+ support msr regf,reg32 on arm in the internal assembler
* do not load always the references into a register in g_concatcopy
* correctly handle LDRD in TAoptBaseCpu.RegModifiedByInstruction
* first step towards supporting 32 bit targets with the LLVM code generator:
use the generic code in more cases when cpuhighleveltarget is defined
* perform extension of parameters to 32 bit for Darwin in the paraloc instead
of in the cgpara (cgpara should always correspond to the real parameter)
* fixed type correctness of and simplified the threadvar loading size
optimisation
* initialse the cgpara for the C-style varargs on ARM (needed for LLVM)
* fix loading of constants in registers in the LLVM CG if the constant
does not fit in ptrsinttype
atari: fpc now searches for the compiler with .ttp extension, as that's the default on Atari
+ nolinline modifier to specify that a routine must never be inlined
* let de LLVM parameter manager merge multiple paralocs used to represent a
single ordinal, as such splitting is handled by LLVM itself (and handling
such split locations is currently not supported by our LLVM code generator)
* set default Mac OS X target version to 10.6 for LLVM (earlier versions did
not include libunwind in libSystem, causing linking errors when compiling
on later versions)
* always emit UAL when using LLVM (clang does not and will not support
pre-UAL)
* removed unnecessary replacements of the paraloc def with arraydefs on ARM
* fixed ARM paraloc defs (for LLVM)
* update the stack alignment field of parameters when doing so for paralocs
* LLVM does not support 128 bits arithmetic on 32 bit platforms, which we
need for overflow checking -> use RTL built-ins
* fixed thlcgobj.g_rangecheck() for cpuhighleveltarget when targetting a
cpu32bitalu
* fixed the default external assembler for llvm when using -s
Fix bug report
0035065 using provided patch by J. Gareth Moreton
* properly quote pathes for objcopy calls, resolves
0035072
* ppudump: Use buffered write when outputting to json or xml. It improves the output speed a lot.
* ppudump: Fixed warnings with -O3.
* arm: Fixed crash while loading double constants with PIC enabled. This is the regression after
0041129. The crash has occurred due to usage of a rare code path. It will be fixed in the next commit.
* arm: Include pi_needs_got to current_procinfo.flags when the GOT register is accessed. It forces proper initialization of the GOT register at the beginning of a procedure. This fixes storing of a double constant to a field in a packed record and other rare copy operations when PIC is enabled.
* aarch64: According to ARM64 ABI, function's arguments and the result are not required to be sign/zero extended to a full register size. Obey this rule for all targets except iOS where sign/zero extension is required.
* don't use cg64.a_load64_loc_cgpara() for 64 bit records passed in
non-integer registers
* move the homogenous float aggregate determination function to a common
unit for ARM and AArch64
* keep track of whether a routine has a C-style variadic parameter in the
procoptions even when it's through an array-of-const parameter
* always call create_varargs_paraloc_info() instead of create_paraloc_info()
in the former case, even when no varargs parameters are specified (because
on some platforms even some non-variadic parameters need to be passed
differently, such as on ARM with gnueabihf)
* add support for HFA parameter passing for ARM hardfloat
(fixes test/cg/tcalext6)
* give an error when trying to call through to a C varargs routine with a
high level code generator
o we cannot create a high-level stub in that case
* type left-over parts of parameters as arrays of "stack slot alignment" if
they're an exact multiple of the ialignment size on LLVM. This prevents
both overalignment (e.g. remainder of 8 individual bytes on ARM
would be aligned to 8 bytes instead of 4 if typed as int64) and
underalignment (e.g. 32 bytes remainder of a record that needs to be
aligned to 8 bytes would be aligned to 1 or 4 bytes if types as
array of resp. bytes or longints)
* remove double "nocapture" attributes
* also add "noalias nocapture" to sret parameters
* use ` instead of ^ as replacement character in LLVM asmnodes, as ^ can
appear in ARM inline assembly
* properly set 8 byte parameter alignment for first parameter on ARM if
applicable
* also specify the byval alignment at the callee side
* support OS_32/OS_64 in cgsize2subreg for ARM MM registers to handle
records passed in MM registers
* Removed unused local vars.
* Removed inline, since inherited is not supported.
* Do not set pi_needs_got in current_procinfo.flags at the node level, since the GOT usage can only be estimated there. Instead set the pi_needs_got flag at places where the GOT register is accessed during the code generation. This eliminates generation of the unneeded initialization of the GOT register and fixes linker errors when the _GLOBAL_OFFSET_TABLE_ symbol is referenced but no actual GOT references are present.
* i386: Minor PIC initialization improvement if the GOT register is forced to EBX.
* i386 PIC: Do not force EBX as a GOT register if tf_section_threadvars is not set. Actually forcing EBX here is a bad idea anyway.
* i386: Do not request GOT for every function call. GOT is requested only for external calls in thlcgcpu.a_call_name(). Local calls are always PC relative.
* track va_uses_float_reg also for varargs functions without varargs
parameters (see e.g. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23070 )
* better alignment values
* fix for
0041416: 64 bit values on 32 bit platforms can of course also be
passed in memory
* initialize function result for variadic functions (fixup for
0041420)
Fix tmoddiv4.pp test failure with -O1 option for powerpc64 as suggested by Jonas
* ppudump: Fixed a warning regarding text clipping.
* patch by J. Gareth Moreton which avoids that the optimizer causes reads of invalid memory, resolves
0035187
* only add hidden parameters for objectdef methods after generating the vmt,
so that they take into account inherited calling conventions (mantis
0035233)
o don't needlessly calculate the paraloc info when generating a JVM mangled
name
* also accept {$elsif} after {$if(n)def} (mantis
0034858)
* fix msgtxt array size if the text size is an exact multiple of 240
* clean up some things regarding explicit paraloc handling. this should fix m68k-amiga and powerpc-morphos builds after
0041716
* reinstate the internalerror removed in
0041730 for i386, as that was a valid condition to verify
* added extra header to ppu inside a subsection, so we won't run into
trouble when the ppu version hits 255
* also moved several ppu flags to a set inside that section
* hopefully fix fpu emulation ppu header flag check after
0041846
* documented usage of ppuversion and ppulongversion
* check CurrentPPULongVersion in ppumove
- Add support for .option directive in riscv assembler.
- Use addiw when adjusting U32 to S32
- Port RISC-V64 startup code to native inline routines.
- Fix UTX* optimizations that didn't consider the optional ROR parameter.
* insert the hidden parameters for objectdef methods after resolving
overrides but before generating the VMT, so that these hidden parameters
are part of the procdefs stored in the VMT (fixes some LLVM type errors
after
0041716)
* use ".set" for aliasing global symbols on Darwin, instead of declaring
symbols after each other
o removed the .reference hack that was used previously
* replaced TCmdStrListItem getter function with a property
* moved sleb/uleb128 helpers to cutils and use SarInt64() intrinsic (based on
patch by J. Gareth Moreton, mantis
0035327)
* micro-optimization for tentryfile.getbyte() (based on patch by
J. Gareth Moreton, mantis
0035406)
* optimized and simplified tai_aggregatetypedconst destruction
- removed ttypedconstkind parameter from tai_simpletypedconst constructor,
as it always has to be tck_simple anyway
* fixed double free in LLVM code generator after
0041963
+ add support for MultiHelpers modeswitch by Ryan Joseph for Mantis
0035159
+ added tests
* set correct fileinfo for statements_til_end() block
+ support for verifying whether a case statements handles all possibilities
(based on patch by Martok)
o enabled by default in ISO and Extended Pascal: compile-time error if not
the case in ISO mode, warning and run-time error in Extended Pascal mode
o warning enabled by default in all other modes for boolean, enumeration and
subrange integer types with ranges different from the default ones
(i.e., different from 0..255, -128..127, 0..65536, etc)
o warnings for all ordinal types can be enabled in all modes with
-CC
* fix overflow errors in case coverage code
* fixed crashes on platforms using parentfpstructs with generic routines
that contain nested functions (when specialised, procedures don't have
the main function of the unit/program as parent procinfo)
Remove two warnings about missing case (others are still present in ppudump.pp source)
Fix arm-aros rtl compilation
* DFA now takes case-completeness into account (mantis
0035598)
* updated German message files (patch by Karl-Michael Schindler,
mantis
0035559)
* append rather than insert the alias symbols for the program/procedure
initialisation/finalisation routines
o this ensures the procdef's mangled name and its first symbol match,
which is required for Darwin when generating debug information and
using ".set" directives to define alias symbols, because a symbol
defined via ".set" cannot be used in a data relocations (and the DWARF
debug generator uses the default mangled name, which used to correspond
to the alias symbol due to the "insert" instead of "append")
* don't double-define function aliases for Darwin defined via ".set" directive
* fixed loading parent frame pointer for nested procvars on targets that
that use explicit parentfp structs (fixes webtbs/tw17379 for llvm)
* made the fields array parameter of llvmgettemprecorddef "const", as it
doesn't get modified and hence doesn't need to be copied
* abstracted registration of library init/fini routines (to be able to add
LLVM support)
Add DEBUG_PPU conditional code to be able to debug ppu changes (only useful for debugging purposes)
* disable regular array -> dynamic array type coversion support unless
{$modeswitch arraytodynarray} is active (mantis
0035576)
o changed compiler to compile without this modeswitch
o added the modeswitch to a test that depends on it
Fix division of constants on ARM thumb without long multiplication.
* support for handling subsetrefs with bitlen > AIntBits in a_load_subsetref_reg() and
a_load_const/reg_subsetref() (needed for handling 32 bit platforms using a purely
high level code generator like LLVM's, and may also improve the situation for
16 bit platforms)
o can probably be optimized to split them into parts that cover partial word loads
and complete word loads (to reduce useless merging)
Added T2 form of LDR/STR for SP relative forms.
+ added TNewExeHeaderFlags type, describing the flags in the header of win16 executables
+ added enum TNewExeTargetOS
+ added type TNewExeAdditionalHeaderFlags
- removed "cmp 0/1, pasbool1" optimization for llvm because this discards
the upper 7 bits of the boolean, while other platforms take it into
account (even though they're technically always required to be 0, and
the value is undefined if they're not)
* fix bootstrapping with 3.0.x and -O3
* Nintendo DS port updated to libnds ver.1.7.3
+ added set TNewExeSegmentFlags
* prettify the "Use of +offset(%ebp) is not compatible with regcall convention"
and "Use of +offset(%ebp) for parameters invalid here" warning messages by
showing the exact register used (bp, ebp or rbp) and using the original asm
syntax (Intel: [EBP+offset]; AT&T: +offset(%ebp) )
* prettify the "Use of -offset(%ebp) is not recommended for local variable
access" warning by showing the exact register used (bp, ebp or rbp) and using
the original asm syntax
+ introduced the asmmodes_x86_intel constant set
+ add asmmode_standard to the asmmodes_x86_intel set on i8086, because i8086 defaults to intel syntax
* prettify the "Use of -offset(%esp), access may cause a crash or value may be
lost" warning by showing the exact register used (esp or rsp) and using the
asm syntax (Intel or AT&T) used originally in the code
+ added the asmmodes_x86_att set constant - similar to asmmode_x86_intel, but for AT&T asm syntax
* suppress warning for targets without MM registers
* Updated Wii port to libogc 1.8.22
+ added class TNewExeHeader that encapsulates a NewExe header and allows writing it to a file
+ initialize some defaults in the TNewExeHeader constructor
+ added class TNewExeOutput. Not functional yet.
+ added a win16 internal linker class. Not functional yet.
+ implement TInternalLinkerWin16.DefaultLinkScript by copying the MS-DOS
implementation (not correct, but a good starting point)
- remove the tiny memory model code from TInternalLinkerWin16.DefaultLinkScript,
because the Win16 target doesn't support the tiny memory model
+ register a win16 dll scanner. Not functional yet.
+ added constants for the known CC_OmfExtension record subtypes (IMPDEF and
EXPDEF are the ones we care about - they are used in win16 dll import and
export libraries)
+ dispatch the IMPDEF and EXPDEF records to the newly introduced ReadImpDef and
ReadExpDef methods (not implemented yet)
+ use the new CC_OmfExtension_EXPDEF constant instead of the direct magic value
when writing export libraries
+ use the new CC_OmfExtension_IMPDEF constant instead of the direct magic value
when writing IMPDEF records
+ introduced the TOmfRecord_COMENT_Subtype abstract class
+ introduced the TOmfRecord_COMENT_IMPDEF class. Use it to encode the IMPDEF
records instead of encoding them directly.
+ introduced the TOmfRecord_COMENT_EXPDEF class. Use that to generate export
libraries instead of generating the magic string directly.
+ Implemented TOmfRecord_COMENT_EXPDEF.DecodeFrom
+ keep (certain) arrays in registers if they are used with constants indices only
* building on powerpc and arm fixed
+ implemented TOmfRecord_COMENT_IMPDEF.DecodeFrom
* disable array and record regvars for all cpuhighleveltarget platforms
Commit of new debug feature implemented by J. Gareth Moreton
Allows compilation of compiler using -dDEBUG_NODE_XML
which will generate a NAME-node-dump.xml file for each
unit, program or library compiled,
containing a XML description of the nodes handled during
compilation of the unit, program or library.
* one more disable location of DoPipe in case not on a Unix platform
(mantis
0035743)
* partial fix for Mantis
0035346: more "inline" directives for TCStream and TCMemoryStream methods
* remaining fix for Mantis
0035346: add "inline" directives to various methods of tentryfile
* simplify and optimize generated LLVM code for case statements
* also register symbols referenced from assembler via asolutevarsyms
* volatile syms should never be regable
* LLVM-specific support for bsr*/bsf*
* LLVM-specific support for popcnt
* record in ppu flag whether or not symbols are ansistrings, and use that
flag in ppudump rather than hardcoding targets (it's also the case for
LLVM)
- removed remnants of old ppu file support (ppudump does not support any
other ppu version than the current one anyway)
* fixed compilation with -dTest_Double_checksum_write
Commit patch submitted in bug report
0035787 by Gareth Moreton
* fixed range test optimization for signed types and enabled it for them
- Fix bug in 64bit softfloat double negation.
- Clean up handling of CPU/FPU type handling in RISCV.
- Do more fixes to get RISCV32 working.
- Fix most soft multiplication handling for generic RISCV code. Still missing a few.
- Add RISCV embedded targets.
* maybereplacewithtemp/maybereplacewithtempref: also create a temp in case
of possible side effects
- disabled ogmacho, as it can no longer deal with the assembly we generate
* on Mach-O, PECOFF and ELF platforms, write local symbols as hidden/
private_extern (or plain global in case of PECOFF, as the effect is
the same there): visible across object files, but they become local
when linked into a binary/library. This enables cross-unit inlining
of functions accessig implementation-only symbols.
* factored out checks whether a procdef's symbol needs to be global, and
the generation of the procdef's asmsymbols
o also removed unnecessary definition of procdef alias symbols for Darwin
(they are already defined in ncgutil.alloc_proc_symbol)
* fix tobjectdef.vmt_def to search in the correct symtable
* always register vmt defs (so they get written to the ppu) in case of llvm,
because it may need this def in case a method from a class defined in the
implementation of unit gets called from an inlined routine that gets
inlined in another unit (normally that vmt def would not get written to
the ppu file, as it can't be referenced from the interface and it's also
not necessarily directly referenced from the inline routine's nodes)
(fixes sdo_dataobject compilation with LLVM after enabling cross-unit
inlining of methods accessing static symbol table symbols)
+ parse the IMPDEF record in TOmfObjInput.ReadImpDef
Reintegration of Custom Attributes branch by Joost van der Sluis with patches reworked by Svetozar Belic [patch 1/3]
Implemented attributes for class types and properties (based on work by Joost van der Sluis). Added TCustomAttribute - a base class for attributes. Added TUnitInfo record to RTTI. It contains the unit name and unit options (for now only a flag which specifies if the unit contains attributes). Added several tests for attributes.
Reintegration of Custom Attributes branch by Joost van der Sluis with patches reworked by Svetozar Belic [patch 2/3]
Regenerated compiler/msgidx.inc and compiler/msgtxt.inc.
Reintegration of Custom Attributes branch by Joost van der Sluis with patches reworked by Svetozar Belic [patch 3/3]
Added FPC_REQUIRES_PROPER_ALIGNMENT to TUnitInfo definition. Added FPC_HAS_EXTENDED_RTTI define.
* rename trtti_attributesdef to trtti_attributes_list
* change boolean parameters for try_consume_unitsym to a set
* instead of declaring another type with a 'attribute' suffix, *search* for another type with a 'ATTRIBUTE' suffix (Delphi allows declaring both a TFoo and TFooAttribute in the same unit)
+ added test
* instead of embedding the attributes inside the class' and property's type data only store a reference to a table of attributes
* always write a class' reference to the attribute table, even if the unit does not have attributes
- remove unit info and related code again as that will be handled similar, but differently with dynamic packages
* considering that at least in theory every symbol and every def can carry RTTI attributes (Delphi only supports property and field symbols), move the rtti_attribute_list to tstoredsym/tstoreddef
* as attributes can be part of any type they are best suited in a common part of TTypeData
* fix code formatting (no code changes)
* check that we indeed have a type node and nothing else
* with a type node it's not necessary to check whether it's typedef is assigned
* fix code formatting (no code changes)
* rework code for parsing attributes to only allow constant expressions; Delphi only allows those as well and better we don't open *that* pandora's box just yet
* fix code formatting (no code changes)
* store the parameter nodes in the attribute object as well (we need to write them to the RTTI as well as store them in the PPU)
* ensure that any potentially created constructor call is freed if the attribute is not bound to a def or sym
* instead of collecting the raw parameters we need to collect the parameters as passed to the call as there might be type conversions involved
* better check for a valid call node
* take a copy of the constructor assignment node (and free it together with the attribute)
+ add methods for the const nodes to directly emit their constant data to a constant builder
Note: reduce code duplication, especially for the tsetconstnode (with its descendant tcgsetconstnode)
* the RTTI of an attribute not only consists of the creation function, but also of the attribute's type, a pointer to the constructor and a data blob containing the constant parameters
+ added test
* add a remark that's going to be important once extended RTTI is supported (Delphi programs crash if an attribute's constructor is used that does not have any extended RTTI)
* move binding of a dangling attribute list to a sym's/def's attribute list to a class procedure of trtti_attribute_list
* make the reference to the TCustomAttribute type global
* generate construction function for the attributes used in a unit using a more straight forward approach
ToDo: "collect" attributes of same type and same argument list and generate constructor only once for them
* trtti_attribute_list.bind already checks whether the dangling attribute list is assigned or not
- remove code to create an attribute using a synthetic function
- remove functionality to get the code block when parsing again (let's open this pandora's box only when really needed...)
- symbolname field is no longer required
+ add functions for syms and defs and write sub entries of the sym/def to PPU and loads them again
* explicitely store the procdef of the picked constructor of the attribute
* store attribute information in PPU; this is less important for the compiler, but more for e.g. Lazarus when dealing with binary only units
* increase ppu version
+ added test
* adjust ppudump to handle attributes as well
ToDo: output parameter nodes as well
* disable [...] syntax for procedure directives if modeswitch "prefixed attributes" is enabled; they conflict otherwise and it's not easily resolveable
+ added test
* use two empty lines between method definitions (no code changes)
* correct identation (no code changes)
* allow custom attributes for all type declarations that are not a simple alias
+ added tests
* don't free the constructor call in trtti_attribute_list as that is already freed in the destructor of trtti_attribute
* free unbound attributes
* check for unbound attributes inside classes (currently they are only allowed for published properties)
Note: no tests yet as sooner or later most will be dropped once extended RTTI is added
* allow use of multiple, comma separated attributes as Delphi allows that as well
+ added test
* adjust error message when attributes are unbound
* regenerate msg*.inc files
fixed the messy state of messages after recent custom attributes merge. fixed a typo, fixed double definition of message 3350, restored a message that was removed but still used, so the build passes at least.
* get rid of the scanner message for attributes for real this time (sometimes I *really* hate Git -.-)
* first bunch of fixes for rtti for arm after attribute commits, fixes mostly alignment issues
- removed maxcrecordalign parameter/field from recordsymtables, as this value
cannot be modified in the settings (so we can directly use the one from
current_settings)
* properly align rtti for orddefs
* fix for Mantis
0023071: also store local symtable in the PPU if the procdef is generic as we need it to resolve genericdefs to nested types
* increase PPU version now that all generic procdefs store their local symtables
* don't reuse defs for attribute lists or individual attributes with parameters, as
they don't have a constant size
o fixes LLVM internalerror 2015122402 for test/tcustomattr{12,13,19}
* search dynamic string data record in correct symtable in
tllvmtai_typedconstbuilder.emit_string_offset
o fixes LLVM internalerror 2014080406 for test/tcustomattr14
* fix for Mantis
0035866: parse_paras does not check whether the expressions are really constant, so check that manually
+ added test
* don't bother finding the correct constructor if the attribute isn't a TCustomAttribute descendant anyway; simply skip the parameters in that case
+ added tests
* more fixes to rtti after attribute branch merging
* fixed field alignment when reusing an anonymous recorddef for LLVM and
the LLVM layout of an instance does not match the original one
(e.g. because it contains procdefs of procedures with different
signatures)
* reverted
0042463, the internalerrors were caused by a bug in the LLVM typed
constant builder
* some runtime errors fixed, if compiled with -CrR
* don't apply user-specified constant alignments to RTTI data
- fixed check for determining whether requesting the size of an array is
an invalid operation after
0042479, as regular arrays can have high=-1
(mantis
0035874, already checked by trange3)
* generate correctly aligned string RTTI, fixes trtti7 on ARM
* fix writing of floating point attribute parameters
+ enable the win16 internal linker if the compiler is compiled with the
WIN16_INTERNAL_LINKER define. Since the win16 internal linker isn't completed
yet, this define is not enabled by default.
* (non-ancient) Delphi versions that accept explicit ordinal -> floating
point typecasts behave the same as FPC (convert the value) rather than
as Turbo Pascal (reinterpret the bit pattern) (mantis
0035886)
* use the size of the generated anonymous record instead of the manual tracked size so that any padding is picked up as well
* set sharedlibext for win16 to '.dll'
+ implemented TNewExeOutput.GenerateLibraryImports, based on the ogcoff implementation
+ fpu_capabilities for arm
* some code converted to use fpu_capabilities
* make stack non executable on arm-linux
* insert FPC_THROWFPUEXCEPTION call into the correct assembler list
+ added an ImportLibraryList property to TOmfObjData
+ added method TOmfObjData.AddImportSymbol, which adds symbols, imported from an
external dll to TOmfObjData.ImportLibraryList (similar to
TInternalLinker.AddImportSymbol)
+ call TOmfObjData.AddImportSymbol for every ImpDef record read from an object file
+ also add and resolve import symbols coming from OMF object modules
+ create a TNewExeSection class
+ split the win16 executable into sections
+ added an TNewExeOutput.Order_ObjSectionList override and sort obj sections by
class name first, then by name, then by initial order
+ write the NewExe header in TNewExeOutput.writeData
* don't crash in TOmfObjSection.MemPosStr if MZExeUnifiedLogicalSegment isn't set
+ added dummy overrides for TInternalLinkerWin16.GetCodeSize, .GetDataSize and
.GetBssSize, because the default ones crash
* fix for Mantis
0035903: apply patch by J. Gareth Moreton to update the copyright year to 2019
* fix for Mantis
0035918: don't set the mangledname for the attribute's constructor function; let the compiler do its job instead
* create NewExe sections, corresponding to 64kb segments
* override MemPos_Start for the NewExe exe output and perform the whole MemPos
stage inside of it, because the linker script contains only dummy section
names and thus none of the sections get their MemPos set, while using the
default implementation
+ add a segment number (MemBasePos) to TNewExeSection
+ introduced TExeSection.MemPosStr - a virtual method for converting the
section's memory position to string for the linker map file. This can be
overriden e.g. for segmented exe formats.
+ added an TNewExeSection.MemPosStr override that outputs a segment:offset string
* combine the data, bss, stack and heap into the same NewExe segment
+ adapted TOmfObjSymbol.AddressStr to show correct segment:offset for NewExe files as well
+ adapted TOmfObjSection.MemPosStr to output segment:offset for NewExe executables
* reset CurrMemPos after each NewExeSection to ensure each segment starts at 0 offset
+ fill the auto data segment number in the NewExe header
+ fill the program entry point address in the NewExe header
+ set the initial SS:SP in the NewExe header
* factored out the conditions under which add nodes need to perform
overflow checks
o in particular ensure that cpu-specific overrides don't perform overflow
checks when nf_internal is set
* an incomplete case statement is not an error in ISO Pascal (mantis
0035910)
* give a compile-time error in ISO/Extended Pascal if the compiler can prove
the case selector value is not handled, and a warning in other modes
(mantis
0035915)
o trigger the case node simplification at the end of the case node typecheck
pass, like for other nodes
Fix internal error by using same code to set checkoverflow variable as in powerpc/nppcadd unit
+ fill the segment table start offset in the NewExe header
+ added the missing NewExe segment attributes as properties to the
TNewExeSection class and create the NewExe segment table into the .exe file.
Not all of the properties are initialized yet, though.
+ initialize the flags for the code and data segments in the NewExe header
+ recognize stack segments and fill the total stack size in the NewExe header
* convert the internal name from IMPDEF records to upper case if the
CaseSensitiveSymbols option is off
+ detect heap sections and fill the local heap size in the NewExe header
m68k/vasm: remove bits of Linux support. this combination has never really been tested or supported, and got broken recently. m68k-elf-linux has good enough GNU binutils anyway
Fix change_endian code to read double and single float data
* Issue file change before line and column change in token writes to allow for better display in ppudump utility
+ write the resource table (empty for now) to NewExe files
+ create the resident name table in the NewExe file writer
+ added constructor to TNewExeResidentNameTableEntry that allows you to
initialize this entry's ordinal number
+ added property that determines the resident name table size in bytes and use
it to fill the offset to the start of the module reference table in NewExe
files
+ fill and write the NewExe imported name table
* small optimization in TNewExeOutput.FillImportedNameTable - only add the
library name once, instead of trying to add it (which causes a look up) for
every imported symbol
+ calculate the table offset of each string in the NewExe imported name table
* strip the '.dll' extension from the library names before adding them to the
NewExe imported name table
* when reading ImpDef records, add '.dll' to the libname if it has no extension,
in order to be consistent with externals, declared in pascal files. The '.dll'
extension will be stripped later, when generating the NewExe file.
+ fill the NewExe module reference table
* fixed wrong typecast in TNewExeImportedNameTable.GetSize
* strip the '.dll' extension from the library name when creating import
libraries as well. This ensures that NewExe binaries, created by the external
linker don't have the '.dll' extension in them.
+ fill the NewExe entry table offset
+ added class for writing the NewExe entry table - not fully implemented yet
+ parse ExpDef OMF records and delegate them to a new method
TOmfObjData.AddExportSymbol (not implemented yet)
+ implemented TOmfObjData.AddExportSymbol - the exported symbols are recorded in
the newly introduced TOmfObjData.ExportedSymbolList
+ assign ordinals to all exported symbols
+ added class TNewExeEntryPoint and methods/properties to TNewExeEntryTable to
make it hold a list of entry points
+ add entry points to the entry table for all exported NewExe symbols
+ write the entry table to the NewExe file
* the resident table entry/table classes renamed "export table", because the
same classes can be used both for the resident and nonresident tables (they
share the same structure)
+ also write the nonresident name table
+ write the module description as the first entry to the nonresident names table
- suppress the warning that the $D directive is not supported on i8086-win16
+ pass the description option to wlink to set the module description string when
using the external linker on the win16 target
+ add all exported by name symbols to the resident or the nonresident name table
+ also copy ResidentName in TOmfObjData.AddExportSymbol
+ enable the ISSHAREDLIBRARY option for the win16 internal linker when creating a dll
+ enable the IsDll flag in the NewExe header when creating dlls with the
internal linker. Also make a SINGLEDATA (instead of MULTIPLEDATA) executable
and entry points in this case.
+ allow creating win16 dlls with the wlink external linker as well
+ added system_i8086_win16 to the supported targets of the i8086 omf internal
assembler/object writer
+ pass the ParmCount parameter from the ExpDef OMF record to the NewExe entry
point
* applied patch by Blaise.ru to reduce code duplication in trecorddef.create_global_internal()
* apply patch by Blaise.ru to pass the record name for an internal record more efficiently
Merge: fc46b6c57c 70a2b0b260
-- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in ».«:
U compiler/i8086/
008086int.inc
U compiler/i8086/
008086nor.inc
U compiler/i8086/
008086rni.inc
U compiler/i8086/
008086std.inc
U compiler/i386/i386prop.inc
U compiler/i386/i386att.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386int.inc
U compiler/i8086/i8086int.inc
U compiler/i8086/i8086op.inc
U compiler/i8086/
008086dwrf.inc
U compiler/i8086/
008086ari.inc
U compiler/i8086/
008086con.inc
U compiler/i8086/
008086nasm.inc
U compiler/i8086/
008086num.inc
U compiler/i8086/
008086stab.inc
U compiler/i386/i386nop.inc
U compiler/i386/i386op.inc
U compiler/i386/i386tab.inc
U compiler/i386/r386ot.inc
U compiler/i386/r386ari.inc
U compiler/i386/r386att.inc
U compiler/i386/r386con.inc
U compiler/i386/r386dwrf.inc
U compiler/i386/r386int.inc
U compiler/i386/r386iri.inc
U compiler/i386/r386nasm.inc
U compiler/i386/r386nor.inc
U compiler/i386/r386nri.inc
U compiler/i386/r386num.inc
U compiler/i386/r386rni.inc
U compiler/i386/r386sri.inc
U compiler/i386/r386stab.inc
U compiler/i386/r386std.inc
U compiler/i8086/i8086prop.inc
U compiler/i8086/i8086att.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/
008086ot.inc
U compiler/i8086/
008086att.inc
U compiler/i8086/
008086iri.inc
U compiler/i8086/
008086nri.inc
U compiler/i8086/
008086sri.inc
U compiler/x86/agx86int.pas
U compiler/x86/rax86int.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/rax86.pas
U compiler/x86/x86ins.dat
U compiler/x86/agx86att.pas
U compiler/x86/cpubase.pas
U packages/rtl-objpas/src/inc/rtti.pp
U packages/rtl-objpas/tests/tests.rtti.pas
U rtl
U compiler/x86_64/x8664att.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/
008664con.inc
U compiler/x86_64/
008664nasm.inc
U compiler/x86_64/
008664sri.inc
U compiler/aasmtai.pas
U compiler/scanner.pas
U tests/utils/avx/readme.txt
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664op.inc
U compiler/x86_64/
008664att.inc
U compiler/x86_64/
008664iri.inc
U compiler/x86_64/
008664rni.inc
U compiler/pp.lpi
U compiler/msgtxt.inc
U compiler/ppcx64.lpi
U compiler/x86_64/x8664pro.inc
U compiler/x86_64/x8664nop.inc
U compiler/x86_64/
008664ari.inc
U compiler/x86_64/
008664int.inc
U compiler/x86_64/
008664num.inc
U compiler/x86_64/
008664std.inc
U compiler/msgidx.inc
U compiler/utils/mkx86ins.pp
U compiler/x86/x86reg.dat
D compiler/x86/cx86innr.inc
U compiler/x86_64/x8664int.inc
U compiler/x86_64/
008664ot.inc
U compiler/x86_64/
008664dwrf.inc
U compiler/x86_64/
008664nor.inc
U compiler/x86_64/
008664stab.inc
U compiler/msg/errore.msg
U compiler/utils/mkx86reg.pp
U tests/utils/avx/asmtestgenerator.pas
U tests/utils/avx/options.pas
U tests/utils/avx/avxtestgenerator.pp
U tests/test/units/character/tissurrogatepair2.pp
U tests/test/units/character/tissurrogatepair.pp
U tests/utils/avx/avxopcodes.pas
U .
-- Aufzeichnung der Informationen für Zusammenführung zwischen Projektarchiv-URLs in ».«:
U .
U packages/rtl-objpas/src/inc/rtti.pp
U packages/rtl-objpas/tests/tests.rtti.pas
U rtl
* compilation on i386 fixed
* intel asm reader: try to read avx512 extensions only if the instruction supports them
* cleanup
- don't create a heap segment for win16
* fixed quoting of the "description" wlink option on Windows
* limit the heapsize to 65520 bytes on win16 (the $M directive in win16 only
sets the size of the "local heap", which is limited to a single segment. The
actual heap in the large memory model is the "global heap", which doesn't have
a set limit, but grows with the memory allocated)
+ fill MinAllocSize in the NewExe segment table
+ fill SizeInFile properly in the NewExe segment table
* fix detection of floating point constants for arm
* fix return registers for hfa's containing singles
* enable TCpuAsmOptimizer.RemoveSuperfluousVMov for VLDR
* fixed TCpuAsmOptimizer.RemoveSuperfluousVMov to be actually applied
Merge: 416c974d3f ad791e8e34
-- Zusammenführen von
0042652 bis
0042673 in ».«:
U compiler/x86/aasmcpu.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042652 bis
0042673 in ».«:
U .
* compilation on i386-linux fixed
* fix BccB2Cond optimization on arm
+ added class, representing a NewExe relocation entry
* reworked arm vfp capability handling to use fpu_capabilites
+ create defines with FPU capabilites
+ make use of FPU capability defines in the rtl
+ basic Neon support in the assembler writer
+ make use of VEOR if possible to clear VFP registers
* forgotten part of previous commit: fix BccB2Cond optimization on arm
* building with -Cfvfpv2 hopefully fixed
* fix tarminlinenode.first_sqrt_real
+ added and implemented method TNewExeRelocation.EncodeTo
* fixed compilation with -Sew
+ added constant NewExeRelocationRecordSize
* fix building for targets with no vfp support
* ensure that aprocdef is initialized to Nil to catch problems with compare_defs_ext() easier
+ x86 makes use of fpu_capabilities
* moved CPUX86_HAS_AVXUNIT to FPUX86_HAS_AVXUNIT
+ mm register allocator can be initialized with 32 mm registers of AVX512
Avoid error with -CR option in tobjectdef.vmt_def method
o overhaul-base.patch by J. Gareth Moreton, base for further patches
+ some inline directives added
+ some functions exported from units
Merge: 9230ae5aab a5e158f8d6
-- Zusammenführen von
0042706 bis
0042724 in ».«:
U tests/utils/avx/avxopcodes.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/rax86.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042706 bis
0042724 in ».«:
U .
* fix RemoveSuperfluousVMov if the VMov destination reg is an integer register, resolved
0035978
+ VMovVMov2VMov optimization
* factored out inlinenode check whether it may have a side effect
o also added register assert as having a side-effect (if asserts are
enabled)
m68k: fpu capabilities support
Avoid range check error for avr/i8086 CPU by changing local variable dist type to asizeuint
+ added and implemented the TNewExeRelocationList class
+ added a getter for the NewExeSegmentFlags property, that returns the
nesfHasRelocationData flag according to whether the Relocations list is
non-empty
m68k: added more cpu capabilities. changed the CG at a few places to actually use them
m68k: rework of the inline nodes to use fpu_capabilities. added fast path for round/trunc (enabled for fastmath only)
* support unique copies of currencies which are handles by torddef, resolves
0036013
+ FMA support for aaarch64
+ AArch64: support for vX.8b/vX.16b register names
+ support for more than 256 registers in the register dat files
- removed totherregisterset
+ AArch64: use vmov to load immediates if possible
+ AArch64: use eor to clear mm registers
+ small command line tool for quick creating of vfp register list in a64reg.dat
somehow committing went wrong, second part of last commit:
+ AArch64: support for vX.8b/vX.16b register names
+ support for more than 256 registers in the register dat files
- removed totherregisterset
+ AArch64: use vmov to load immediates if possible
+ AArch64: use eor to clear mm registers
* another missing part of
0042916 ...
* avoid that -0.0 is handled by the eor optimization
m68k: try to optimize realconst operands into B/W/L sized integer operands. these are shorter to encode - which almost always means faster on m68k
+ AArch64: FoldShiftProcess optimization
m68k: refactoring to use fpu_capabilities at more places instead of hardwiring certain fpu types
m68k: refactor some code to not fail when the tasmop set will be bigger than 256 elements
m68k: added the most important FPU instructions with explicit rounding precision (eg. FSADD/FDADD)
m68k: added the remaining instructions with explicit rounding precision. fixed fsflmul to be fsglmul (this is also typo in the original 68k PRM)
m68k: more refactoring for fpu_capabilities instead of hardwired fpu types. 68040 and 68060 fpu types should now work
Suppress range check/invalid typecast errors when compiling with -CriotR option
m68k: added some handling for the explicit precision FPU instructions in the spilling and optimizer. fixed a_fsabs and a_fdabs names
m68k: make sure we're not trying to allocate a subregister for float paras when R_SUBWHOLE <> R_SUBNONE
m68k: use cpu_capabilities when deciding to inject scaling into a ref. also allow scaling in more cases.
m68k: cleanup of the ancient mess from cgsize2subreg
+ AArch64: CMPB.E/NE2CBNZ/CBZ optimization
+ AArch64: implemented TCpuAsmOptimizer.OptPass1Data
+ AArch64: FoldShiftProcess fixed
m68k: added CPUM68K_HAS_BYTEWORDMATH and CPUM68K_HAS_INDEXWORD capabilities
m68k: build fix (premature commits are the root of all evil too)
* support taking the address of labels defined in assembler blocks in the
LLVM code genrator (for the rtti unit's thunk hacking)
* different definitions for the same Objective-C class (can happen with
external class declarations) need a type conversion in LLVM (because
they're represented by different LLVM types)
+ AAarch64: TCpuAsmOptimizer.OptPass1Shift makes use of RemoveSuperfluousMove
+ AArch64: implementation of taarch64casenode.genlinearlist
* document how tgotonode/tlabelnode copying works
* fixed loading the address of a copied labelnode in a loadnode
(mantis
0035877)
* fix potential crash with copied goto nodes on nestedparentfp platforms
o as described in the comment for the tgotonode.labsym field, it will
be null for copied gotonodes
* changed resulttype and firstpass processing from recursion into loop, based
on patch/idea by J. Gareth Moreton (as part of his patch in
0035857)
* fixed occasional rounding error with currency constants on the LLVM targets
(fixes test/tcustomattr13.pp)
+ add "thunk" attribute for stubs/thunks and emit it for LLVM
- also removed wrong "noreturn" attribute for interface thunks generated
for high level code generator targets
* cutils.pas (size_2_align): Move to..
globals.pas (size_2_align): ...here.
Change parameter type to asizeuint to avoid overflows.
(var_align_size, const_align_size): Also change parameter type to asizeuint.
i386/cpupara.pas, i8086/cpupara.pas, x86_64/cpupara.pas: Add globals
to implementation uses clause because of size_2_align move.
* assemble.pas (TInternalAssembler.TreePass0): Avoid range/overflow check error.
(TInternalAssembler.TreePass2): Check that objsymend and objsym are in same section
and avoid range/overflow check error.
m68k: add subregisters. on 68k, these are not as universal as on x86 and work differently, but the compiler needs this infrastructure to do 16bit math (which is a massive improvement on '000) or word-size indexes on CPUs which support it
m68k: allow vecnode to use word size index registers
m68k: also handle OS_64 register sizes in cgsize2subreg
* try to avoid to use pic based calls
* if we load a got depends only if one is needed, not if PIC is generated as this could be also caused by tls support
+ x86-64: implemented support for relocation needed by tls threadvars in the binary elf writer
* we have to use __tls_get_addr from the dyn. linker lib else tls on programs with pure pascal dyn. libraries fail
+ support tls threadvars with the internal assembler
+ command line switch -CV to select the threadvar model for section threadvars
* section thread vars need to be access with the symbol type AT_TLS
* the general section threadvar model needs a got but pic is not required
* loading a got depends only on the fact if a got is needed and not if pic shall be generated
* be able to set an AT_* for datablocks
* set AT_TLS if needed
* fix LLVM compilation after
0043076
* add "readonly" attribute for constant pointer parameters on LLVM
* finally implement tdynamicarray.equal so that exact match comdat sections work as well
* disable the use of C-operators inside the compiler's sources
* renamed tls model switches and symbols to match gcc
+ new relocations for arm tls
* it must be decided in g_maybe_tls_init if a tls is loaded
+ tls models tlsm_general_dynamic and tlsm_local_exec for arm
+ support for the gnu2 general-dynamic tls model on arm, use it instead of the gnu one as the gnu2 one can be relaxed (access optimizations by the linker)
+ support pic relocations in the internal assembler writer
* it must be decided in allocate_tls_register if a tls register is allocated
* general-dynamic -> global-dynamic
* arm-linux uses dwarf debug info by default
+ dwarf support for tls threadvars
* several linux targets switches from stabs to dwarf
+ support for arm attributes
* abi notes fixed
* compilation of x86 and PowerPC fixed
* reduce amount of software floating point exception checking, VSTR, VMOV, VLDR do not raise those
* moved array stride back to array entry (mantis
0036144)
* fixed peephole opitimizer removing some infinite loops (mantis
0036139)
+ x86: LeaLea2Lea optimization
+ LeaCallLeaRet2Jmp optimization
+ makefiles use -Sew, so added to the project as well
* updated for new format
* fix Dwarf 3 array location broken in
0043171 (fix by Martin Friebe,
mantis
0036144)
* don't try to bitpack arrays of non-ordinals (mantis
0036157)
* give an error if an explicit enumeration valid exceeds the valid range, resolves
0034633
Fix parsing error in GNU linker script, KEEP needs braces
* i386: with a fixed stack, exception handling does not need a frame pointer
* change TObjData.sectiontype2options to a class function so that it can be called without an instance of TObjData
+ add a method to TObjData to retrieve the TSectionProcBits and TSectionFlags values for a given section type
* fix for Mantis
0036174: correctly initialize secprocbits and secflags given the section type
* generate better code for length(
)=0, resolves 0036060
* fixed compilation for Darwin and AIX after addition of section attributes
* optimizing length()=0 is not possible for jvm
* fixed i8086 compilation after
0043265
Merge: 5bfebeea4e 99d44ce40e
-- Zusammenführen von
0042725 bis
0043306 in ».«:
A tests/webtbs/tw32219.pp
U tests/utils/avx/avxopcodes.pas
U tests/utils/avx/asmtestgenerator.pas
U compiler/i386/i386tab.inc
U compiler/i386/i386nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/i8086nop.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/x8664nop.inc
U compiler/x86/aasmcpu.pas
U compiler/x86/x86ins.dat
U compiler/x86/rax86.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042706 bis
0043306 in ».«:
U .
Fix compilation error for i8086 cpu target
Change parent class of trv32aatreader to trvattreader
+ include -Avasm into the help screen
morphos: in SDK 3.14, the binutils is finally upgraded to 2.32 (from 2.9.1), which makes section smartlinking working with binutils, and also has finally properly working stabs relocations for lineinfo, etc. so it's the default again both cross and native compilations
* more precise estimation of subscript node complexity
* load nodes for variables in registers do not generated instructions, so their complexity is zero
* clean up TX86AsmOptimizer.OptPass1MOV
* optimize TAOptBase.SuperRegistersEqual
+ MovMov2Mov 6 and MovMov2Mov 7 optimization
* fix length(
)=0 optimization, resolves 0036215
* also type casts to booleans benefit if unneeded type widenings are removed
* fix compilation on PE/COFF based systems with GNU AS as there the progbits are not supported
* fix for Mantis
0036223: when parsing a helper type its extendeddef might be Nil
+ added test
* avr: apply LdiOp2Opi optimization also to and and sub
+ add a Flush method to TExeMap which is useful when debugging internal errors or crashes where the exemap instance has not yet been destroyed
* allow cmov with memory reference if it is a pure symbol or a rip relative symbol: as the symbol is
allocated within the image of the program, this should never cause a seg. fault, so it is save
to use cmov with it
* unified TX86AsmOptimizer.OptPass1MOVAP and TX86AsmOptimizer.OptPass1VMOVAP
* CallRet2Jmp works with PIC
* more aggressive LeaCallLeaRet2Jmp
Avoid warnings for m68k compiler
* replaced tentryfile.get/putsmall/normalset() with a common tget/putset
that expects an open array of byte, and use it for all sets
o since all sets need to be typecasted to an array type of the appropriate
size, we'll get a compilation error in case this needs to be done and
that also tells us at the same time that the ppu version will need to
be increased
* enabled {$packset 1} for the compiler, as this is now safe with the above
changes
* do not allocate an extra register for some integer operations if not needed
* removed accidently committed debug statement
* update generic linker script
* do not write section flags/progbits for .data, .rodata .data.norel as the compiler will ignore them anyways and warn about it
* parameters declared as out must be initialized
* fixed default value for progbits
+ MIPS: take care of setnoat
* read more types of references properly
* patch by J. Gareth Moreton, issue
0036271, part 1: general rework of the jump optimizer
* patch by J. Gareth Moreton, issue
0036271, part 2: x86 specific rework of the jump optimizer
* patch by J. Gareth Moreton, issue
0036271, part 3: support for the other architectures
Merge: e1e8986462 47bb71efc4
-- Zusammenführen von
0043307 bis
0043443 in ».«:
D tests/webtbs/tw32219.pp
U compiler/i386/i386att.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386int.inc
U compiler/i386/i386nop.inc
U compiler/i386/i386op.inc
U compiler/i386/i386prop.inc
U compiler/i386/i386tab.inc
U compiler/i8086/i8086att.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086int.inc
U compiler/i8086/i8086nop.inc
U compiler/i8086/i8086op.inc
U compiler/i8086/i8086prop.inc
U compiler/i8086/i8086tab.inc
U compiler/x86/x86ins.dat
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664att.inc
U compiler/x86_64/x8664int.inc
U compiler/x86_64/x8664nop.inc
U compiler/x86_64/x8664op.inc
U compiler/x86_64/x8664pro.inc
U compiler/x86_64/x8664tab.inc
U tests/utils/avx/avxopcodes.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042706 bis
0043443 in ».«:
U .
* swapped decrefs and StripLabelFast as proposed by Gareth on the mailing list
* fix and improve MovImul2Imul: we cannot insert the move target into imul if the imul is 64 bit and the mov 32 bit as
we cannot ensure that the upper 32 bits of the move target are really clear
* load left properly into a register in tx86addnode.second_addordinal, resolves
0036287
* packed tabstractvarsym.addr_taken/different_scope fields into a set
* patch by J. Gareth Moreton to clean up TX86AsmOptimizer.OptPass2Jcc, resolves
0036295
* improve ShlAddLeaSubIncDec2Lea to take care of foldable LEAs
* patch by J. Gareth Moreton: fix compilation with debug info after
0043441 and friends, resolves
0036299
+ LeaOp2Op optimization
* replaced some manual removels of p by RemoveCurrentP calls
+ added comments for LeaOp2Op
* be carefully with references using RIP when doing LeaOp2Op optimizations
* check in the internal assembler for references with incorrect use of RIP
+ test
* do not remove cfi_endproc after jmps
+ separate JUMP_DEBUG define
* i386 does not use anymore its own assembler optimizer loops
* i386: more clean up of TCPUAsmOPtimizer.PeepHoleOptPass1Cpu
* patch by J. Gareth Moreton: fix building for armv6m after
0043441
* disable condition jump optimization on MIPS for now for the time being
* optimization Move removed 4 fixed
* fix usage of ppumove generated shared libraries
* values passed to const parameters are not limited to registers and constants
* relax conditions in tcallnode.optimize_funcret_assignment, resolves
0036279
* MM registers which might not be changed can be still used in 3 op mathematical operations as source
Fix invalid typecast revealed by -CriotR by changing order of terms in boolean expression
o patch by J. Gareth Moreton:
* fix jump optimizer for MIPS(EL).
+ New method called "MakeUnconditional" introduced that can do platform-specific changes
* do not generate conditional jump with full references
+ more assembler optimizer output
+ patch by J. Gareth Moreton: new method TAOptObj.CanDoJumpOpts and arm specific implementation
* write assembler optimizer messages into output file if DEBUG_AOPTOBJ is set
Use same entered_paren local variable as 64-bit counterpart and fix register names
Fixes by Gareth Moreton for problems exposed by use of -CriotR option
* make use of RemoveCurrentP
* also generate indirect symbols for AB_PRIVATE_EXTERN symbols as these might be used from a unit in another package due to inlining
* ensure that nothing assembly related is generated for generics when a typed constant (this also includes local variable initializations) are parsed
* restore localswitch settings after the initialization and finalization code was generated
* reference FPC_ABSMASK_SINGLE/-DOUBLE using the indirect symbol if required for dynamic packages
* register constant symbols
* symbols called by g_call might need to be imported from dynamic packages as well
* check the localswitches of the node instead of the global ones
* correctly check for the system unit
* ensure that generic symbols are not tried to be exported
* when creating the static field of a generic, insert it into the generic instead of the global symtable as it isn't really used anyway
* the VMT of the exception class needs to be referenced indirectly
* keep track of static symbols that a global function references, as those must now be exported from a dynamic package as well if the function can potentially be inlined
* the symbol of the interface wrapper function needs to be considered as referenced as well
+ add a description for the link_e_comdat_selection_differs message
+ add error messages for undefined symbols (both with a known object file and without)
* regenerate msg*.inc files after adding new error messages for undefined symbols
* use translateable error messages for undefined symbols and also report in which object file the symbol was first found
* fix condition for including a unit's object files or not when compiling with packages
* use a different name for the packages' entry point and use _DLLMainCRTStartup as an alias to avoid problems with the C-prefix
* ensure that the required functions are referenced for Win32 SEH for packages as well
Patch by Gareth Moreton.
* TAOptObj.CollapseZeroDistJump: Change hp1 to local variable,
initialized as p.next, to avoid problems of dangling pointers
revealed by use of "-CriotR -O2" compilation arguments.
Use correct macro to for 64-bit riscv CPU
Minimalist change to avoid Invalid Typecast error on class when compiled with '-CriotR -O2' for i386-go32v2 target
o patch by J. Gareth Moreton, resolves
0036352:
* The supplied patch cleans up some vestigial code from the i386 peephole
optimizer that has since been superseded by the jump optimisations over
at
0036271.
* The PrePeepholeOptsCPU method has had a minor restructuring to better
handle the rare case where InsContainsSegRef() returns True and
p becomes something that is no longer an instruction (it ultimately
removes a conditonal check and some overhead from repeated function calls).
* factored out TX86AsmOptimizer.OptPass1Cmp
* fixed it
* activated it for x86-64
- removed code not used for years
* more RemoveCurrentP usage
+ optimize integer expressions like 2*x*4; which were not found by the node simplifier yet
* cleaned up safecall support: use a hidden localvarsym instead of result
register hacking
o this also allowed fixing/adding safecall support for LLVM
o patch by J. Gareth Moreton:
* adds an extra optimisation to "PostPeepholeOptMov" in compiler/x86/aoptx86.pas:
If the instruction "MOV REG, -1" (Intel notation) is found, where REG is either
a 32- or 64-bit register, it is changed to "OR REG, -1" instead.
The effect is the same and takes exactly the same speed to execute, but the encoding is much smaller.
As it cause false data dependencies, it is only applied in -Os mode
For 16-bit registers, only AX is optimised this way because it has its own encoding for OR that takes fewer bytes.
* fixed safecall for non-LLVM after
0043578
* fix Linux/i386 and Win32 after
0043578
* treat a missing genericdef with no symname set as an internal error
- the error recovery handling is no longer required
* warn only in delphi mode if an explicit enumeration value exceeds the range, relaxes
0043191
o patch by J. Gareth Moreton, resolves
0036355
+ This patch serves to extend the JMP -> RET optimisation in OptPass2JMP by also doing the same
for JMP -> MOV/RET, since there are often cases where the result (e.g. EAX) is set just
prior to the function exiting.
* RemoveDeadCodeAfterJump will now drop out if it detects SEH information -
this stops exception information from being stripped if it is called on the final RET instruction.
o patch by J. Gareth Moreton, seeks to improve maintainability, safety and efficiency
in the peephole optimizer by slightly modifying some function headers based
on their intended purpose, resolves
0036353
* Non-virtual methods and class methods that don't need to access any fields from
the current object are now static methods, thus removing the hidden "Self"
parameter and reducing overhead. This includes a large number of
frequently-used functions such as SkipEntryExitMarker and SuperRegistersEqual.
* GetNextInstruction, GetLastInstruction, SkipEntryExitMarker and
SkipLabels have had their 'var' parameter changed to an 'out' parameter because
they shouldn't depend on its input value. This will cause the compiler to throw warnings
if you start using the value without initialising it first, and may open up optimisation
opportunities in the future (e.g. storing written values in a temporary register
and only writing it to the actual variable when the routine exits).
* do not convert cmp 0,... into test ...,... before the post pass of the peephole optimizer
as this conversion might result in missing further optimizer opportunities
Also accept -a5 for older binutils for mips and mpisel cpus
Add '.module nomips16' at assembly entry for mips/mipsel unless -a5 option is used
Fix trv32notnode, by using same code as for riscv64 CPU
Change parameter type to tcgint for is_imm12 and is_lui_imm functions to avoid range check errors
* unified internalerror, resolves
0036378
* patch by J. Gareth Moreton: x86 implementation of RegModifiedByInstruction, resolves
0036376
* better error recovery, resolves
0036377
Add explicit smallint typecast to first marameter of SarSmallint call to avoid range check errors
Comparison nodes are always in LOC_REGISTER, never in LOC_JUMP for riscv32 or riscv64 CPUs
* use tdef.unique_id_str to generate the unique internal name for anonymous record defs as using the count of the deflist is no longer correct
* adapt register if the size of the paraloc and the register differ, resolves
0034409
* simplified and improved TX86AsmOptimizer.RegModifiedByInstruction
+ add a method to tdef to initialize the defid from within a constructor
* initialize the defid in trecorddef.create_global_internal as unique_id_str needs it
* apply (adjusted) patch by Blaise.ru: vmtentries is always created since 2008, so treat it as such (also fixes a memory leak in tobjectdef.getcopy)
* apply patch by Blaise.ru to remove last remnants of VMT regeneration which is no longer needed/used
* better error recovery, resolves
0036397
* check in CheckLive* if a register allocator is initialized for a certain register type
o patch by J. Gareth Moreton, resolves
0036371:
* This patch makes some minor improvements to the cross-platform code that deals with jump optimisations.
More specifically, it attempts to do more in a single pass which has the nice side-effect of
fixing a couple of minor mistakes (in some situations, it would erroneously remove an alignment entry).
- Most improvements are with dealing with Jcc/JMP pairs and their equivalents on other platforms, by
collapsing label clusters and stripping dead code as soon as it has enough information to do so, and being
more intelligent before calling Continue to see if another optimisation can be performed in the same sitting.
- RemoveDeadCodeAfterJump is now a function that returns True if a jump was found among the dead code,
thus allowing the ability to flag the peephole optimizer for another iteration of Pass 1 - the
destination label may have appeared earlier in the code and become dead as a result of the removal
of the jump, thus opening up new optimisations with instructions that sat either side of the label.
- Preliminary tests show that it does sometimes reduce the number of passes required to optimise a subroutine
under -O3.
* fix J. Gareth Moreton to resolve
0036389
* Remove duplicate ibextraheader handling.
* Move SymAnsiStr boolean setting inside parseextraheader function.
* Only accept same CurrentPPULongVersion in parseextraheader function.
* TVMTBuilder.build_interface_mappings does not need to be public (based on patch by Blaise.ru)
* move the common sequence to build a VMT for an objectdef into a separate procedure (based on a patch by Blaise.ru)
* clear up file comment (based on patch by Blaise.ru)
* more correct method names (based on patch by Blaise.ru)
* fix number of last parser_* message entry
* use value_real rather than value_curency when writing currency
realconstnodes (fixes tcurrency1, tw33439 and tw36179 with LLVM)
o we need to load the fpu representation of the currency values,
not the scaled currency value
- removed LLVM support for clang < 7.0 and Xcode < 10.0: those versions
contain various bugs and can't even complete "make all", so there is no
point in keeping them
o changed default LLVM target version to 7.0
* regenerate msg*.inc files after adding a new error message related to C blocks
+ recognise LLVM 9.0 (no changes needed compared to LLVM 8.0)
* patch by J. Gareth Moreton to fix an ie 2018061400 on darwin
* in PeepHoleOptPass1Cpu when an instruction contains a segment, don't replace the current instruction with the next, cause then we get an infinite loop when compiling on Win32 with -dTEST_WIN32_SEH -O4
+ MULX instruction
* change information for RORX corrected
+ make use of mulx instruction, if available
* patch by Bart Broersma to allow to declare "LongInt = AnsiString" comparison
operator in non-macpas modes, resolves
0029460
* do not crash when an unsupported code page is encountered, resolves
0035581
* optimize case statements with a single branch into if statements (ord const only)
* last commit was not complete/earlier version committed
* common naming for fpu_none string
+ tf_init_final_units_by_calls
* arm-embedded generates direct calls for unit init/final now as well
* renamed getintparaloc to getcgtempparaloc
o it can be used for more than integer parameters
* support for marking arraydefs as vectors
* LLVM support for writing vector types
* fix paraloc def for vectors with vectorcall calling convention (was a single
element instead of a vector)
* fixed writing of calling convention for function declarations/definitions
in LLVM
* added is_normal_fieldvarsym() helper and use it
o fixes several places where there was a check whether something is a
fieldvarsym, but not whether it's an instance rather than a class field
* increase support for multilib binutils for RISC V by passing the ABI to the assembler
* increase support for multilib binutils for RISC V by passing the correct ABI to the linker
* correctly handle local reference in the RISC V assembler readers (both 32 and 64 bit)
* when copying goto nodes take care if the label node is part of the copied tree
or not, resolves
0035820
* write a proper error message if
/ is encountered while no
floating point support is available, resolves 0032006
* use 64 bit code page in tppcshlshrnode.pass_generate_code for all 64 bit types,
resolves
0033582
* correctly handle reading of class/object pointers in combination with @, resolves
0026326
+ support for LLVM metadata constant string parameters
o they are implemented as a new metadata register class, whereby the
subregister indicates the metadata type (currently always a string)
and the superregister is an index in the metadata array (which
contains the strings). LLVM metadata can only be passed as parameters
to intrinsics in bitcode, so moves of metadata into other registers
triggers internal errors and when moving them into parameters, we
replace the parameter's register with the metadata register (and look
up the corresponding string when writing out the bitcode)
* support nf_internal to ignore currency conversion adjustments also on
platforms that implement currency using a floating point type
* record whether a function uses fastmath, and define the function as
strictfp if it doesn't (so LLVM doesn't perform transformations that can
change the fp/exception behaviour)
* use constrained LLVM fp intrinsics for add/sub/mul/slash/fma/sqrt
operations when fastmath is not enabled
* use LLVM constrained fpext/fptrunc intrinsics when fastmath is not enabled
for accurate exception behaviour
* fix LLVM code generator after
0043808
o share the high/length code for LLVM rather than duplicating it, since
LLVM will optimize away the minor inefficiencies
o removed temp reference in the old code, as it was useless (it doesn't
prevent spilling to get to an SSA representation since the same
register is written at least twice in all cases)
* set default target iOS/iPhoneSim version to 9.0 so we no longer depend
on crt.o existing, which is not shipped with the current SDKs anymore
* unified loadnf_load_self_pointer into loadnf_load_addr
+ var parameters are now allowed when doing tail recursion optimziation, resolves
0032811
-- Zusammenführen von
0031198 in ».«:
C compiler/arm/aasmcpu.pas
U compiler/arm/aoptcpu.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0031198 in ».«:
U .
* the llvm.experimental.constrained.fpext intrinsic doesn't have a rounding
mode parameter
* support for constrained sitofp/uitofp with (the upcoming) LLVM 10.0
(fixes most of test/units/math/troundm, although there's still an LLVM
optimizer/code generation bug that breaks some qword -> double
conversions)
* use maytrap instead of strict FP exception behaviour in LLVM, so constant
propagation is still allowed
* fixed missing sign extension when adding a signed integer variable with
size < sizeof(pointer) to a pointer for LLVM (fixes tfmtbcd)
* fixed (harmless) wrong typecast
* fixed TAOptBase.SkipEntryExitMarker() not initialising out parameter in
all cases (patch by J. Gareth Moreton, mantis
0036372)
* Add riscv-embedded to targets that don't support non-constant leb128's.
* triggered by
0036505, removed CmpJxxDecJmp2SubJcc optimization as it was wrong anyways
* look further forward in TX86AsmOptimizer.OptPass1_V_MOVAP
* x86: avoid to put variables into registers if they are handled by the x87-FPU
+ MovMovMov2XChg optimization by J. Gareth Moreton
* copy fpu parameters using fld/fst onto the stack
* fixes TX86AsmOptimizer.OptPass1_V_MOVAP after
0043855
* avoid invalid type cast
* let the operation do the type conversion for x87 floating point operations
* Fixed safecall on win32 with -Ooregvar by making sure that $safecallresult
is never stored in a register.
+ infrastructure to profile different stages of the compiler
* missing part of last commit
* fix X86AsmOptimizer.RegModifiedByInstruction for VMOVSS/VMOVSD/IMUL
o patch by J. Gareth Moreton:
* applies some optimisations to OptPass1MOV. Repeated checks to the "GetNextInstruction_p Boolean"
variable are factored out, since all of the optimisations bar the first one require a
succeeding instruction.
* add forgotten exits, fixes
0043874
* do prefetching correctly
* more prefetching inserted
* unnecessary/wrong UpdateUsedRegs removed
* fixed for targets where currency is implemented via int64 after
0043829
* AArch64: fixed parameter defs for smallsets passed in registers whose size
is not a power of two
* handle non-smallset sets in registers in LLVM like arrays and records
* constrained sitofp is not yet supported in LLVM for all targets
* LLVM/AArch64: don't perform the parameter location extension workarounds
for LLVM, as that results in LLVM assuming exactly the opposite of
what's intended (namely that the extended locations contain valid
rather than invalid bits)
* accept locals replaced by symbols in inline assembly by the LLVM code
generator in the AArch64 assembler writer
* explicitly emit a sub instruction in tx86inlinenode.second_high, resolves
0036530
+ CalcUseSum: calculates a sum of all use sets of the current node and its children
* renamed sum -> defsum to avoid confusion with usesum
* factored out tcgprocinfo.OptimizeNodeTree
* moved conversion of for into while loops in a separate pass, so node optimizations on the node tree can be
carried out without losing information from for loops
* some fixes to loop strength reduction
* more fixes for loop strength reduction
* patch by J. Gareth Moreton: EAX -> EDX:EAX sign extension shortcuts, and MOVSX shortcuts for AX register, part 1 of
0036551
* patch by J. Gareth Moreton: EAX -> EDX:EAX sign extension shortcuts, and MOVSX shortcuts for AX register, part 2 of
0036551
* patch by J. Gareth Moreton: Some cleaning up of OptPass2JMP and OptPass2MOV, resolves
0036553
* compilation on i386 fixed
* ensure the rtl and the packages for embedded compile with features exceptions and classes disabled
- Handle jump optimizations on RISC-V
- RISC-V: Share optimizations between 32 and 64-bit.
- RISC-V: Add controller types for common RV32 MCUs.
- Adds initial controller units for these MCUs.
Code contributed by Michael Ring
* first part of merging parts of Jeppe's intrinsics patch, mainly
0031135
is merged by this commit with a lot of adaptions
* voidcodepointertype => voidpointertype as suggested by Pierre
* do for-loop unrolling after for-loop simplification, resolves
0036589
* patch by J. Gareth Moreton: get rid of another pass through the assembler list by integrating OptReferences
into the post optimizer pass
+ insert alignments after break/goto/exit/continue jmp instructions, if it is
superfluous, the assembler optimizer will take care of it
* enable tail recursion optimization also for const and constref open arrays
+ added test
* also allow by-value open array parameters for the tail recursion optimization
* adjusted test
* fix for
0032352: a unit does not need to be re-deref'ed if it just had been recompiled
* patch by Robert Roland to support the RaspberryPi 2 as a bare metal embedded target, resolves
0035236
* take care of m_duplicate_names when checking for duplicate locals, resolves
0033221
* patch by J. Gareth Moreton: x86 CMP/TEST/Jcc optimisations, resolves
0036624
* patch by J. Gareth Moreton: x86 SUB and LEA optimisations, resolves
0036622
* avoid internalerror for dec/inc(...,v) with v>high(int64), resolves
0035298
* do_loopvar_at_end is not possible if the loop counter would overflow with
the last iteration
* last commit fixing calculation of do_loopvar_at_end was not complete,
hopefully finally fixed
* take care of for loop counter read after loop
+ in some language modes the loop counter is undefined after the loop by language definition
* do not throw a warning about unreachable code if the responsible node was generated internally
*
0042239 broke the tw13948b test for aarch64. Fixed this and improved the test.
* Removed lot of unused local vars. It is useful to turn on the notes in options. :)
* Removed inline since it is not supported with open array parameters.
* improve LeaLea2Lea optimization
* fix internalerror if adding the object info for LLVM requires creating new defs
* disable cs_opt_regvar on all platforms when compiled for LLVM (LLVM does
that itself, our LLVM code generator can't handle it, and if it did then
afterwards we would have to spill 90% of those register variables again
to make them SSA)
* use same Windows platform name as clang
* never inline routines that call get_frame (otherwise get_frame would return
the frame of the caller rather than of the current routine, which could
cause e.g. stackframes to be missed in RTL helpers that are known to be
only called from run time error routines)
+ new pio_inline_forbidden flag to indicate that while parsing the
implementation the compiler determined the routine must never be
inlined
o difference with po_noinline: can also be set in the implementation
o difference with pio_inline_not_possible: it indicates that e.g.
LLVM must not inline the routine either
* safecall support is meanwhile generic, so enabled for all linux targets
* might_have_sideeffects takes care of absolute
* when optimizing boolean expressions, might_have_sideeffects is only relevant if the expression would be optimized away
+ might_have_sideeffects takes care of vo_volatile now (it is not exposed yet)
* patch by J. Gareth Moreton: x86 "OptPass1MOV" improvements - Part 2, resolves
0036608
* armhf/armel aligns sections to 16 byte, so allow a maximum c alignment of 16
* fixes copying of tcgpara
* fix PowerPC compilation
* patch by J. Gareth Moreton, avoid illegal MovAdd2Lea and MovSub2Lea optimziations, resolves
0036630
* added information about -M allowing to specify modeswitches
* patch by J. Gareth Moreton: CMOV extensions: frame/stack pointer relative references are always valid, resolves
0036675
* patch by J. Gareth Moreton: conditional Jump Inversion stoploop variable, resolves
0036680
Modify code to avoid error when compiling with -CriotR option
* patch by J. Gareth Moreton: deadstore removal improvement, resolves
0036669
* Fixed
0043577 for cases when the size of the new result of a simplified node after typecheckpass is smaller than the size of the original node's result. This caused internal errors or invalid assembly in some cases. Issue
0036587.
* patch by J. Gareth Moreton: processor-aware MOVZX optimisation cleanup, part one of
0036687
* fixed Mov2Movz optimization
* simplified TX86AsmOptimizer.OptPass1Movx
* patch by J. Gareth Moreton: cleanup TX86AsmOptimizer.OptPass1MOV after DeepMov changes, first part of
0036670
* do not fold constants if the resulttypes do not match, improved fix for #tw26587
* patch by J. Gareth Moreton: cleanup TX86AsmOptimizer.OptPass2MOV after DeepMov changes, second part of
0036670
* fix for Mantis
0036652: gracefully handle the error if one tries to implement a method of a type from another unit
+ added test
* regenerate msg*.inc after last commit
* do not allow constraints in headers of procedure implementations in delphi mode, resolves
0036584
* better error message if a constraint is found at a wrong location
* make maxpushedparasize a SizeInt: it must store an address size and not an alu value
* set nf_* correctly when an inc/dec node is converted into an add/sub node
* do not firstpass during dead store removal as it disturbes the for each calls
+ propagate constants across call nodes
* patch by J. Gareth Moreton: optimize MOVSXD as well, resolves
0036700
* fix global generic functions with constraints in mode Delphi by handling implementations with defines outside of parse_generic_parameters
+ added tests
* there is no exit stackframe needed if a subroutine never returns
+ CallRet2Call optimization
* (V)MOVA*(V)MOVS*2(V)MOVS* 1 optimization
* fixed tdel1/2 tests again for AArch64/LLVM
* AArch64 and i386: omit exit stackframe, same as
0044191 for x86-64
* in case a 32x32 -> 64 multiplication is converted into shl, the type casts need to be restored
* fold also pointer additions/subtractions
+ AAarch64: optimize divisions by constant
* revert accidently committed code
Fix linking error, in which libc.so.6 is not found on aarch64-linux when libdl.so is loaded, by adding appropriate directory
+ AArch64: profiler support for aarch64-linux
* reverted accidently committed changes again
* throw an error if the forward interface type and the actual interface type do not match, resolves
0036720
* (modified) patch by J. Gareth Moreton: processor-aware MOVZX optimisation cleanup, resolves
0036687
* debug statement removed
* track used register better: if a deallocation is moved/removed, the used register may not be removed from the current register used register set
* LeaCallLeaRet2Jmp is done in TX86AsmOptimizer.PostPeepholeOptLea
+ GetNextInstructionUsingRegTrackingUse
* better MovAnd2Mov optimization
+ TOptsToCheck to track expensive optimizations, needs more work
* ARM: optimize mov rX,#0 .... mul/mla/umull ...,rX,...
+ ARM: MovMLA2MUL optimization
* ARM: look further ahead when optimizing mov rX, yyyy
* ARM: fix Mov0 and MovMLA2MUL optimizations
* several fixes to get better reg. allocations in the arm assembler optimizer
+ take care of addn and subn in is_loop_invariant
* improve is_loop_invariant for load nodes
* CallRet2* optimization may not misalign the stack, reported by C Western on fpc-devel
* fixed JccAdd/Inc/Dec2*Adc/Sbb optimizations
* calculate complexity of an rtti node correctly
* more use of RemoveCurrentP(p)
* fix precedence of IS operator, resolves
0035909
+ JccAdd2SetccAdd optimization
* take care of C_C/C_NC in JccAdd/Inc/Dec2(Cmc)Adc/Sbb
* simple record accesses have not side effects
* do not do full boolean evaluation on LOC_FLAGS
* fix Peephole Optimization: Cmpcc2Testcc - condition AE/NB/NC/NO --> Always optimization
movhlps/movlhps only take xmm registers.
Handle spilling of SSE registers.
Add most SSE instructions as intrinsics.
* Show message about creating fppkg/conf.d directory
* add FreebSD to weaklinking targets.
+ OptimizeForLoop: convert for-loops into zero-based backward for-loops if possible, for most architectures, this results in simpler code
+ Xtensa: register information
+ Xtensa: lazarus project
+ Xtensa: initial skeleton completed
+ xtensa-embedded support in the compiler
+ Xtensa: support in the build utilities
* Xtensa: completed compiler skeleton
+ Xtensa: basic operations for Xtensa implemented
* Xtensa: initial controller types
+ Xtensa: a_loadaddr_ref_reg implemented
+ Xtensa: CALL0 abi started
cgcpu: Implement a_cmp_reg_reg_label
xtensa: Add preliminary support for comparisons
tgobj: Change direction of stack.
makefiles: Add support for xtensa-embedded target.
+ Xtensa: tcgcpu.a_load_ref_reg
+ Xtensa: tcgcpu.a_load_reg_ref
+ Xtensa: tcgcpu.a_op_reg_reg
ncpuadd: Fix handling of signs in comparisons
+ Xtensa: tcgcpu.a_op_const_reg
+ Xtensa: tcgcpu.a_op_const_reg_reg
+ Xtensa: tcgcpu.a_op_const_reg_reg
+ Xtensa: make use of ADDI
+ Xtensa: tcgcpu.g_concatcopy
* Xtensa: cleanup unused stuff
+ Xtense: updated conditions
* Xtense: prettify assembler output
+ Xtensa: initial tcg64fxtensa.a_op64_reg_reg_reg
+ Xtensa: implemented tcg64fxtensa.a_op64_reg_reg
Add immediate/zero comparisons.
xtensa: Add 64bit arithmetic operations.
+ Xtensa: make use of slli and srli
* Xtensa: cleanup dummy code
+ Xtensa: tcgcpu.maybeadjustresult
+ Xtensa: initial tcg64fxtensa.a_op64_const_reg_reg, still room for improvements
+ Xtensa: tcg64fxtensa.a_op64_const_reg
+ Xtensa: initial implementation of tcgcpu.g_proc_entry
+ Xtensa: tcpuinlinenode.second_abs_long
* Xtensa: set correct frame pointer register
* Xtensa: fix load_reg/ref_reg/ref
* Xtensa: more fixes for load_reg/ref_reg/ref
* Xtensa: improve tcgcpu.fixref
* Xtensa: generate long calls
+ Xtensa: initial support of the windowed abi
* fix LLVM backend compilation (mantis
0036833)
* Xtensa: fix txtensanodeutils.insert_init_final_table for the windowed abi
* Xtensa: no scheduler yet but loops can be unrolled
* Xtensa: improved handling of calling conventions
* Xtensa: parameter passing for the windowed abi
Fix handling of parameters with size below the size of a full register
* Xtensa: proper code generation for unit initialization
* Xtensa: system_xtensa_embedded is an embedded system
* Xtensa: align literals properly
+ Xtensa: implemented tcputypeconvnode.second_int_to_bool
* Xtensa: fix tcpunotnode.second_boolean
+ initial FreeRTOS RTL support, largely based on the Embedded target, limited to Xtensa so far
* Xtensa: tcgcpu.g_concatcopy fixed: keep registers alive
* Xtensa: fix tcgcpu.a_cmp_reg_reg_label
* Xtensa: use generic tcpuparamanager.getcgtempparaloc
* Xtensa: fix TCPUAddNode.second_cmp
* fix ppudump after addition of freertos-xtensa
+ -XlS option to specify a suffix for externally called LLVM utilities,
e.g. -XlS-7 to call clang-7 instead of clang)
* IMPORTANT: changed the -CL llvm code generation options to -Cl, for
consistency with the new -Xl option (-XL was already taken)
* Xtensa: returning of 32 Bit values fixes
* Xtensa: shift operations fixed
* make TLinkerInfo fields ansistrings as xtensa-freertos needs long command lines
+ Xtensa: generate all helper files to fpc can successfully compile a single program
* ESP32: set flash size to a resonable value (assumes external flash for now)
* xtensa-freertos: enable softfloat for now
* Xtensa: spilling for bigger offsets fixed
* Xtensa: reduce stack usage
* Xtensa: FreeRTOS uses windowed calling convention
+ Xtensa: boolean registers * Xtensa: register numbers of floating point registers corrected
* Xtensa: set fpu type dependending on the controller
* add support for creating non-address-only procvars to
cprocvar.getreusableprocaddr()
* use tprocvardef.getreusableprocaddr also for non-address-only copies of
proc(var)defs
* use typenames in more cases in the generated LLVM IR (results in smaller
IR in textual form)
+ Xtensa: the boolean extension is used as flags
+ Xtensa: hard float support, i.e. make use of floating point extension if available
* Xtensa: fix passing of floating point parameters
* factor out first_addfloat_soft
* compilation for non-Xtensa targets fixed
* building on non-x86/non-xtensa fixed
+ basic xtensa-linux support in the compiler
+ xtensa-linux added to systems_linux
Fix ppudump after addition of system_xtensa_linux target
* better setting of expectloc
* improve assembler reader
+ optimize SUB for small constants using ADDI
+ initial thlcgxtensa.g_intf_wrapper
+ initial xtensa-linux rtl
* fix taicpu.is_same_reg_move
* Xtensa: properly align maxpushedparasize
* Xtensa: register numbers fixed
* Xtensa: fix expectloc of taddnode
* Xtensa: fix flag handling: B0 is considered as default flags
* Xtensa: patch by Christo Crause to handle the sign extension architecture option, resolves
0036885
* Add FPCBINDIR macro for paths
* Do not expand FPCBINDIR on darwin
* Use exepath on all platforms
* Use exepath on all platforms
+ fpu_fpv4_sp_d32
* some fixes to make fpv4-sp-d32 work
* reorganized arm cpu flags
* arm: more fixes for fpu_fpv4_sp_d16
* take care of FPUARM_HAS_VFP_DOUBLE
* use FPUARM_HAS_VFP_EXTENSION instead of checking fpu_vfp_first and ...last
+ arm: optimize sxth/sxtb
* fixes compilation on WinCE
* get rid of fpu_vfp_first/last hack
* load 0 into unaligned memory in a simpler way
* Aarch64: UTX/STX instructions include now the postfix, so it is the same as for ARM
Handle all existing possible values for init_settings.fputype to set Tag_FP_Arch .eabi_attribute
+ common assembler optimizer base class for arm and aarch64
* check for stup instead of stp
* factored out TARMAsmOptimizer.OptPass1UXTB
* several other routines being very similar for ARM and AAarch64 moved to aoptarm
Avoid invalid typecast in tarmunaryminusnode.pass_1 method
* factored out TARMAsmOptimizer.OptPass1UXTH
* AArch64: use TARMAsmOptimizer.OptPass1UXTH
* factored out TARMAsmOptimizer.OptPass1SXTB
* AArch64: use TARMAsmOptimizer.OptPass1SXTB
* factored out TARMAsmOptimizer.OptPass1SXTH
* AArch64: use TARMAsmOptimizer.OptPass1SXTH
* re-added assembler optimization accidently removed in
0044738 as noted by margers on the mailing list
m68k-amiga: hack to avoid a linker (vlink) warning about merging sections with different flags together. Amiga doesn't support true read only sections anyway
+ AAarch64: FOpFMov2FOp assembler optimization
+ AAarch64: assembler optimization Bl2B
* bail out early if possible
+ AArch64: TCpuAsmOptimizer.OptPass1Mov
* Xtensa: dummy overflow checking
* factored out and improved TARMAsmOptimizer.RedundantMovProcess
+ AArch64: use TARMAsmOptimizer.RedundantMovProcess
* go through cg to generate jumps, so the right jump is generated always
* use j.l in external wrappers, this is not save yet as A15 might contain
an argument: externals need to be called with call4 if they use all
parameter registers, this needs to be implemented
* Xtensa: generate better code for adding/subtracting 16 bit constants
* Xtensa: handle localsize > 32760
* TARMAsmOptimizer.RemoveSuperfluousMove should not mess with PC
* adapted xtensa-freertos to work with the currently stable ESP-IDF 4.0, partially based on a patch by Michael Ring
* Xtensa: make use of extui for shifting with constant values >=16
+ initial support for arm-freertos largely based on patch by Michael Ring
Add several missing -T options in help
* fix for Mantis
0036935: apply patch by J. Gareth Moreton to fix a typo in cs_opt_remove_empty_proc
* for PE+ specific checks use a constant in systems.pas instead of an explicit list (easier to extend this way)
+ implement relocations for Aarch64 for the internal COFF linker
+ implement initial compiler support for Win64 on Aarch64
+ add a GAS compatible variant of the Clang assembler (currently used for Aarch64-Win64 as no GNU AS exists for that target, yet)
* Windows does not support a GOT, so rely on page relative addressing
* Windows on AArch64 does not support ProgBits either
* Windows on Aarch64 requires a relocation section
* Windows on AArch64 requires some DllCharacteristics in the header to be always set
+ add functionality to store a node tree's required temp nodes and their flag upon entering the tree
- remove sectiontype2options overload for mach-O, because the relevant sections have the correct flags in the base method already
* it's rather useless that sectiontype2options is virtual as we can't use a class type, not to mention that the classes doing the overriding are for the internal assemblers/linkers, but we need it also for external
Thus we move the functionality of the overloads to the basemethod and remove the virtual directive; maybe we'll find a better solution in the future...
* rename the local sectionflags and sectionprogbits variables to the more clear usesectionflags and usesectionprogbits
+ introduce a virtual method for writing the section flags
* the clang assembler for COFF requires at least an "r" to generate a readonly section
* use COFF sectionattrs for aarch64-win64 as well
* at least clang can savely generate relocatable readonly sections, so use "r" for aarch64-win64
* as a variant for SEH exception filters we allow them to be *duplicated* instead of being extracted; this can be done unconditionally as for extracted ones their code is set to Nil after they're done and thus won't be picked up by generate_code_exceptionfilters
+ implement compiler support for SEH on Win64
Note: due to the way we access variables in a nested function (which in this case includes exception filters) we can not extract the finally handlers and call them (like we do on i386 and x86_64, but instead we duplicate the finally code)
* the .pdata section currently only needs to be always included for arm-wince (at least until we have full SEH support there as well)
+ add an error message if the size of a function is invalid (in case of aarch64-win64: not a multiple of 4, the instruction size)
+ add Win64 target to help text
* regenerate msg{idx,txt}.inc
* the clang assembler does not provide support for the SEH directives we need (only the LLVM backend would be able to use them), thus we need to manually convert them to data sections
* due to an apparent bug in the clang assembler for COFF when assembling ADRP instructions we can't use symbols that are offset into their section
* generate jump tables into the same section as the code as otherwise we'll get bogus relocations (in case of clang.exe) or a future support for armasm64.exe will reject the relative symbols outright
* register the DLL scanner for aarch64-win64
* set implicitframe for copied tryfinally nodes as well
* implement dogetcopy for the Aarch64 variant of the tryfinally node
* Xtensa: do SAR by a constant using SRAI
+ Xtensa: make use of ADDX*
+ Xtensa: enable jump optimizer
+ assembler optimization MovxMov2Movx
* correctly set register size
* fix for Mantis
0035140: apply patch by Ryan Joseph together with some further changes by me to add support for constant parameters in generics
+ added tests
* fix tc_bool_2_int simplification in case pass typecheck runs again, e.g.
after getting a copy of the node during CSE (fixes taddset4 compilation
with LLVM after
0044712)
* destroying constnone constsyms can occur when parsing a generic with a constant parameter that results in an error (e.g. unsupported type)
* fix for Mantis
0036975: arraydefs are not allowed for generic types (this is only used for type declarations; for specializing constant strings which are char arrays are still allowed)
+ added test
+ add an explicit error message if a type is not supported for a generic constant parameter
* regenerate msg{txt,idx}.inc
* use a more detailed error message if a type is not allowed for a generic constant parameter
* Xtensa: set source_cpu_string
* simplify xtensa-linux building
+ initialize variables, so compilation with -O3 works
* patch by J. Gareth Moreton: refactor RemoveCurrentP
- removed GetHigh, GetNextReg, GetLastReg, GetOffsetReg and GetOffsetReg64 from cpubase. The methods
in cg should be used instead, because they do better error checking on the register used.
+ added Z80 helper functions is_regpair and split_regpair
+ added another helper for register pairs: register_in
z80: sdasz80 won't do section smartlinking for us, but it's used for the zx spectrum target
z80: added quick & dirty vasm assembler support to the target
* unfortunately tf_smartlink_sections is mutually exclusive with
tf_smartlink_library, and defining both breaks sdasz80, so put this behind
ifdef Z80_SMARTLINK_SECTIONS
Fix cross-compilation on aarch64-linux using -dFPC_SOFT_FPUX80 option
Fixed LLVM compilation after
0045143
+ z80: added range checking for d in the (IX+d) and (IY+d) addressing modes in
the sdasz80 assembler writer, because sdasz80 silently truncates d to shortint
which produces broken code and hides bugs in the z80 code generator. The check
is behind ifdef, because the system unit doesn't compile, when this check is
enabled, due to bugs that were previously unnoticed. When these bugs are
fixed, the ifdef will be removed.
+ z80: generate correct code in do_spill_read and do_spill_written for spilling to temp offsets outside the range -128..127
+ enable the sdasz80 lameness check permanently, because the system unit now
compiles, and it's important to catch other similar errors also
* do not generate moves unncesssarily in tcgloadparentfpnode.pass_generate_code
z80: fix global symbols and section attributes in the vasm writer
z80: fix typo in the previous commit
zxspectrum: added support for linking via vlink, and for pascal sysinit code. also some cleanup in the linker code
* fixed bug, causing the global variable stacksize to be destroyed
* added comment, stating that Z80 has no condition subsets
+ build an instruction table cache for the Z80
+ partial implementation of taicpu.Matches
* Z80: fixed code generation for pure assembler routines, that have no parameters, no local variables
and no 'nostackframe'
* do not use an extra register in tcginlinenode.second_IncDec if not needed
+ z80: added condition checking in taicpu.Matches
- z80: oops, forgot to delete some code from taicpu.Matches
+ z80: implemented taicpu.FindInsentry
+ z80: implemented taicpu.CheckIfValid
+ handle OT_IMM_PORT in taicpu.Matches
+ handle OT_REG8_C_PORT in taicpu.Matches
+ handle OT_RELJMP8 in taicpu.Matches
+ handle OT_IMM8 and OT_IMM16 for getting symbol addresses in taicpu.Matches
+ added Z80 inline asm instruction validation
+ z80: add operand info to the result of taicpu.GetString, this makes the
compiler produce nicer error messages, when it encounters an invalid
instruction in inline asm code
+ started work on the Z80 internal assembler
+ added class TRelObjOutput
m68k: have an arch-specific second_length implementation, to make sure length() doesn't return its result in an address register
* increase PPU version so that 3.2.0 correctly ignores 3.3.1 PPUs instead of fatally failing on the extended header entry
* GetCopyAndTypeCheck forces correct type
* propagate forinline flag through simplify
* allow recursive inlines, meanwhile, there are other means to avoid too deep recursion of inlining
+ enable the Z80 internal asm (which doesn't work, yet) if the compiler is compiled with -dZ80_INTERNAL_ASM
+ added an override of the abstract method TRelObjOutput.writeData (not implemented, yet)
* remove tempref mess for simple inlined functions
* compilation with -Oodfa fixed
ppudump: catch exception on illegal datetime (mainly cross compiled units)
* properly force the result type after
0045217
* correctly handle result type of string constant nodes for internally created
nodes
* handle generic parameters in Ord()
+ added test
* compilation with -Oodfa fixed
+ added build mode that enables the Z80 internal assembler
+ added class TRelObjData
+ override the abstract methods from TObjData.sectionname() and .writereloc(). Only sectionname() is implemented for now.
+ write the .rel file header and the list of external symbols
* the areas global symbols count must be in hex in the .rel format
+ write the areas (sections) in the .rel output
+ added the global symbols to the .rel output file
+ implemented pass1 (calcsize) of the instruction encoding for the Z80 internal asm
* Z80: match both signed and unsigned 16-bit constants as OT_IMM16 in the asm instab lookup
+ partial implementation of pass2 asm opcode generation for the Z80 internal asm writer
+ Z80 internal asm: produce correct opcodes for register operands
+ actually produce relocations in TRelObjData.writeReloc
* Xtensa: patch by Christo Crause: fix addmi/addi handling, resolves
0037015
+ write the section data in the .rel internal object writer (relocations aren't written, yet)
+ introduced the TRelRelocation class
+ added TRelRelocationFlags
+ initialize size and relflags in TRelRelocation
+ added method TRelRelocation.EncodeFlags that encodes the flags to string that can be included in the .rel file
* Put all code adding cs_fp_emulation by default inside one big
{$ifdef cpufpemu}
* Add system_arm_freertos and system_xtena_linux to the list
of systems that automatically add cs_fp_emulation to
init_settings.moduleswitches.
+ Do not use controller specfic default fputype for xtensa-linux
target that does not support use of -Wp option to set controller type.
Add -Wp option description for riscv32 and xtensa compiler
Do not use inherited first_int_to_real when arm FPU_HAS_FPA is in fpu_capabilities
+ also write the relocations in the .rel internal obj writer
* the parameter of WriteWord should be word, not byte :)
* xtensa-embedded: fix setting of the fpu and abi
* Release registers which have been used for a function call before adjusting the stack pointer. On i386 this allows to use eax,ecx,edx in POP instructions for stack adjustment.
+ lots of fixes to the Z80 internal asm writer
+ Z80 internal asm: support OT_REF_ADDR16 in taicpu.gencode.WrinteNN
+ support conditional operations in the Z80 internal asm
+ fix for conditional JP in the Z80 internal asm writer
+ support creating ar files in the Z80 internal obj writer
+ align files in generated .a files not by #0, but by #10 (Line Feed). This is
compatible with GNU ar and others, and fixes linking with sdcc-sdld.
* preserve the actual file size (before aligning it to even bytes), when adding files to .a archives
+ support the RST instruction in the Z80 internal asm writer
+ support relative jumps in the Z80 internal asm writer
+ Z80: support conditional JR
+ support the 'in A,(n)' and 'out (n),A' instrunction in the Z80 internal asm writer
+ support instructions like BIT, SET and RES in the Z80 internal asm writer
+ support signed 8-bit immediate constants in the Z80 internal asm writer as well
+ call ApplyAsmSymbolRestrictions for symbols that should be exported from ar files
+ added internal error in taicpu.gencode.WriteNN to catch unhandled asm instructions
- reverted previous commit, since it was incorrect
+ fix for writing absolute relocations in the .rel format
* fixed the TRelocDataInt to avoid truncating 16-bit addresses to 8-bit on 8-bit CPUs
- removed commented out writeln
* x86: Fixed peephole optimization introduced in
0044233. tb0219 and tb0548 tests have failed with -O2 since then.
* Added variants of the tb0219 and tb0548 tests with forced -O2.
* If a nested procedure does not access its parent's frame pointer, optimize it by removing the hidden $parentfp parameter.
* Improved the tisogoto1.pp test.
* only call cg64.a_XXX_loc for LOC_(C)REFERENCE and LOC_(C)REGISTER locations in
tcginlinenode.second_AndOrXorShiftRot_assign
* i8086 compilation fixed after
0045302
+ generate more optimal code for OP_NOT and OP_NEG in tcg64f8086.a_op64_ref
* call inherited in tcg64f8086.a_op64_reg_ref for OP_NEG and OP_NOT, because it is handled differently after
0045302
- remove unused files, resolves
0037032
m68k: preparations for upcoming full instruction tables, mostly converting code away from using sets of opcodes
+ use ApplyAsmSymbolRestrictions on all symbols in the NASM writer
m68k: added a full instruction table (minus CF MAC/EMAC instructions for now), based on vasm, and the required tool to process it
m68k: add the converted includes, based on m68kins.dat
m68k: migrate the compiler to the new instruction tables and drop the old ones
m68k: fixed instruction code formatting in the generated include
* fixed -Cl options now showing in the help of an LLVM compiler (and fixed
them to read -Cl rather than -CL)
* Always use parentfp for forward-declared nested procedures.
* Do not perform optimization of nested procedures for:
- targets which use a special struct to access parent's variables;
- pure assembler procedures (for compatibility with old code).
* avoid unncessary conversions of constants in 64 bit ints when doing constant folding
* improved heuristics for auto-inlining
* generate CFI data only if we're either using it for exception handling or if debug output is enabled (or should this only be generated for targets that in theory support DWARF exception handling?). This removes unnecessary bloat from e.g. Windows binaries
- cleaned up some x86-specific code from the Z80 inline asm reader
+ also recognize alternate registers in the Z80 inline asm scanner. This allows
the "EX AF,AF'" instruction to be accepted and assembled as well.
+ added the alternate Z80 register pairs BC', DE' and HL'
+ added a correct implementation of TAOptBase.SuperRegistersEqual for the Z80
+ Z80: added a registers_interfere helper function
+ introduced TAOptBase.RegistersInterfere (which might not always be equivalent to SuperRegistersEqual)
* use RegistersInterfere instead of SuperRegistersEqual in TAoptBase.RegInOp and TAoptBase.RegInRef
+ added subregisters for the Z80 flags
+ added the Z80 individual flag bits as subregisters
+ MovAndTest2Test optimization
+ Z80: implemented TCpuAsmOptimizer.InstructionLoadsFromReg
+ support the LD instruction in TCpuAsmOptimizer.RegLoadedWithNewValue
+ Z80: support all the flags subregisters in super_registers_equal
+ Z80: support the flags subregisters in the registers_interfere function
* handle OP_XOR for a full mm register correctly in tcgx86.opmm_loc_reg
* simplify constant expressions after re-ordering, resolves
0037062
- removed tabstractrecorddef.get_unit_symtable, which did not always return the unit
symtable (when you had a local recorddef in a procdef)
* modified tdef.get_top_level_symtable() so you can specify whether you want to
skip procdefs or not
* changed tobjectdef.vmt_def() to no longer require a typesym for the tobjectdef
(based on patch by Blaise)
* fix a typo in a comment. no functional change
* patch by Reynaldo to generate kernel image for the raspi2 embedded port, resolves
0027052
+ handle the flags register bits for many Z80 instructions in TCpuAsmOptimizer.RegLoadedWithNewValue
+ Z80: report flags register information in TCpuAsmOptimizer.RegLoadedWithNewValue for 16-bit ADD,ADC,SBC,INC and DEC
m68k: add support for bitfield instructions as CPU capability
* fix spilling for PAND, POR and PXOR, resolves
0037084
m68k: tabs to spaces and indentation fix, no functional change
+ Z80: report the flags usage for all the remaining instructions in TCpuAsmOptimizer.RegLoadedWithNewValue
+ z80: handle all instructions in TCpuAsmOptimizer.RegLoadedWithNewValue
* fixed IsJumpToLabelUncond for the Z80
- z80: disable regvars, because they don't work
* boolean or/and nodes might be swapped when they have no side effect, in case
of short boolean evaluation, firstcomplex is not called so this does not
hurt short boolean evaluation
* call x86 addordinal for non short boolean evaluated boolean nodes
as this results in better code
* when auto-inlining is used, do not require that inlining is explicitly turned on
* Z80: JR can be both conditional and uncoditional jump, just like JP
+ PXorPXor2PXor optimization
* Reworked the optimization of unused $parentfp for nested routines.
- Do not remove the $parentfp parameter as was done in the previous optimization approach. Instead when $parentfp is unused to the following:
- On the caller side: Omit passing the value for $parentfp for targets where tcgcallparanode.push_zero_sized_value_para=false (classic CPU targets).
Pass 0/nil as $parentfp for targets where tcgcallparanode.push_zero_sized_value_para=true;
- On the callee side: Prevent allocation of registers/resources for $parentfp.
- When possible keep $parentfp in a register.
- Set the pio_nested_access flag in tprocinfo.set_needs_parentfp() to properly handle deep nesting levels;
* Fixed the jvm target after
0045436.
* It is needed to mark $parentfp as used for all targets.
* Added the thlcgobj.a_load_undefined_cgpara() method to pass an undefined value as a parameter to a routine. The generic version passes the 0/nil value if the parameter's location is not a register.
* Use a_load_undefined_cgpara() to load values for unused parameters.
* exceptions are side effects which must be considered in boolean expressions
* patch by Karl-Michael Schindler to update the German help files, resolves
0037122
* Reg1ReadDependsOnReg2 moved to TAoptBaseCpu
* use Reg1ReadDependsOnReg2 in TAoptBaseCpu.RegModifiedByInstruction to handle properly Z80 subregisters
+ Z80: handle all instructions that modify registers, that are not an operand in TAoptBaseCpu.RegModifiedByInstruction
+ Z80: handle the flags register in TAoptBaseCpu.RegModifiedByInstruction
* Do not use the LOC_VOID location to indicate unused parameters.
* Added the tprocdef.parentfpsym property. Set parentfpsym.varstate to vs_read instead of using the pio_needs_parentfp flag.
* Replaced tcgcallparanode.push_zero_sized_value_para by tparamanager.has_strict_proc_signature.
* implemented a_load_undefined_cgpara for LLVM, fixes LLVM code generator
after the changes to optimize unused parentfp parameters
* replaced custom packed record with tmethod
* patch by Christo Crause: fix register search on xtensa, resolves
0037121
m68k: atari syscalls might also destroy D2 and A2
m68k: avoid more vlink warnings regarding changed section attributes, when the target system has no write-protected sections
* x86-64: adjust stack by push/pop if possible
* adapt optimizer to handle push/pop for stack alignment
* adapt test
* do not load unused parameters, as their localloc has not been set (and
there is no point in doing so if it were)
o fixes compilation of RTL with LLVM/AArch64
* compilation on i386 fixed
* re-activate copy_mm: using it instead of movs might reduce register pressure
* x86 has to use newalignment as well
+ x86: track use of full ymm registers and generate vzeroupper if needed
* create vpxor instead of pxor in avx mode
* improve copy_avx gencopy mode
* factored out OptPass1VPXor
* always use 1-byte section alignment for the rel internal obj writer
* the len parameter of TObjData.alloc changed to TObjSectionOfs
+ also write sections with no data in the .rel internal obj writer
+ enable the Z80 internal assembler
+ Z80: added the JRJP pseudo instruction
+ added JRJP to various instruction lists
* translate jrjp to jp in the sdcc-sdasz80 asm writer
* insert fwait after fcompp, resolves
0037136
Reorder and complete list of supported CPUs
+ Z80: implemented the JRJP pseudo instruction in the Z80 internal asm writer
* z80: use the JRJP pseudo instruction to generate shorter code (it is
translated to JR wherever possible, otherwise to JP)
* use const_align(sizeof(pint)) alignment instead of sizeof(pint) for various
compiler-generated structures, so they don't waste any extra alignment space
on 8-bit CPUs like the Z80 and the AVR
* ARM: (V)LDM do not load from the registers in the reg. set
+ started work on the Z80 internal linker
* ARM: get rid of more unneeded sxtb/h uxtb/h instructions
* ARM: factor out TARMAsmOptimizer.OptPass1And
+ implemented TRelObjInput.CanReadObjData
- removed the z80_internal_asm build mode, since it's now a feature enabled by default, not hidden behind an ifdef
* enable the Z80 internal linker (not working yet) if the compiler is compiled with the Z80_INTERNAL_LINKER define
+ added 'z80_internal_linker' build mode to the z80 lazarus project
* AArch64: enable TARMAsmOptimizer.OptPass1And
+ override TInternalLinkerZXSpectrum.InitSysInitUnitName
+ set cobjdata in TRelObjInput.create
+ set cobjdata in TIntelHexExeOutput.create;
+ create a linker script for the ZX Spectrum internal linker
+ override TInternalLinkerZXSpectrum.GetCode/Data/BssSize to avoid access violation error
* buffered text reading functions moved from being local to TRelObjInput.CanReadObjData
to being class members, so they can be used by ReadObjData as well
+ partial implementation of TRelObjInput.ReadObjData
+ parse the area records of REL files
* a nil node is also a constant pointer node
+ convert (v1=const1) and (v2=const2) into ((v1 xor const1) or (v2 xor const2))=0 if the expressions have no side effects
+ parse the REL symbol records
* TRelObjInput.ReadObjData: return success, if file was read correctly
* return the correct size for files in ar archive. This is required by the REL
reader, which reads files until the end of file
* set MaxMemPos to $FFFF in the Z80 internal linker
+ add .text, .data and .bss exe sections and define the entry point in the ZX Spectrum internal linker script
* group T and R records together and call a function (not implemented yet) to handle them in pairs
+ implemented reading of T and R records
* extended
0045555 to take care of chars as well
* renamed some REL sections to follow a similar naming convention
* avoid setting the oso_Data flag on bss sections
+ set IMAGEBASE in the Z80 internal linker script
* ImageBase changed to qword (same type as CurrMemPos) to avoid truncating to 8-bit on Z80
* ImageBase changed to qword to avoid 8-bit truncation in the internal linker map file
* avoid 8-bit truncation of the sizes in the internal linker map
+ implemented IHX writing in the Z80 internal linker
- removed the GetCode/Data/BssSize overrides in the ZX Spectrum internal linker,
since the default implementation, inherited from parent now works
+ implemented TIntelHexExeOutput.DoRelocationFixup
+ ZX Spectrum internal linker: invoke the ihx2tzx to postprocess the ihx file,
produced by the internal linker (in the future, the code of this utility may
be integrated into the compiler)
* changed the exe extension of ZX Spectrum to '.tzx'
+ enabled the ZX Spectrum internal linker
- removed the z80_internal_linker build mode from the lazarus project
+ allow specifying the program load address for the ZX Spectrum target via the -WB option
+ x86: optimziation MovMov2MovMov 2
+ add support for DEFB and DEFW directives to the internal assembler reader
* also handle single character register names (needed on Z80 for example)
* with ihx2tzx now also supporting binary output it makes sense to rename it to something more generic
+ add compiler support for the Z80 MSX-DOS target
* allow executable/library name to be changed for an intermediate file
* change exe extension for MSX-DOS from exe to com
+ add MSX-DOS to help text for -T
* regenerate msg{txt,idx}.inc after adding MSX-DOS to help text
* better rules if a 3 op mul operation is tried
+ add intrinsics for Z80 port IN/OUT
* include the Z80 specific intrinsic values
+ some basic stuff for mips64el
+ added the 'AREA' directive support to the Z80 inline assembler, that allows
you to define custom sections
+ support the OFFSET directive in the Z80 inline assembler reader
+ add the _BSSEND section after the _BSS section
* the len parameter of TObjData.writebytes changed to TObjSectionOfs to avoid 8-bit truncation on Z80
* use qword instead of aword for bsssize to avoid 8-bit truncation on Z80
* fixed a bug in the Z80 internal linker when reading symbol offsets from .rel files
+ optimize real operations with 0 and 1 if fast math is turned on
* optimize a/a and a-a if fast math is on
* swap fpu stack correctly when moving data into xmm registers
* ensure that the BSS section for MSX-DOS is correctly initialized to 0
* fix typo (no code changes)
* for adding procdefs to forwarddefs check for the specialization flag instead of whether it's a full specialization; fixes implicit finalization handlers on x86_64-win64 not being found
+ added tests
* Aarch: handle 0 in AndAnd2And and check if the resulting constant
is really a shifter constant, resolves
0037203
* slash and divn might have an exception as side effect
* write length/code page when writing the string type
* temporarily fix
0037034 by disabling the problematic optimization until the real cause is fixed
+ might_have_sideeffects checks also if the tempinitcode of a tempref node might have side effects
* better check for short boolean evaluation in firstcomplex
* fixed copy&paste error of
0045658
* Optimize parentfp when optimization level 1 and higher to be debugger friendly.
z80: vasm doesn't support the JRJP pseudo instruction, so change it to JP during write
* Fixed the parentfp optimization for some cases when nested procvars are used.
* Improved the parentfp optimization to properly handle cases when a nested routine calls other nested routines.
* Added optimization option cs_opt_unused_para. It is enabled for -O2 and higher. The parentfp optimization is tied to cs_opt_unused_para.
+ support z80 in the fpc launcher utility
* fix -Agas-darwin to say Aas-darwin for x86-64, and also add it for i386
(mantis
0037230)
* regenerated message files
o patch for Xtensa by Christo Crause, resolves
0037099
+ Added postfix parsing in tattreader.GetToken
- Removed all postfixed versions of OpCodes from the instruction list
+ Added all missing OpCodes from Xtensa ISA
* Changed branch OpCode to A_B, similar to ARM
+ Added missing branch condition flags BCI and BSI
* Updated existing compiler code that referred to the old postfixed instructions
+ Added prefix and postfix handling in TxtensaInstrWriter.WriteInstruction
* Updated TCPUAddNode.second_addfloat to specify .S postfix
* Updated tcpuunaryminusnode.second_float to specify .S postfix
+ Implemented prefix and postfix identification in txtensaattreader.is_asmopcode
* Adapted branch condition extraction to respect postfixes
* Changed itcpugas to call findreg_by_name_table from raatt.pas (same as issue
000037121, difficult to test these changes without including a fix for the register name search problem)
* Xtensa: MatchInstruction requires a postfix parameter
* Reworked tprocdef.is_implemented to fix a bug with the parentfp optimization. The bug was detected when using the llvm backend.
+ Added a test.
* limit the ZX Spectrum programs address space up to $FDFC, because the RTL now
installs an interrupt handler at $FDFD
+ Xtensa: patch by Christo Crause to add optional MAC16 registers, resolves
0037130
* fix typo (no code changes)
+ Xtensa: patch by Christo Crause: support call0 abi in init final code part of
0037242
* patch by Christo Crause: support call0 abi in entry/exit code, part of
0037242
* fix for Mantis
0037251: apply patches by Bi0T1N to implement the IsConstValue() intrinsic
+ added tests
* Xtensa: patch by Christo Crause: fix controller date for esp8266, part of
0037242
* Xtensa: patch by Christo Crause: add IDF_PATH variable, read from the appropriate environment variable, part of
0037242
* fix for Mantis
0037272: also allow the empty set for dynamic array parameters; Delphi probably started to allow that together with array constructors.
+ added tests
* reverted some stuff accidently committed in
0045704
* correctly handle sign/zero extensions for optimization "var3", resolves
0037254
* delay setting of pd_body and pd_implement till the header of a generic
procedure is parsed, resolves
0037261
* use the fpu on suitable x86 targets to copy extended values
* set mm register subreg properly when cleaning them with xor
* fix compilation with newer FPC
+ handle OS_128 in mm code
bump ppudump copyright year
* (modified) patch by Michael Ring from the mailing list to fix linking for arm-freertos
+ Xtensa: more cpu capabilites
+ Xtensa: set cpu for xtensa-linux as call window support is required
* fix abs() intrinsic optimisation, resolves
0037301
Fix overflow when value is high(int64) in OptPass1And method
* AAarch64: handle initializations of vector registers with zero properly
* properly calc new src register for OP_XOR
* patch by Christo Crause: fix volatile registers for call0 abi, resolves
0037317
Try to fix tarmunaryminusnode.pass_1
Only try to use softfpu functions when fputype is fpu_soft
tarmunaryminusnode.pass_1 must call inherited method for system_arm_wince
Do not use .hidden for systems_wince, as is done for systems_windows
* scalar operations should take single/double values and not full registers
* TAOptObj.MakeUnconditional: Set as internal error for MIPS cpu:
MIPS conditional instructions conntain the
computation of the condition itself, so
changing the instruction to unconditional
should never be done.
* TAOptObj.OptimizeConditionalJump: Return false early if
the conditional instruction has more than one operand.
* tcg.a_load_cgparaloc_ref: Always enable SHR instruction for mips/mipsel CPUs
This is normally only used on big-endian targets, to re-convert records
of size < OS_INT into values fitting inside the byte size of the record,
after it was left-shifted to comply with ABI stipulating it but be
writable as a full-size register into a OS_INT size memory.
Do not set value of stoploop to avoid infinite loop
Also check that HP1 is a jump instruction with more than one operand to exit early
Fix several warnings about uninitialized local variables
* Handle R_SUBMMWHOLE in reg_cgsize for R_MMREGISTER type
* Disable range and overflow checking inside is_continuous_mask function.
* generate soft float code for arm vfp units which have no double operation support
* completely disable records containing float fields in registers again, as
the code generator does not support subsetreg loads of floats
* enable putting records that contain a single field into records on all
targets (patch by J. Gareth Moreton, mantis
0037343)
* properly handle boolean64 xor boolean64 on i386
* revert part of
0044879: flock must use kernel_off_t: off_t breaks e.g. i386
+ patch by J. Gareth Moreton: SHL-centric peephole optimisations, resolves
0037389
Try to fix mipsel-android by making sure P does not point to a freed instruction
* revert part of
0045810 which was accidently committed
Avoid wrong overflow error when using -Criot options
Avoid overflow errors on z80 CPU by changing local variable type from aint to tcgint
* float operations can have an exception as a side effect, resolves
0037398
* Fixed the peephole optimization of conditional movs for mips.
z80: preserve system ID and linker ID for the Amstrad CPC
* Fixed indentations of the interference graph.
* Added register names to the interference graph.
* To check the size of a register(s) corresponding to a variable it is needed to use localloc.size instead of def_cgsize(vardef).
* Try to avoid spilling of an imm register if it contains a value loaded from an already spilled imm register. It likely leads to an endless loop and the register allocation fails.
This fixes the register allocation for i8086 when handling registers for very constrained instructions such as "mov ireg1,[ireg2+ireg3]".
Here ireg2 can be only BX or BP. So in most cases only BX is available. When ireg2 is spilled, its value must be loaded to BX only.
Coloring of the ireg which holds the spilled value must be as early as possible to be able to assign BX to this ireg.
This fix should also help register allocation for other constrained/old CPUs.
* i8086: Removed internal error, since global vars can be in registers if used only in pascalmain.
* i8086: Fixed referencing using BP and SP as base when FAR or HUGE memory model is used.
* i8086: Enabled the cs_opt_regvar optimization. It works fine now.
- removed no longer used -target $TARGET parameter (triplet is used instead)
+ optimize
mod for x86-64 as well
* In Delphi mode throw a conversion error when trying to typecast a pointer to a procdef when they use different memory models.
* Changed tsuperregisterworklist.get() to always return the last item from the list.
* Reversed sort order of simplifyworklist so nodes with most interferences will get their colors first.
Since degree of nodes in simplifyworklist before sorting is always
less than the number of usable registers this should not trigger spilling
and should lead to a better register allocation in some cases.
After these changes sysutils.o for i386-win32 is 80 bytes less. :)
* patch by J. Gareth Moreton: fix for incorrect alignment removal, resolves
0037420
* modified patch by J. Gareth Moreton: MovOpMov2Op/Lea2Add/Lea2Sub consolidation, resolves
0037422
* mips: Added support for unaligned load/store. It greatly improves performance and prevents bus errors on systems which do not emulate unaligned memory access.
* Aarch64: set register size correctly for AndStrb2Strb optimization, resolves
0037427
* Re-enabled safe generic jump optimizations for mips.
* Fixed TAOptObj.CollapseZeroDistJump to properly handle delay slots.
* patch by J. Gareth Moreton: Minor oversight in MovAnd2Mov 3 optimisation, resolves
0037442
+ simplify "x mod -1", resolves
0037449
* reject overloads if they only differ in the result types (as long as they aren't operator overloads)
+ added tests
* do not throw an internal error later on in case of a recursive call, if the declaration of the function was faulty, resolves
0037460
* do not throw an internal error if an errorneous type is passed to str, resolves
0037462
* Count the number of interferences with real registers.
* Do not coalesce registers 'u' and 'v' if 'u' is the last usable real register available for imaginary register 'n' which also interferences with 'v'.
This prevents endless spilling in some cases for constrained CPUs such as AVR. Resolves issue
0037421.
Also this reduces the number of spilled registers in some cases and even eliminates spilling completely for some simple routines for i386 and AVR.
* Added a debug output of the number of spilled registers for each routine. This allows to easily compare results after changes in spilling algorithms.
* allow overloads with same result type for external Java classes due to Java supporting covariant return types for interfaces
* replace explicit (sometimes incomplete) tests with calls to doshortbooleval()
* the c-style boolean evaluation of "and" is independent of short-circuit evaluation
(you always have to consider the complete values in case the first one is <> 0)
* Enhanced the debug output of spilling statistics. Now it includes efficiency of the spilling which is based on
weight and usage count of registers. Range 0-100%. Such statistics are very handy when you modify the register allocator.
* Count only usable real registers.
* Early during register allocation, spill registers which interfere with all usable real registers.
It is pointless to keep them for further processing. Also it may
cause endless spilling.
This can happen when compiling for very constrained CPUs such as
i8086 where indexed memory access instructions allow only
few registers as arguments and additionally the calling convention
provides no general purpose volatile registers.
* Removed the i8086 specific hack. Since
0046199 the register allocator is able to handle the problem code.
* For 8 and 16 bit CPUs preload the ref base and index to a separate temp register in the generic implementation of a_load64_reg_ref() and a_load64_ref_reg().
This reduces spilling and produces a better code.
* i8086: When a ref points to the 32-bit data, preload the ref base to a temp register to reduce spilling.
* fixed LLVM register allocator after
0046199
* fixed peephole optimizer replace lea by add even if the flags were in use
(patch by J. Gareth Moreton)
* fix for Mantis
0036775: apply patch by J. Gareth Moreton
+ added tests
Disable limitation of handling of negative shift values, can be enalbed again by setting LIMIT_NEG_SHIFTVALUES macro
* For 8/16 bit CPUs and TP mode, disable expansion to a larger integer type for subtract operations on unsigned integers. This is TP7 compatible.
* patch by J. Gareth Moreton: unifies internalerrors, resolves
0037471
* made internalerror unique
* reworked usage of tcgnotnode.handle_locjump
* reverted
0046220 as it is fixed now properly
- do not call firstpass in tinnode.pass_typecheck as it prevents further optimizations
* In assembly comments include all used registers by a variable for 8/16 bit CPUs.
* Do not add comments about unused varlocs.
* msdos: Include debug info only when it is enabled by options.
* Added virtual function TObjSection.GetAltName to be able to specify additional section name by descendants.
* OMF: Use the name of the first global symbol as an addition section name. This name is visible in the linker map file and helps tracking of section references.
* setelementn cannot be the root node of a cse domain, resolves
0037477
m68k: fixed a long standing issue, where FPU registers would be clamped to single precision during spilling
* insert type casts when creating new unaryminus nodes during simplification, resolves
0037508
* do not spill_replace if the register is used another time in the instruction
- no need to call add_move_instruction if data is moved between different register classes
* update version
- -Oodfa removed
* patch by J. Gareth Moreton: Long-range MOV + MOVS/Z optimisation, resolves
0037390
* attempt to correct bitpacked arrays on big-endian systems after
0043186. this fixed tparray13 test on m68k at least
* patch by Kai Burghardt to use https urls, resolves
0037522
* better complexity handling of mul, slash, div, mod
+ add option -FF to force the use of fpcres as RC compiler
Note: if we merge this to 3.2.x then we can switch to this by default once 3.2.2 is released
* make sure that the resource compiler related globals are reset
* regenerate msg*.inc files
+ add a constant that describes all internal COFF writers (be it PE/COFF or not)
* fix for Mantis
0037559: the adjustment of the section type should only be done for internal COFF writers
* Reverted accidentally committed files.
* patch by Christo Crause to make nostackframe with the windowed xtensa abi working, resolves
0037550
* Fixed nasm writer by adding a new line after the GLOBAL directive.
* 8086: Fixed calling of local routines with the near attribute in the 'far code' memory models.
* msdos: By default external routine names with the pascal calling convention must be all upper case. This is TP and TASM compatible.
* 8086: Do not force far calls in the TP mode by default. This is TP compatible. Other modes need forced far calls by default in order to compile non-TP code.
* do not try to unroll a loop if previously an error was thrown, resolves
0037475
* don't convert lea to add/inc/dec/sub if there's a symbol in the reference
o fixes make cycle on Darwin/i386
* when a function returns a value in a register, but normally that type
would never be put in that kind of register by the compiler, store
it to memory to avoid issues down the line
o fixes tcalext6 on darwin/i386
* do not apply range test optimization if the variable is a string being compared against a char constants, resolves
0037476
* 8086: enable cs_force_far_calls when m_nested_procvars is enabled.
* 8086: when the compiler mode switches to a non-TP mode, enable cs_force_far_calls.
* msdos: Force names of external routines to be all uppercase only in TP mode.
* execute the tempinitcode whent the tempcreate node gets processed rather
than when the first temprefnode to it gets processed. Solves the issue
the foreachnodestatic processes the tempinitcode when seeing the
tempcreatenode and ignores it when seeing temprefnodes, even though
it may actually be executed/generated for the temprefnode. It's
impossible to easily process it for the "correct" temprefnode
(since there may be multiple temprefnodes for the same tempcreatenode)
o fixes tarray12 for Darwin/i386 and Linux/i386
- reverted
0046457, accidentally committed (breaks -Oooptcse)
* RTTI: Offset of record fields is defined as SizeInt not ptruint.
+ AAarch64: FMovFMov2FMov optimization
* wlib: Explicitly specify the smallest possible record align to reduce the size of .a files.
+ Xtensa: L32IMov2L32I optimization
+ Xtensa: consider also floating point stores in TCpuAsmOptimizer.RegLoadedWithNewValue
* In the TP mode for 16-bit CPUs uint8+uint8 is extended to sint16+sint16. This is TP compatible.
* 8086: Fixed Ofs() for far routines.
resultdef of typeconvnode.typecheck_proc_to_procvar() is reused every time you get an address of a proc. So it is forbidden to change the far/near attribute of resultdef - it leads to mess during code generation.
Instead it is needed to use separate reusable resultdefs with new flags pc_far_address and pc_offset.
* fix for Mantis
0037579: mark the 'German' tokens with the characters they represent
* 8086: Fixed an internal error for cases like FarPtr2 := FarPointer($12345678) + int16;
* 8086: More fixes for Ofs() handling.
* Added on option to implement library based smartlinking of the dead stripable vectorized lists (e.g. resource strings index). By default smartlinking of such lists only supported when the section based smartlinking (tf_smartlink_sections) is enabled for a target.
* msdos: Implemented library based smartlinking of the dead stripable vectorized lists. It is enabled for the internal linker and wlink. These linkers sort sections by name by default.
* Allow library based smartlinking of indirect symbol entries.
* Corrected
0046481. Use both tcalo_new_section and tcalo_make_dead_strippable flags since only the default implementation implies a new section creation when tcalo_make_dead_strippable is specified.
* wlib: calculate the record size according to the number of files in the library.
* Xtensa: set abi correctly
* 8086: Fixed loading a 32-bit ref to a register in case the target register is used as the ref base or index.
* 8086: Also fixed loading a register to a 32-bit ref in case the source register is used as the ref base or index.
* do not throw an internal error on illegal assembler expressions, resolves
0037439
* msdos: Fixed section based smartlinking after my recent changes.
* 8086: Fixed very long section names when $HUGECODE is ON and section based smartlinking is used.
* Added a utility function TrimStrCRC32().
* When optimization is off always load unused parentfp to a local location to be debugger friendly.
* msdos: Fixed AV in the internal linker in some cases when code or data exceeds 64k.
* If parentfp is passed in the stack it can be skipped only if po_delphi_nested_cc is set for the routine.
x86: It is more optimal to push some register (NR_FRAME_POINTER_REG) instead of a constant value in a_load_undefined_cgpara().
* Added assembler comments about unused parameters.
* patch by Christo Crause, resolves
0037335
* ESP8266 support for t_freertos.pas
+ -Ff switch to be able to pass the IDF_PATH without using an evironment variable
* insert literals after the section start which belongs to the current procedure
* reset idfpath when globals are initialized (needed for the textmode IDE)
* cleanup ARM remainders
* locals can have 0 as offset, force a reference in this case
* Xtensa: needs no mul helper, all variants have the MULL instruction
* ait_varloc instructions are handled and removed by Trgobj.translate_registers() and never left for an assembler.
* fix for Mantis
0037616: apply patch by Kai Burghardt to complain about the correct type used by setjmp/longjmp
+ Xtensa: make use of muluh/mulsh instructions
* Xtensa: make use of divide extension if available
+ Xtensa: implemented TCPUAddNode.second_cmp64bit properly
* Xtensa: fixed tcg64fxtensa.a_op64_reg_reg_reg for unsigned operations
* ait_comment,ait_regalloc,ait_tempalloc,ait_varloc instructions produce only comments in the external assembler output. Moved handling of these instructions to TExternalAssembler.WriteComments().
This eliminates code duplication and improves maintainability.
* Xtensa: more fixes to tcg64fxtensa.a_op64_const_reg_reg and tcg64fxtensa.a_op64_reg_reg_reg
* Use TExternalAssembler.WriteComments() also by nasm and intel assembler writers.
* 8086: Use CX as a scratch register instead of BX.
* Xtensa: optimize some shifts by constants
* 8086: If a far procvar is called, it must be in a memory location. This fixes a hack to emulate CALL reg1:reg2.
* 8086: Fixed using far procvars in a near code memory model and vice versa.
* 8086: Do not destroy contents of the BX parameter when calling a procvar by ref with a base.
* 8086: Fixed register allocation failure after
0046559.
* 8086: Reverted
0046557. It must be implemented differently.
* 8086: Proper implementation of: If a far procvar is called, it must be in a memory location. This fixes a hack to emulate CALL reg1:reg2.
* never create a regular temp for inline parameters that can be modified by
the caller (mantis
0037465)a
o in theory, the regular checks for doing so should never trigger, but due
to compiler-generated nodes (such as calls to fpc_ansistr_unique), they
could. Internal address nodes can deal with taking the address of the
function result in this case.
+ Xtensa: use extui for and with constants
* Xtensa: tcpunotnode.second_boolean fixed
* emit the correct declaration for procdefs used to force a procname in LLVM
o fixes lazarus startup on macOS/AArch64 when compiled with the LLVM cg
* add Xcode-11.0 as LLVM target version versin
* Xtensa: fixed TCPUAddNode.second_cmpsmallset
Fix EXTDEBUG code: tai_comment requires use of strpnew function with constant string
Replace outdated cgop2string function by tcgsize2str function from cgbase unit to fix EXTDEBUG cycle on powerpc64le-linux
* Xtensa: force correct location into a register in tcpunotnode.second_boolean
* reverted 46417: if a assembler subroutine needs an entry instruction, it should be added explicitly
* Xtensa: several issues with parameter passing of the windowed api fixed
* Xtensa: some issues with large parameters fixed
* Xtensa: fix single<>single
* Xtensa: record alignment is upto 8 bytes done
+ Xtensa: implemented tcpuparamanager.ret_in_param according to API
* fixed passing of variant parameters
+ Xtensa: reused constant pool entries if possible
* Xtensa: various stack handling fixes
* better calculation of estimated stack frame size
* Xtensa: rewrote parameter handling
* Xtensa: aggregate types up to 16 bytes are returned in registers
* Xtensa: fix operand size and location handling in TCPUAddNode.second_cmp
* stack size estimation again improved
* Xtensa: set expectloc of not nodes correctly
* fix for Mantis
0037650: apply adjusted patch by Ryan Joseph do not range check the length of ShortStrings if their length parameter is based on a generic constant
+ added test
* Xtensa: arrays are always passed as by reference but still returned in up to 4 registers
* fix tw3930 after
0037927
o "unique" class (and interface) type aliases should actually not exist at
all except for overload resolution. All the rest (VMT, UUID, RTTI, ...)
should be taken from the aliased class/interface
o there is one Delphi-incompatibily left after this change, but it shouldn't
matter: tw8180 does not compile if you change the declaration to
"tcl=class(TInterfacedObject,XStr,iinterface)", while Kylix does compile
that. It doesn't really matter though, because in Kylix this actually
adds iinterface twice as implemented interface, so there is no point
in accepting this.
* prevent quadratic complexity in the size of the inheritance chain when
comparing objectdefs for equality
* Improved output of spilling statistics:
- Do not use count_uses, since weight already represents a usage count of a register.
- Do not count spills of registers with weight less than 100.
* Use the initial location of stack parameters as a spilling location if spilling is needed. This leads to the following optimizations:
- no spill temp is allocated;
- no load of a stack parameter to a spill temp;
- if a stack parameter is used only once do not preload it to a register. The parameter can be accessed directly in the stack if the target CPU supports this.
* Fixed
0046776: With -O3 do not "coalesce" spilled nodes if the initial location is set.
* Xtensa: tcpuunaryminusnode.second_float fixed for double
* Xtensa: tcgcpu.g_concatcopy uses OC_NE so the branch requires one instruction less
* Xtensa: tcgcpu.g_concatcopy makes use of loop extensions if available
* Xtensa-freeRTOS: fix linking against libc
* more ABI compliant parameter passing
* Xtensa: handle references with offset only properly
* Fixed the stack parameters optimization (
0046776) for big endian CPUs.
* improve call0 calling conventions
* Do not use stack parameter location for spilling if its size is less than the register size for all CPU targets except x86.
* Fixed
0046801 for the case of int64 params with a single paralocation.
* RiscV32: corrected tcpuparamanager.getcgtempparaloc, resolves
0037709
* cleanup
* Xtensa: taicpu.spilling_get_operation_type improved
* Xtensa: trgcpu.do_spill_op fixed
* cleanup
* Xtensa: stack size calculation for the call0 abi fixed
* Include stack location of spilled variables in the assembler output.
* Moved spilling of registers which have the initial memory location and are used only once to a stage after coalescing is done. This produces a better code.
* a classrefdef might also be created with a forwarddef, so handle that correctly
+ Xtensa: make use of ABS.S
+ extended test for abs(...) with single tests
* Reverted
0046836, since it does not work as expected for yet unknown reason.
+ introduce tcgobj.a_loadfpu_reg_intreg
+ make use of it in tcgtypeconvnode.second_nothing
+ Xtensa: implementation of a_tcgcpu.a_loadfpu_intreg_reg and tcgcpu.a_loadfpu_reg_intreg
* RiscV32 correctly set operands of div/mod operations, resolves
0037743
* patch by J. Gareth Moreton: introduce RemoveInstruction and make as much as possible use of RemoveCurrentP, resolves
0037399
* write a proper error message if types are read/written which are not supported in iso mode, resolves
0037763
* m68k: fix index register usage in memory references, when the index is 8 or 16 bit wide and unsigned
* fix for Mantis
0037221: apply adjusted patch by Ondrej Pokorny to allow the use of Copy() on open array parameters (the result will be a dynamic array)
+ added test
* fix for Mantis
0036909: apply patch by Ryan Joseph so that array constructors can be used for static arrays as well.
+ added test
* small formatting adjustments for the sake of consistency
* correctly handle static arrays with a lower index <> 0
+ added test
+ allow in ISO mode that { ... } and (* ... *) comments are paired, resolves at least partly
0037428
* don't print range check warnings when evaluating inlined explicit typecasts
* don't perform "(x=y) or (z=u)" -> "(x xor y) or (z xor u)" optimization
if z or u may raise exceptions (mantis
0037780)
* do not set nonlocal for inter-procedural labels, this is not needed, they use
the jmpbuf to reach the target
* MovzAnd2Movz* optimization improved
+ MovzAnd2And optimization introduced
* extended AndMovzToAnd to support more variants
* compilation on i386 fixed
* fix for Mantis
0037779: use init RTTI instead of full RTTI when copying an array
+ added test
Disable af_smartlink_sections option for Z80 vasm and z80asm assemblers, as it leads to errors
+ modified patch by J. Gareth Moreton: Aarch64: LDR/STR pairing optimisation, resolves
0037580
* better error message in case of illegal nodes for string constants, resolves
0034054
Avoid range check error in a_op_const_reg_reg method when compiled with -CriotR
* another error message changed into a better one
* do not copy unused paravarsyms
* x86: ImulMov2Imul optimization
* x86: apply OptPass1VOP also to vsqrts*
* xtensa-freertos: patch by Alfred for better tool search, resolves
0037308
* Xtensa: set is_jmp flag so branch optimization works
* xtensa-freertos: run python helpers only on non unix by directly calling python
+ xtensa: make use of float.s instruction
+ xtensa: make use of nsau to implement Bsr*
* patch (with little modification) by J. Gareth Moreton: refactor ARM/Aarch64 peephole optimizer, first part of
0037526
patch by J. Gareth Moreton: GetNextInstructionUsingReg drops out earlier, second part of
0037526
z80: cleaned up some tabs vs. spaces indentation mess in the vasm writer. no functional change.
z80: re-enabled af_smartlink_sections for vasm which is required for the vasm + vlink combo, partially reverting
0046916
z80: added handling of sections provided by the startup code to the vlink linker script. this fixes executable building, but the resulting executables still don't work at this point
+ evaluate typeinfo(
)=/<>typeinfo() at compile time, resolves 0030260
* use fld/fst on i386 to copy doubles
Add conversion from "$" to "." for i386-watcom target and avoid iteration if no char modification is wanted in ApplyAsmSymbolRestrictions function
Use ApplyAsmSymbolRestrictions function and limit label sie to 247 for watcom assembler
Rename pvmt internal type to lower_pvmt for i386-watcom as watcom assembler is not case sensitive
* Fix NaN for watcom assembler (C000h is considered as a label, use 0xC000 instead)
* Also use ApplyAsmSymbolRestrictions for label names (required for units using embedded '.'
* Add ':' after a label if there is hp^.next is not assigned
+ x86: FstpFld2Fst optimization (re-enabled for safe cases)
+ optimize comparisons of constant pointers
* set default processor for i386 to Pentium2
* AVR: MovMov2Mov 2 optimization
z80-zxspectrum: fix the the linking order in the bss section, so the startup code doesn't crash when linked with vlink
Treat metadata as data in agppcmpw.pas
+ support all XSAVE instructions, resolves
0037864
+ use pxor/vpxor to load 0.0
+ more pxor/vpxor optimizations
* inline more aggressively, if the ie for the initial change re-appears, it must be fixed differently
* don't do illegal type conversions on GetNextInstructionUsingReg results
* avx-512 has 32 mm registers
* load 0.0 by (V)XORPS/D instead of (V)PXOR in mm registers
* use (V)XORPS/D for unary minus
* use V* instructions if possible
* fix i386 compilation
* mm registers 16-31 are also volatile during a call
+ make use of avx-512 instructions vcvtuis2s* if possible
* improved (V)MOVA*(V)MOVA*2(V)MOVA* 2 optimization
* proper change information for avx-512 vcvt* instructions
* generate simplified code for unary minus when sse/avx is used
* is_signed does not check the ordtype but the ranges, so it cannot be used to
check for valid types for cvtsi2sd/s
* patch by Marģers to unify internal error numbers, resolves
0037888
powerpc: added support for 64bit explicit locations in legacy MorphOS syscalls. improved error handling of various corner cases or explicit paraloc handling
* turn the recently added 3357 warning into an error, to avoid another compiler IE later
* when setting up the symbol for the SEH data don't check whether it is global, instead check whether it's a function
* reset the stored symbol for SEH data once a new section is encountered
* use the name of the symbol instead of the name of the section as the later is always lowercased
* (slightly) modified (formatting, warning) patch by Jan Bruns to speed up overloading search, resolves
0036666
* naturally align threadvar lists/tables
o required for (future) Darwin arm64e target, and a good idea elsewhere too
(on constrained targets, it won't make a difference because the alignment
of pointers won't be > sizeof(longint))
* AArch64: added SIMD instructions (only plain ARMv8-A for now)
o added AArch64 regset parsing support in assembler reader, means that "{"
no longer starts comments there (like in the ARM assembler reader)
o added AArch64 indexed SIMD register support and removed old cg hacks
that worked around its absence
+ Add new LastCommonAsmOp constant to arm and aarch64 CPU targets.
* Uses this new constant to define TCommonAsmOps set type.
+ Use this constant in armgen/aoptarm MatchInstruction function,
to avoid a range check error when compiling with -CriotR with optimization.
* fix try_make_mul32to64() if it's called with a constant node on the
left (mantis
0037878)
o can happen if use_generic_mul32to64 returns false
* patch by J. Gareth Moreton to improve LEA/SHL -> LEA optimisation, resolves
0037954
* (slight modified) patch by J. Gareth Moreton to reduce number of assembler optimizer passes, resolves
0037959
* explicitly convert array indicies to pointer sized integers, so cse
can handle the conversion
* better complexity calculation of tvecnodes
* simplify tcgunaryminusnode.second_integer
+ remove type conversions also for unary operations if possible
* try_make_mul32to64: restore original node order if transformation failed
o this gets called by taddnode.pass_1, which caches the left/right
node types/resultdefs
* LLVM: ensure that the parameter types are processed of procdefs that are
declared when they get first called
o fixes compilation of several tests/test/tobjc* tests after
0046675
+ x86: MovxMov2Mov optimization
* patch by J. Gareth Moreton: minor refactor of reduced iterations of pass 1 of the assembler optimizer, resolves
0037972
* colored message output as requested in
0037331, so far linux only
Also look for function name of 'result' is not found in load_result_node
* patch by Jan Bruns to solve an issue with the new overloading selection code, resolves
0037969
+ inline subroutines with formal parameters as well
* directly copy the result of set set into the left side of an assignment
Add explicit longint typecast to avoid range check errors with unwindrec longword variable
Display xtensa specific options for ppcxtensa -h
* delphi has excessprecision turned on by default
* excess precision should not be applied to comp or currency
i386-go32v2 also does not support progbits, as other COFF targets
Disable use of cmov instructions in alignment patterns for some i386 targets (it prevents use of some emulators)
- remove unused trimbspace
+ added ansistring variants for some helpers
* use AnsiString for file names to overcome length limitations
m68k: add missing FINT and FINTRZ instructions to spilling_get_operation_type()
* reverted accidental change
m68k: change the stack push order in the register calling convention to left-to-right. This should fix parameter handling in nested procedures (tnest5)
* bump ppu version after
0047279. it changes the ABI (m68k only), so units are incompatible even if the format didn't change
+ patch by Anton Kavalenka to support coloured output on windows, resolves
0038025
* added "const" to some string parameters
* give an error when trying to define a macro/compiler variable with
an empty name
* changed TIDString and tsymentry.realname to TSymStr
o for TIDString: prevents shortstring -> ansistring conversions with
-dsymansistr when looking up symbols
o for realname: consistency with name
m68k: initial commit to add the Sinclair QL as a compiler target
* m68k: enabled vasm assembler support for the Sinclair QL, and added linking
* using ymm registers for copying data is always useful, regardless of alignment
* fix tcgx86.a_loadmm_reg_ref and tcgx86.a_loadmm_ref_reg for 64 OS_M512
* allow var alignment up to 64 bytes
+ i386 supports also avx-512
* i386 can use only 8 mm registers with avx-512
* also use avx copying for mod 4=0 memory blocks
* patch by J. Gareth Moreton: MOV/LDR/STR/MOV optimisations for ARM/AArch64, resolves
0037638
+ completed Ch_* information for VMOVD*
+ take care of vzeroupper in exit code optimizations
+ tx86addnode.second_opvector makes use of AVX instructions
* moved UseAVX from cgx86 to cpubase
+ UseAVX512
sinclairql: when linking with vlink, generate an unrelocated binary with appended relocation info, so the startup code can relocate it
* fix for Mantis
0038051: make Chr() a real intrinsics so that it can be used in type declarations as well
+ added test
* increase PPU version so that the change of Chr() to a full intrinsic will not lead to problems
* fixed type of size parameter passed to fpc_getmem() when translating
new(pointer) (mantis
0038054)
m68k: fix references like (An) to parse properly in the assembler reader
sinclairql: make sure the default CPU target is 68000 for the QL. also, some cleanups
Move explicit typecast to after check to avoid RTE when compiled with -CR
* use VPXORD in avx-512 mode as VPXOR does not work for the upper 16 registers
* compilation on i386 fixed
* regenerated msgidx/msgtxt after
0047376
* Arm Thumb does not support complex references including SP, resolves
0038056
Remove setting of USE_FAKE_SYSUTILS macro for MacOSClassic, as sysutils is now compiled for that OS
Use MPW linker variant also for m68k-macosclassic target
Avoid uninitialized variable warning with -O4 option
Merge: 06f5e293df 897322868b
-- Zusammenführen von
0047033 bis
0047401 in ».«:
C compiler/i386/i386nop.inc
U compiler/i386/i386tab.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386att.inc
C compiler/i8086/i8086nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086att.inc
U compiler/x86/x86ins.dat
C compiler/x86/rax86.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/cpubase.pas
U compiler/x86/agx86att.pas
U compiler/x86/itcpugas.pas
U compiler/x86/rax86att.pas
C compiler/x86_64/x8664nop.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664att.inc
U compiler/utils/mkx86ins.pp
U tests/utils/avx/asmtestgenerator.pas
U tests/utils/avx/avxopcodes.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0047033 bis
0047401 in ».«:
U .
Konfliktübersicht:
Textkonflikte: 4
Konfliktübersicht:
Textkonflikte: 4
* fixes for nasm writer, resolves
0038074
+ test
sinclairql: reduce default stack size to 8K
sinclairql: add a note about .bss sections and the binary size, no functional change
m68k: fixed parsing of absolute addresses in the assembler reader
m68k: fixed parsing of constants to absolute addresses
* simplified and fixed code of (v1=const1) and (v2=const2) optimization, resolves
0038066
sinclairql: the newline on this system is LF, not CRLF
sinclairql: following Frank Wille's advices, reworked the linker script to omit .bss section from the binary. this reduces a simple 'hello, world' size by ~5K. needs matching startup code.
Revert commit
0047257, Disable use of cmov instructions in alignment patterns for some i386 targets (it prevents use of some emulators)
Replace it by a new set of i386 targets, for which the default cpu is set to i80486 instead of pentium2
to avoid (for default configuration) use of CMOVxx or PREFETCHyyy instructions, not supported by some emulators.
* better writing of ordinal const. nodes
* correctly simplify tree transforms of (a+c1+c2) if a is a pointer, resolves
0037671
* Give access to CPU specific fields of tsettings record
in GENERIC_CPU mode, to be used by ppudump utility.
generic/cpuinfo.pas: Add tinstructionset, used for ARM cpu.
globals.pas: Put all CPU specific fields of tsettings record
inside a variant part when GENERIC_CPU is defined.
Also import llvm unit when GENERIC_CPU is defined.
+ utils/Makefile.fpc: Add -Fu../llvm option to compile ppudump,
as it now also needs llvm specific code decause of globals unit change.
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
Do not set USE_FAKE_SYSUTILS for MacOS anymore
Add separate cs_assemble_on_target tglobalswitch entry
+ options.pas: Add new option -sT, to do only the linking on target, by
opposition to the old -st option, which does
both assembling and linking on target.
msg/errore.msg: Add new -sT help message
modify -st help message, to explicitly say that both assembling and linking
scripts are prepared for target system.
* msgidx.txt, msgtxt.inc: Regenerated
In FindObjectFile check the assembly file if cs_assemble_on_target is in globlaswitches
Replace cs_link_on_target by cs_assemble_on_target in assemble unit
sinclairql: make sure the Sinclair QL defaults to vlink
+ optimization type converted (modulo) divisions as well by removing up/down converting but,
insert a test and separate code path for -1 if needed
* fits_in_mm_register takes care of avx(512) support
* fix spilling of avx(512) registers
* get_scalar_mm_op fixed for M256
+ implement prefetch intrinsic for aarch64
* set reasonable defaults for arm eabi
* patch by J. Gareth Moreton: fixes crash on ARM with -CriotR, resolves
0038116
+ Aarch64: call OptPass1FData for FMA instructions as well
+ Aarch64: implemented FMovFMov2FMov, not yet used
m68k: fix DB/DW/DD handling in inline assembler, update BuildConstant() method to current standards. issue reported/initial patch by Marcel Kilgus in QLForum.co.uk
* remove obsolete comment from rautils/ConcatConstant, issue reported/initial patch by Marcel Kilgus in QLForum.co.uk
sinclairql: use .exe as extension for executables instead of .bin, patch by Marcel Kilgus at qlforum.co.uk
Also accept s80bit real constants when FPC_SOFT_FPUX80 macro is defined
sinclairql: map file generation support with vlink, inspired by a patch posted by Marcel Kilgus in qlforum.co.uk
* backported vlink map file generation to other targets using vlink: Amiga, Atari and ZXSpectrum
+ Xtensa: make use of the LSX/SSX instructions
* Xtensa: cleanup of getreferencestring
+ added coloured compiler output support for OS/2 and DOS targets, platform-specific parts refactored to a standalone unit to remove the heap of ifdefs in unit comphook
sinclairql: added platform specific options to allow specifying executable metadata format
sinclairql: drop support for the BASIC loader, write Q-emuLator or XTcc compatible metadata to the executable instead. based on a patch by Marcel Kilgus in qlforum.co.uk
sinclairql: mark the qhdr metadata format as default in the help text
* when getting an llvm temporary recorddef, recurse into arrays rather than
treating them as opaque defs. This is required to ensure that the temporary
recorddef for all x86-64 function results are the same on the caller and
callee side, as we allocate new arrays when generating them
* pass lp64d to GNU AS for abi_riscv_hf to get the right ABI set
* .def must be set on linux else it might be that the created executable is
deleted after compilation
Allow easier disabling of $inline on, by using -dDISABLE_INLINE
Improve CRC_checksum testing code with -dDEBUG_UNIT_CRC_CHANGES -dTest_Double_checksum -dTest_Double_checksum_write
Add {$i fpcdefs.inc} to units that do not have that include
bugfix internal assembler-reader x86 opsize local var
bugfix internal assembler-reader x86 opsize local var
Fix compilation with DEBUG_PPU macro set
* do not include fpcdefs in the cepiktimer unit
+ factor out PostProcessELFExecutable
+ write executable section size on linux
* take care of po_noreturn in more cases
* Fix for Mantis
0038122: when a deref node is passed as a Self parameter for a type helper (which is a var parameter) we need to pass the non-derefentiated value so that the data it points to can be modified by the helper's method (this is Delphi compatible)
+ added tests
* Improve Test_Double_checksum with Test_Double_checksum_write CRC testing code.
Pass the three checksum arrays from ppufile to module owner,
to be able to check that the checksums computed at the time pf ppu writing
are compatible with the ones computed at interface level.
+ #QLvember work: stack frame optimization for m68k
* check if an invisible parameter for the result occupies parameter space
working on new testmethods (memref-operands)
working on new testmethods (memref-operands)
working on new testmethods memref operands
working on new testmethods memref operands
* allow an AT&T suffix for movabs
+ -Xa option: generate code which allows to use more than 2 GB of static data on 64 Bit targets
+ implemented support for x86-64
* more than 2 GB static data requires to use the --no-relax option on linux
+ range check enumeration array indicies, range checking is after all a safety mean
working on new testmethods (memref-operands)
working on new testmethods (memref-operands)
Add internalerror when V_Error level is used in Test_double_checksum code, only with TEST_CRC_ERROR macro set
Apply patch proposed by J. Gareth Moreton in:
bug report
000036882: [Feature] Class and record definition XML dump extension
These patches extend the node dump feature (enabled with DEBUG_NODE_XML)
so it also dumps class and record definitions to the XML file. They are contained within
tags.
Currently only fields and constants are dumped to the XML file. Methods, constant and variable definitions may be added later.
* dir_push might not flush pending switch changes but has to read the pending
record if needed
working on internal assembler-reader x86 opsize local var
working on internal assembler-reader x86 opsize local var
Fix i8086 compiler failure due to move of printnodeindention variable into verbose unit in commit
0047658
* Second patch xml-node-dump-defs.patch from J. Gareth Moreton from bug report 36882.
With same changes to ensure that xmllint find no errors in generated xml files.
+ add endsym to ConcatConstSymbol
Fix z80 compiler failure after change to ConcatConstSymbol in commit
0047668
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
* fix in
0047632 should be enabled for all targets as it is a stack tainting
parameter
bugfix internal assembler-reader x86 opsize local va
bugfix internal assembler-reader x86 opsize local va
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
* don't do x*x -> optimziation for xtensa as it causes a recursive call in sqr(...)
Raise internalerror inside RemoveCurentP is called with p=hp1, because it leads to using a class instance after it has been freed
Avoid internalerror in RemoveCurrentP for arm compiler
* cleanup merge overlefts
+ min/max intrinsics for internal use by the compiler
+ replace appropriate if statements by min/max intrinsics
+ support min/max intrinsic on xtensa
+ project file for PowerPC64LE
+ read 64-Bit ELF executable info correctly
* x86 change information updated
* (modified) patch by Christo Crause: ESP8266 doesn't support min/max instructions, resolves
0038175
* patch Christo Crause: Use LDS for 8 bit references, resolves
0038173
+ min/max support for x86
* quick fix for llvm compilation
* limit min/max optimization to fastmath for now, as the NaN handling is not working yet
working on internal assembler-reader x86 opsize local var
working on internal assembler-reader x86 opsize local var
* Adapted from patch node-dump-pass-1.patch submitted by J. Gareth Moreton from bug report 38156.
This patch extends the DEBUG_NODE_XML debug feature by also outputting,
to the *-node-dump.xml files, the node tree as it appears after the first pass,
since it often contains many more internal nodes like temporary allocations that may need
to be evaluated for debugging and development purposes, or node-level optimisation opportunities.
+ added explanation for min/max intrinsics
* prepared x86 implementation for proper NaN handling
Fix bug introduced in commit
0047709, by only calling node_complexity if first pass was already done (bug report 38183)
* handle min/max properly if it is applied to NaNs
* test extended
Fix pos field closing in XML node output after commit 47720
+ m68k: JSR, RTS to JMP optimization
m68k: in g_concatcopy, check the actual alignment of references being copied rather than always excluding word and dword sized direct copies on a 68000
cleanup bugfix internal assembler-reader x86 opsize local/global var
cleanup bugfix internal assembler-reader x86 opsize local/global var
amiga: fixed the recently added link map generation to work properly. needs recent vlink to work
* fix regression introduced with
0047625 for Mantis
0038122: when checking for a dereferentiation of the Self parameter subscript and vec nodes need to be kept
+ added test
* made optimization JSR, RTS to JMP more bullet proof, added comment
* m68k: MOVE, TST, Jxx/Sxx to MOVE, Jxx optimization
* Try to read command line exec name on linux, using argv[0], in order to be able
to use the symbolic link name instead of the real executable name.
This allows to use symbolic links to gppc386, named gppc1
to be able to launch ppc1 under gdb, as it is already possible
under OpenBSD (which returns the command line name via paramstr(0),
or under Windows if is used (generated by mklink).
+ Generate errors if compiler executable is not found, or if gdb binary
is not found.
* allow absolute variables with an address to be used as syscall base
* m68k: proper values for first_*_reg
+ m68k: LEA, MOVE(M) to MOVE(M) predecremented optimization and MOVE(M), LEA to MOVE(M) postincremented optimization
* call node_complexity correctly in order_parameters when sorting parameters
+ optimize if x>a then x:=a; into min(a,x);, similiar for max
* test extended
* min/max optimization on x86 can be applied now without fastmath as NaN is handled properly now
* x86: apply VOpVmov2VOp optimization to vmins*/vmaxs*
Fix ash_savefregp_x handling, as revealed by range check error
* improved change information
Fix compilation failure for avr compiler with -dDEBUG_NODE_XML, to fix bug report 38222
cleanup and add comments to div. vcvt.. opcodes
cleanup and add comments to div. vcvt.. opcodes
* apply doremoveinttypeconvs to unary minus and not on 8 and 16 bit targets as well
* do an unsigned division if one operand is unsigned an the other
one a constant in its range, resolves
0038180
* x86-64: correctly translate and with large constants in mod optimizations, resolves
0038164
* change def parameter of single_type() from var to out (part of patch by Blaise.ru)
* apply slightly adjusted patch by Blaise.ru which moves parsing of result types to a separate functions thus ensuring that File types can't be used for procedure variables (just like they already couldn't be used as a result type for normal functions)
+ added test
working on internal assembler-reader x86 opsize local/global var
working on internal assembler-reader x86 opsize local/global var
* Aarch64: fix 32 bit div operations with constant denominators, resolves
0038225
working on new testmethods and bug-fixing size of (memref-operands | global and local variable - append correct gas-suffix on any vcvt.. opcodes
working on new testmethods and bug-fixing size of (memref-operands | global and local variable - append correct gas-suffix on any vcvt.. opcodes
+ patch by J. Gareth Moreton: some new x86 assembler optimizations, resolves
0038130
* apply patch by Blaise.ru to enable the correct generation of names for classes/interfaces inside local symtables; these will be required for reference function types which are in fact interfaces and classes, this does not mean that ordinary classes can be declared inside functions
Note: no test as the functionality is not yet used
* fix the m68k cross-builds by disabling part of
0047824
external gas-assembler - handling special opcodes with multiple memref-size e.g. vfpclassps/pd - if operand-opsize < S_XMM =>> use memref-min-size
external gas-assembler - handling special opcodes with multiple memref-size e.g. vfpclassps/pd - if operand-opsize < S_XMM =>> use memref-min-size
Appply fix from Gareth Moreton in bug report 38247
* implemented UseAVX512 properly
+ make use of VREDUCE* for frac(...) if AVX512QD is a available
* Ch_ information for vreduce* fixed
* min/max optimization needs to check both operands of the if condition, even if no else-statement is passed, resolves
0038249
Fix compilation of i8086 compiler after commit
0047840
* lines with 255 chars a little bit long, reformated them
m68k: the LEA+MOVEM to MOVEM optimization is not feasible on a ColdFire
+ Xtensa: support large stack frames for the call0 abi
m68k: new CPU capability - the LINK instruction supports LONG displacements (68020+)
+ support got modifier on labels
* fixed llvm shadow symtable construction in case fields are reordered
(-Ooorderfields) and hence their offsets are no longer monotonically rising
* also fixed padding for variant bitpacked records in llvm shadow symtable
* generate more efficient code for trunc(currency), trunc(comp), and
round(comp) on platforms where currency and comp are handled using the FPU
o also fixes trunc(comp) and trunc(currency) compilation for x86 on LLVM
with -Oofastmath
* add missing removal of excess fpu precision typecasts for trunc/round
- revert
0047208
* properly fix the internalerror it hid: only replace the local symbols
migrated to the parentfpstruct right before generating debug information,
so that internally generated self/result loads during optimisation passes
don't get confused by the replacement absolutevarsyms (those are normally
never encountered during optimisation, as regular absolutevarsyms are
replaced during parsing)
* use new TSym.EscapedRealName property when creating new symbols with the
same name as existing symbols
* factored out the creation of loadnodes for special variables/parameters
+ $codealign directive accepts setting maxcrecord
external gas assembler: special handling for correct suffix in vfpclass-opcodes
external gas assembler: special handling for correct suffix in vfpclass-opcodes
* fix comment typo mentioned by Bart
internal assembler-reader x86 opsize local/global var - cleanup
internal assembler-reader x86 opsize local/global var - cleanup
working on internal assembler-reader x86 opsize local/global var
working on internal assembler-reader x86 opsize local/global var
* fixed error in load_fpu_location triggered by round() (fixes webtbs/tw32671
on i386 after
0047854)
+ implement align directive for records, resolves
0028927
* correctly handle inlined exits in dfa, resolves
0038259
internal assembler-reader x86 opsize local/global var - cleanup
internal assembler-reader x86 opsize local/global var - cleanup
* Fixed missing slash in fppkg.cfg when installed in the root
* do not check inlined exit nodes for unset results, resolves
0038259
* first part of fixing
0038267: do not bail out early during constant folding
if the constant is 1 or -1
* refactored constant folding code
* properly fold string+string const+string const., resolves
0038267
internal assembler-reader x86 (local/global var) - validate asm-opcode-attsuffix and memrefsize
internal assembler-reader x86 (local/global var) - validate asm-opcode-attsuffix and memrefsize
+ fold also (string const+(string const+string var))
* string tree folding code moved into level 2 opt. block
* instead of blindly consuming whatever comes next trigger an explicit error if the parsed expression does not match for "INDEX ordexpr" or "NAME strexpr"
+ added tests
* always add a generic dummy if it is a procsym
* ensure that the dummy symbol is registered if it's added due to a routine
* use a case statement instead of nested if-then statements
* also handle call nodes when determining the generic symbol for inline specializations
* when only a symbol name is provided to generate_specialization_phase1 allow a symbol table to be provided as well
* correctly handle the case should the generic dummy symbol be a procsym instead of a typesym
* Delphi does not allow a generic method to be overloaded by a non generic type of the same name (unlike for generic types and non generic routines); this is probably done to simplify the implementation of implicit specializations of generic methods so we do this as well. For this we change the dummy symbol for generic routines from a typesym to a procsym
+ added tests
Note: what Delphi /does/ allow however is to overload a generic routine with a generic type... go figure. :/ We currently don't allow that
* fix compilation on targets that use Stabs debug information: ignore generic dummy symbols with no procdefs for generating stabs data
+ added newly used opcodes to avx_opcode_only_op0_may_be_memref
-- Rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
U ppcx64.lpi
-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
G ppcx64.lpi
-- Entfernung der Zusammenführungsinformationen von »ppcx64.lpi«:
U ppcx64.lpi
-- Rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
U ppcx64.lpi
-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
G ppcx64.lpi
-- Entfernung der Zusammenführungsinformationen von »ppcx64.lpi«:
U ppcx64.lpi
* use str(...) instead of typinfo unit
* use str(...) instead of typinfo unit
+ patch by J. Gareth Moreton: Advanced MOVZX optimisations, resolves
0038294
* fix for Mantis
0038310: ignore procsyms that have no procdefs for checking overloads, or more precisely to stop checking for overloads; these are generic dummy symbols
+ added (simplified) tests
* weight currency->float conversions the same regardless if
the currency type is handled by the integer unit or the x87 fpu,
resolves
0038309
* have the generic dummy symbols for procsyms keep track of their overloaded generic procsyms so that they can be easily found (will be needed for implicit specializations)
* llvm: only set custom parameter alignments for byval parameters, the rest
is handled automatically by llvm (and since llvm 11.0 you get an error if
you specify an alignment for them anyway)
* throw a proper error if a contructur has a type parameter in delphi mode, resolves
0037217
+ AddLea2Lea optimization
* improved LeaLea2Lea
* patch by J. Gareth Moreton to resolve bug introduced in the first patch, resolves
0038294
* simplified code for JccAdd2SetccAdd optimization
* patch by J. Gareth Moreton to fix MovzxCmp2CmpMovzx, resolves
0038339
* clear up message that a global generic references a static symbol a bit
* regenerate msg*.inc files
* add parameter cleanup nodes to the call cleanup block (mantis
0038316)
* do not extend 8 bit return values to 32 bit when loading them into eax,
this is not required by the api, neither does e.g. clang it
cleanup + add internal error if all asmr_e_not_supported_combination_attsuffix_memrefsize_type are reported
cleanup + add internal error if all asmr_e_not_supported_combination_attsuffix_memrefsize_type are reported
* avoid widening of shl operations, this is not necessary for them either
+ support R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX
* patch by J. Gareth Moreton: refactor OptPass2Jcc, resolves
0038343
* simplify tx8664shlshrnode.pass_generate_code, it should not mess with the result type, this
is a matter of the type check pass
* x86: some fixes to enable 8 and 16 bit operations
* arm*: fix SxtbAndImm2Sxtb (now SxtbAndImm2Uxtb) optimization as proposed by Pierre and Gareth
* similiar fix to
0048167 for OptPass1SXTH
+ remove try ... finally statements if the finally block is empty
Fix clearing of single type register variable in initialize_regvars method for ARM cpu (with -Ooregvar)
* patch by J. Gareth Moreton: Unitialized result variable fix on non-x86 debug builds, resolves
0038371
Avoid inlining of real constant for m68k if type is not best precision
* arm/aarch64: patch by J. Gareth Moreton: fix register allocation information for Mov2None 2, should resolve
0038055
Reset paratargetdbg to dbg_none when handling -g- option, to really suppress debug information generation
* patch by J. Gareth Moreton: aarch64 EXTDEBUG fixes and extensions, resolves
0038383
* give a proper error if macros are too deeply nested
* Removed/ifdefed lots of unused variables.
* Corrected visibility of overridden methods.
* Commented out some unused (yet?) local variables.
* Fixed a wrong code caused by a typo. It has been revealed by a note about an unused var.
* Fixed
0044145. To test if a constant is declared it is needed to use {$if declared()} instead of {$if defined()}.
* Commented out the unneeded/unfinished code.
* Removed/ifdefed the assigned and unused variables.
* Removed more assigned but unused vars.
* Corrected method's visibility.
+ modified patch by Christo Crause: if the target support, the switch -Xu can be used to generate the executable as an uf2 file
* Removed in_x86mm_last (the duplicate no and unused) from the tinlinenumber enum.
* Fixed value of the LF_PAD13 enum element.
* do not output error numbers for options
Add cs_generate_uf2 entry into ppudump
+ write message number to docs
+ enclose arguments in text angles
* rgobj: ungetiftemp can't be used here since it frees only temps of the tt_normal type.
* compiler utils cannot depend on StrUtils
* use generic VFP type instead of VFP list prone to changes
* properly mangle interface wrapper names to avoid duplicate label errors, resolves
0038385
m68k: revert
0048224, the fix proposed in that patch was just hiding an underlying issue
* fix type conversion for array indicies if the ordinal ranges of the involved types do not overlap, resolves
0038413
* handle generic with ord call of sub-range and enumeration data excluding 0 correctly, resolves
0038412
* removed accidently committed printnode
* the size of the CIE_pointer in an FDE is always 32 bit
* allow sub/add nodes in constant pointer expressions, resolves
0034027
* create \index entries in the messages.inc for an index of message texts and numbers in the user manual
bugfix
000037785 cvtsi2sd,cvtsi2ss for platform i386
bugfix
000037785 cvtsi2sd,cvtsi2ss for platform i386
+ throw a warning in ISO mode if a constant string is assigned to a char and the sizes do not match, resolves
0038439
* do not initialize unncessary register allocators
* Fixed expectloc of local variables passed as a formal parameter. This issue is caught by cycling the compiler with -dEXTDEBUG. Yet the compiler can't cycle with EXTDEBUG due to other issues with wrong expectloc.
* more helpful message if an unknown field is accessed in the assembler reader, resolves
0038475
- armv5 never existed (without extension), removed
* do not mess with FPA registers if they are not available
* factored out tbasecgarm.init_mmregister_allocator
+ throw an error if hardware floating point operations are used in thumb(-1) mode, this is not supported
* arm: taicpu uses set instead of boolean to store instruction states
+ track if an instruction is a thumb instruction in taicpu
* forgotten part of last commit
* arm thumb1: several fixes for the internal assembler writer
* initialize current_settings as early as possible so cs_debugswitch is set correctly if needed
* ARM: NR_RETURN_ADDRESS_REG is R14
* arm thumb: generate proper cfi
* initial implementation of CFI support for arm (non-thumb)
* generate advance_loc records only if there was code/data since the last advance_loc entry
+ (safe) heuristics to use DW_CFA_advance_loc1 in CFI
+ generate initial cfi for aarch64
* more cfi support for aarch64
m68k: extend the the register to full size, when multiplied by an immediate in memory references. Patch based on the work of Pierre Muller.
* patch by Alfred to fix cutils.CompareVersionStrings, resolves
0038514
+ array defs. of open arrays are now marked by ado_OpenArray, so (internally!) zero sized array can be declared with 0..-1
* string constants have a size of 0, resolves
0038504
* correctly set the defowner of the exception symtable to the surrounding routine as suggested by Blaise.ru
+ add modeswitch for anonymous function and function references
* allow in-operator to be used on type parameters, resolves
0038497
* Darwin targets that don't support link order sym files can't smart link
vectorized sections
* attempt to fix bitpacked records with qwords in them (tw36156) when cross-compiling to big endian targets from x86. essentially the x86 shifting workarounds in the code already weren't covering all corner cases.
bugfix
000037785 cvtsi2ss and cvtsi2sd in x86_64 { att}
bugfix
000037785 cvtsi2ss and cvtsi2sd in x86_64 { att}
* correctly allocate edx for mulx, resolves
0038533
Apply patch proposed by J. Gareth Moreton in bug report
000038527
The patch reworks the LeaLea2Lea optimisation and hopefully fixes the bug (admittedly by adding a brand new optimisation!).
m68k: removed some helper function which was added, but in the end it never saw any use
m68k: adjusted some max alignment values for m68k-linux based on i386-linux, because the ELF loader on m68k should be able to provide the same alignments for globals
Patch by Gareth Moreton
* Fix lea optimizations which lead to more failures with -O3 and -O4 options.
- LeaLea2Lea now checks to see if the index register is in use.
- For both the base and index registers, RegUsedBetween is changed to
RegModifiedBetween, since just reading the register is harmless for the
optimisation (it finds additional optimisations in the RTL as a result).
- Because I saw the mis-optimisation with MOVZX that occurred (even
though it was due to the mis-optimisation of LEA instructions), I wrote
some extra code in OptPass2Movx as a safety measure to ensure this
doesn't happen (although no additional instances of it happening have
been noted so far - best be safe than sorry).
+ added b.cc/b.cs support to AArch64 assembler reader (mantis
0038485)
* applied patch by Pierre to fix make cycle -Cr
+ SETcc/Mov -> SETcc optimization
m68k-linux: revert maxCrecordalign to 2, as an experiment to fix some linking-against-C regressions since the alignment changes
* for setjmp based exception handling, get the type of the exception reason from the setjmp result
* fixed JVM stack height calculation after calls returning an
implicit pointer tpe
* the new constant string arraydefs are also implicit pointers types for JVM
* support Objective-C classes and protocols with -gw3 (mantis
0036250)
* fix LLVM after
0048828
* global gotos really use the return type of fpc_setjmp to test where we come from
+ apply excess precision also to unary minus nodes
* made excess precision really working
+ optimize (a and b) or (c and not(b)) into c xor ((c xor a) and b)
+ test
* sar*/ro* do not call location_force_reg if not needed
* do not omit location_force_reg on second operand of sar/ro* if
it is used to adapt the size of the operand
* patch by J. Gareth Moreton: MOV/SHR reference optimisation, resolves
0038560
* patch by J. Gareth Moreton: SubMov2LeaSub optimisation improvement, resolves
0038555
* patch by J. Gareth Moreton: take care of -Os for SubMov2*, part of
0038579
* do not generate mul instructions if the mul extension is not available
* do not apply the (a and b) or (c and not(b)) into c xor ((c xor a) and b) optimziation if short boolean evaluation is used, should resolve
0038576
* improved test
* improved last commit, better handling of boolean expressions
* last commit fixed, hopefully final fix
* Improve DEBUG_PPU code
* Move flog file closing from closefile method to destroy destructor.
* Fix write_data output into flog
* RiscV32: properly read references with record offsets and base register
+ RiscV32: sanity check in assembler writer
* unified RiscV32 and RiscV64 GAS readers
+ initial (and so far experimental) implementation of -ix to output -i in xml format for further automated processing
+ support for .dc.a directive
* read multiple section flags
* RiscV: basic CFI stuff fixed
* RiscV: if shared libraries are involved, we have to link always against the crt*S.o variants
+ RiscV: initial support of pic generation
* riscv64-linux: generate PIC for all units as it is required for shared libraries
Rough fix for riscv32 failure
* RiscV: unified itcpugas.pas
* RiscV: integer type conversions fixed
- cosmetics: superfluous newlines removed
* the TFPList.List property made protected in order to discourage using it
directly, as this circumvents range checking
Use uvalue field to get unsigned and avoid range check or overflow errors
Avoid invalid typecast error when using -CR option
+ introduced TFPList.IndexOfItem and TFPObjectList.IndexOfItem, which are like
IndexOf, but can also search backwards. The same method already exists in
FPC's classes unit.
* when parsing unions, set the uniondef reference to nil in
current_module.deflist after freeing the object to prevent dangling pointers
and use after free
+ patch by J. Gareth Moreton: AddMov2LeaAdd and AddMov2Lea optimizations, resolves
0038579
+ X86: JccMovJmpMov2MovSetcc optimization
* instead of registering all and then deleting non-propgetter/setter procdefs in
pdecvar.read_property_dec, don't register them by default, and then only
register them, if they are propgetter/setter. This prevents dangling pointers
in current_module.deflist and potential use-after-free bugs.
+ RiscV: initial OpAddi02Op implementation
* RiscV64: type conversion to 8 bit improved
* remove nf_write from the counter node when converting for loops into while loops if the counter is only read
* Dwarf: write variant fields only if the require features are present, resolves
0038651
* Add SAMD51P19A controller type. Unit generated by Michael Ring and slightly modified.
* patch by J. Gareth Moreton: Nothing (NOP) node optimisation, resolves
0038194
* copy and compare the typesym inside type nodes as well
* fix for Mantis
0038642: for enumerations with jumps Delphi behaves as follows:
- GetTypeKind returns tkEnumeration (FPC previously generated a compile error here)
- GetTypeInfo on a generic parameters returns Nil for such types (FPC previously generated a compile error here)
- GetTypeInfo otherwise generates a compile error (as before)
* the offset parameter of reference_reset* must be asizeint rather than
longint (mantis
0038636)
* allow also 8 byte string constants in assembler, resolves
0028640
* fixed assembling via pipe on Darwin
* fixed memory leak, introduced accidentally in
0048998
* cpubase.cgsize2subreg should handle all valid sizes, resolves
0038557
+ Xtensa: tcpuinlinenode.second_prefetch
+ some more change information entries added
Avoid keeping optimized out node in callcleanupblock.statements or callinitblock.statements
Use value $00000F00 instead of $F0000000 for IF_FPMASK, and adapt all floating point constants, to avoid IF_VFPv4 having the same value as IF_PASS2
* x86-64: we can spill replace 32 bit operations if the operation does not modify a register
+ enable colored output on darwin, resolves
0038693
* fix for Mantis
0037426: don't allow an instance function of a type helper to be used on the type instead of a concrete value
+ added test
* Windows on ARM64 adheres to the usual Aarch64 ABI, thus references need to be copied on the caller side as well
+ Aarch64: cpu_capabilities support
+ write controller unit wiht -ix as well
* Aarch64: the M1 is an ARM v8.4-a CPU
* Aarch64: cpu capabilites defines properly named
* Aarch64: enable defining cpu capabilites
* Aarch64: support LSE instructions
* fixes to deadstore optimization
* do not remove register deallocations/allocation pairs if the register is written
* Xtensa: fix crash in TCpuAsmOptimizer.RegLoadedWithNewValue
* allow procvars to not be registered right away
* set proctypeoption for procvars
* extend procvar_dec so that procvars don't have to be registered
+ Aarch64: create better code for not()
* don't override specified assembler on the command line when leaving
assembler files in case that specified assembler is already an
external one
* don't generate high-level CFI statements when the selected assembler
does not support them, even if the target normally uses them
o fixes assembling with -Aas-darwin for i386/arm/x86-64 (on OS
versions that used those)
* allow also CSUBSETREG in tx86inlinenode.second_IncludeExclude, resolves
0038733
* PowerPC: initial (and primitive) implemenation of TCpuAsmOptimizer.RegLoadedWithNewValue
Refactor code to avoid problems with -CR option
+ FreeBSD/AArch64 support (patch by Mikaël Urankar, mantis
0038441)
* fixed win32 testsuite regressions after
0049084
sinclairql: enable commandargs and exitcode features
* use up to 16 bytes alignment for the WASI target
+ common assembler optimizer base class for powerpc and powerpc64
* factored out TPPCAsmOptimizer.RegLoadedWithNewValue
- obsolete defines removed
- forgotten file, obsolete define removed, belongs to last commit
* Delphi-mode calling without parenthesis
Also avoid invalid typecast for RegLoadedWithNewValue method for mips, sparcgen and xtensa
m68k: cleaned up some ancient mess from cpunode.pas, no significant functional change, apart from unit inclusion order
m68k: on the Sinclair QL insert the main program's name into the object, so the RTL later can set it as default job name
+ optimized multiplication for "symmetric" bit patterns on arm
m68k: always use ELF objects with vasm for improved cross-compatibility with other tools and compilers
+ Aarch64: completed LSE support for all interlocked operations
* avoid leaving a dangling pointer in pparautl.proc_add_definition to prevent
use after free in different parts of the compiler
Add fForceUseForwardSlash to TLinkRes class, used for vlink linker on hosts using backslashes
* fix for Mantis
0038771: the owner of the procdef might be Nil in case of a specialization (that virtual can't be used on generics is caught later on)
+ added test
Add systems_openbsd to suppported_targets_x_smallr and modify GenerateExecutable in t_bsd unit accordingly
* moved a bunch of constants from dbgdwarf to dbgdwarfconst
* if left is a smaller type, then an extension operation for shr can be removed
m68k: added support to references like (a0,d0.w) in inline assembly, also fixed a bug, where sometimes the index register would have been randomly set as smaller than .l size, when the size wasn't specified
sinclairql: support the upcoming QL binary linking feature of vlink (still in development). it's behind an undocumented -WL switch now. also, reduce the amount of used dataspace by the size of the relocation table in the current linking mode
* patch by J. Gareth Moreton: AArch64 OptPass1Shift register tracking fault fix, resolves
0038691
* moved warning about suspicious comp assignment to type check pass, catches also
assignments of constants
Remove unused, obsolete -dBROWSERLOG option
* NDS: fix condition when to default to apptype arm9
Fix gotpcrel relocation for TESTQ x86_64 instruction
+ Aarch64: use frintz for int(...) instead of creating a helper call
+ Aarch64: directly inline code for frac(...)
* prevention of dangling pointers and use after free after free_unregistered_localsymtable_elements
* decrease macro nesting counter early when expanding empty macro
to avoid errors about too depth macro nesting, resolves
0038802
* patch by Christo Crause to fix
0038789: writing of linker commands should not depent in -s
Add -march=XXX option for aarch64 external assemblers
Add .force_thumb pseudo-directive support forarm reader
Avoid invalid typecast if hp is not an instruction
m68k: fixed a comment. no functional change
Avoid range check error inside genitem_thumb2 by changing local variable i type
Make sure nf_usercode_entry get transferred inside firstpass procedure
Set string length before calling move to avoid problems with global data analysis on systems using C library
* fix compilation of arm compiler on 32 bit hosts
Avoid warning with -O4 option
* avoid overflow during register allocation
Add several missing -AXXX options
Use as-clang as idtxt for as_aarch64_clang_gas_info
* patch by J. Gareth Moreton: AArch64 "magic division"
(replace division by constant with multiplication), part of
0038806
Also check *.pas and *.inc files inside sub-directories in msgused.pl
Add -TFreeBSD target OS option to -h output for aarch64 compiler ppc64
m68k: D2 is considered volatile on macosclassic
m68k-sinclairql: apply the same hack as for amiga and atari to avoid vlink section attribute warning
m68k: sinclair ql now requires vlink 0.16h or newer.
Avoid range/overflow error after commit
0049290
* fix finally block getting unconditionally removed if try-block is empty
(hasnocode(nil) always returns true). Regression from
0048174
* support arbitrary record regvars on AArch64: it has fairly complete support
for inserting/extracting bitfields (although the compiler doesn't use those
instructions yet in all possible cases, it seems)
* patch by J. Gareth Moreton: AArch64: Improved speed and efficiency with constant generation, resolves
0038837
* combine the Boolean parameters of read_proc and read_proc_dec into a set
* have read_body return the created procdef
* use tparse_proc_flags for parse_proc_head as well
* use tproc_parse_flags in parse_proc_dec_finish as well
+ initial support for anonymous functions, for now as essentially nested functions
Based on work by Blaise.ru
Destroy tfornode class loopiteration field if assigned
* (modified) patch by J. Gareth Moreton to unify ldr/str optimizations on Aarch64/ARM, part of
0038841
Avoid using UXT and SXT instructions on arm version below 6
* patch by J. Gareth Moreton, second part of
0038841
+ ARM: basic vasm support
+ initial support for ARMv2
* check for unassigned valuestr when writing ntbs eabi attributes
Try to fix handle of large stack size in xtensa gen_proc_entry/gen_proc_exit
* AVR: made avr_des intrinsic more usefull
sinclairql: enable weak linking support for the Sinclair QL
* patch by J. Gareth Moreton: x86 MOVZX/CMP optimisation, resolves
0038882
* fix building on i386 after
0049366
* first part of AVR assembler optimizer reword
* AVR: second part of assembler optimizer rework
sinclairql: make sure the end of bss (hence the bss size) is also aligned to two bytes
* patch by J. Gareth Moreton: Memory CMP optimisation, resolves
0038907
* patch by J. Gareth Moreton: TEST chain shortcutting, resolves
0038908
* patch by J. Gareth Moreton: Additional SETcc optimisations, resolves
0038767
* more fixes to support vasm on arm
* do not crash on empty eabi attribute strings
* more fixes for VASM for ARM
* patch by J. Gareth Moreton: x86 JccMovJmpMov2MovSetcc improvement, resolves
0038761
* keep track of symbols that are accessed from a nested/anonymous function that belong to a surrounding scope
* check whether an anonymous function can be assigned to a global, method or nested function variable
* the MovOpMov2Op optimization needs to take care of the second operand, should resolve
0038359
* check used registers properly for SETcc/TEST/Jcc -> Jcc, resolves
0038940
* prevent a range check error in TFPList.IndexOfItem when searching backwards in
an empty list and the compiler is compiled with range checking turned on
* Aarch64: apply OptPass1Data to CSEL as well
* set self to nil in current_module.deflist for registered defs in the
tstoreddef.destroy destructor, instead of doing it after each call to
x.owner.deletedef(x)
* patch from Alfred for setting source_cpu_string for the wasm32 platform
Fix duplicate source_cpu_string after last patch, by using cpuwasm32 instead of wasm32 conditional
* improvements to the prevention of dangling pointers in tmodule.deflist,
introduced in
0049417. Now it no longer depends on current_module, so it
handles the case when current_module changes between the time the tdef was
registered and the time it was freed. It also supports freeing the tmodule
before the defs, so the freeing order of the object is once again flexible.
* fixed typecast in tmodule.destroy after
0049426, since registered_in_module is introduced in tdef, not in tstoreddef
- removed the (deflist[i] is tdef) check from the tmodule destructor, since
only tdef descendants are added to the deflist and casting deflist entries to
tdef directly appears to be safe and is done in other parts of the compiler
* change fma cpu flag into an fpu flag
Fix check that third parameter of ADDI hp1 instruction is a constant
Add A_CALL to the list of instructions considered as a calljmp, even though it is a pseudo-instruction, fixes a long list of -O3 and -O4 testsuite failures
* aarch64-darwin supports unaligned memory access, confirmed by testing with clang 12
Add -march option to clang call for llvm target
Return -1 if size of file is smaller tham header size in tppufile.readheader method
Fix compilation for x86_64 llvm variant
* for variant dispatch calls, use the parameter name in source case, not upper case
* improved AndUtxh2And optimization
* ARM: split TCpuThumb2AsmOptimizer.PeepHoleOptPass1Cpu
* patch by J. Gareth Moreton: refactoring to standardise the "Peephole Optimization: " prefix on peephole debug messages, part of
0038975
+ patch by J. Gareth Moreton: New label debugging feature, resolves
0038980
* patch by Alfred to use new linker names for Android NDK >=22, resolves
0038987
* patch by J. Gareth Moreton: ARM - str/str -> stm optimisation, second part of
0038975
* optimization "Merging stores: STR/STR -> STM" cannot be carried out when generating thumb code
* use smaller alignment when generating thumb code
* do not generate exit code for arm (thumb and thumb-2) if a routine is marked as noreturn
+ Merge Add/Sub optimization
+ ARM: PushPop optimziation
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
* ARM (thumb): do not save registers in routines marked as noreturn
* ARM: fix for Merge Add/Sub optimization
+ stack pages need to be touched on aarch64-win64 as well
* r/esp cannot be used as index register
* throw an error if esp/rsp are used as index register
* allow char constant to be used for const string parameters in generic specializations, resolves
0039030
* patch by J. Gareth Moreton to fix faulty conditional jump logic, resolves
0038985
* DeepMovOpt requires that the target reg of the mov is not modified before hp2
+ SHXXMov2SHXX optimization
* patch by J. Gareth Moreton: improve MovAndTest2Test optimization, resolves
0039156
* patch by J. Gareth Moreton: x86: MovMovSar2MovCltd bug fix, resolves
0039180
* fix for Mantis
0026760: apply patch by Ondrej Pokorny to ensure that units referenced by an "in"-clause are recompiled when they have been changed
+ added test (though due to the nature of the bug it needs to be interactive)
* patch by J. Gareth Moreton: x86: RegLoadedWIthNewValue overhaul and bug fix, resolves
0039187
* patch by J. Gareth Moreton: CMP chain shortcutting, resolves
0039141
* might_have_sideeffects in gen_c_style_operator as proposed by runewalsh, resolves
0039206
* patch by J. Gareth Moreton: x86: Lea2Nop for stack pointer, resolves
gitlab 0039225
* further fix for Mants
gitlab 0026760: applied patch by Ondrej Pokorny to fix recompilation of units referenced with an "in" clause if no file extension is provided
+ added (interactive) test
* patch by J. Gareth Moreton: x86: Minor bitwise optimisations, resolves
gitlab 0039299
* Xtensa: unified DataMov2Data optimization
* Xtensa: optimize constant multiplications
* avr4 has mul instructions
* revert last commit, avr4 has no call/jmp
* remove mhs_exceptions in might_have_sideeffects call for C operators: it improves code
and shouldn't hurt as this is no regression in comparison with current 3.2.x
+ add modeswitch for anonymous functions
* ensure that nested functions of main program, main program finalization and unit initialization/finalization are generated
* consider Self parameters of nested functions as captured as well
* allow to ignore Self parameters; for this the parameter skipping needs to be repeated to correctly catch all cases
* implement assignment of anonymous functions to procedure or method variables if they either capture nothing or (in case of method variables) at most the Self variable
+ add function to check whether a def is an invokable function reference
* Prevent double release of a temp.
* It is still needed to release the temp allocated for the result of an assembler function if the result is not referenced. This fixes some EXTDEBUG warnings.
* optimize tests for a single bit "(a and one_bit_mask_const) = <> one_bit_mask_const" into "(a and one_bit_mask_const) <> = 0" to enable further CPU specific optimizations.
* x86: Added the "test $-1,%reg" condition to the MovAndTest2Test optimization.
* patch by J. Gareth Moreton: AND/CMP optimisation, resolves
gitlab 0039287
* Before
gitlab 0035961 (back in 2017) some simple assignment optimizations, such as "x:=x+y" to "inc(x,y)", were performed when -O2 in tassignmentnode.simplify. In
gitlab 0035961 these optimizations were moved to a separate pass which is enabled only when -O3 by cs_opt_use_load_modify_store. This separate pass can benefit from other optimization. But worse code is generated with -O2 since then.
This commit restores applying of simple assignment optimizations when -O2.
compiler/msg/errord*.msg: Update of German error messages
* Support for sleb128 and uleb128 constants in the NASM writer.
* Added sleb128tostr() and uleb128tostr() methods to TExternalAssembler.
* Use these methods in assembler writers instead of code duplication.
* Added support for the old Turbo Pascal INLINE(data/data/...) statement.
It is available only in the TP mode.
* TP compatibility: For retro CPUs always copy the function result to
the register(s) on function exit if assembler blocks are present.
* In TP-style INLINE, allowed the > modifier for global vars and relaxed range checks.
* sizeof(array) and length(array) must return sizeUint in case the array
size does not fit in sizeint. This fixes a range check error during
compilation on small CPU targets where allowed array size is 64K, but
sizeint is 32K max.
* fix change information for popcnt
* change information for round* fixed
* change information for round* fixed
+ Add support for -Adefault.
* Move help message for option -sT to the correct group of messages.
* Use shorter message to indicate switch to external asm.
* Adapted -sX messages because -sT doesn't force external assembler writer.
+ Add support for -Adefault.
* Move help message for option -sT to the correct group of messages.
* Use shorter message to indicate switch to external asm.
* Adapted -sX messages because -sT doesn't force external assembler writer.
+ Aarch64: FMovFMov2FMov 2 optimization
+ Aarch64: FMovFMov2FMov 2 optimization
* reverted wrongly committed file
* reverted wrongly committed file
* fix for
gitlab 0039310 by fixing various small issues in tabstractrecordsymtable.has_single_field:
- initialize the returned def to a safe default
- correctly reset the found symbol for each loop
- reset the result when descending into a record
+ added test
+ move often used floating point constants into registers
* generate a def. file only if really necessary
* we cannot do SSA during partial writes to arrays which span multiple registers, resolves
gitlab 0039325
* we cannot do SSA during partial writes to arrays which span multiple registers, resolves
gitlab 0039325
* move more node tree optimizations to tcgprocinfo.OptimizeNodeTree
* patch by J. Gareth Moreton: x86: SETcc/TEST/SETcc -> SETcc/SETcc optimisation, resolves
gitlab 0039271
Add 'treated as Error:' to compiler messages
* Avoid some wrong error messages after initial error
On x86_64-openbsd, cycling with -O3 option fails due to
a wrong warning about uninitialized zeros variable in
compilation of ogbase unit
ogbase.pas(2310,41) Warning: Local variable "zeros" does not seem to be initialized
ogbase.pas(2318,39) Error: Can't evaluate constant expression
The second message is due to the fact that simplify is not
called inside nadd unit if errorcount is non-zero.
By replacing errorcount<>0 by not codegenerror,
this message disappears.
* Added trgobj.remove_ai(), call it instead of code duplication.
No functional changes.
* Patch by J. Gareth "Kit" Moreton (issue
gitlab 0039343). x86 peephole
optimization of conditions which are always true or false.
* x86: ShlOp2Op optimization
* Use a register alias while handling reg deallocs in trgobj.instr_spill_register()
to be in sync with commit b96057ad.
* make ShlOp2Op optimization more fool proof
* Prevent spilling of spill-helper registers which contain the value of a
previously spilled register. These helper registers must never be spilled.
This fixes failures of the register allocator in rare corner cases.
+ for loop optimizations can be controller by a switch (-Oo(no)forloop)
* (modified) patch by J. Gareth Moreton: ARM/AArch64 Some short-range LDR/STR optimisations, last part of
gitlab 0038841
+ keep addresses of thread vars in registers if possible and likely an advantage
* x86: only add mm capable consts to register candidate list, this is better
than checking when they are assigned
* fix code for ARM FPA, just in case ...
* x86: Do not replace inc/dec with add/sub 1 because this code path is
executed only for the C_Z,C_NZ,C_E,C_NE conditions, so inc/dec can be
used.
* Fixed lack of the calculation code for the strength reduction optimization.
* Fixed a typo in the condition, though it seems this code path is not used now.
* Fixed the strength reduction optimization for loops containing 'continue'.
The compiler now cycles properly with -O3 -OoSTRENGTH.
* mark temps as deallocated
(cherry picked from commit 50452e5707b1d5f8590042ed55fc5f47bce33962)
* Fixed missing assignments with the strength reduction optimization.
* x86: Fixed attributes of the LEAVE instruction - it reads EBP.
This fixes crashes with -O3s in some cases due to an incorrect peephole
optimization.
Added correction to AllocRegBetween
+ added target flags for the different WebAssembly exception modes that I'm
planning to implement
* increased size of ttargetswitchinfo.define to fit the string added in my
previous commit
* fixed compilation of ppudump
+ added usage info to the compiler help screen for the WebAssembly
target-specific exception handling modes
+ added validation to ensure no more than one WebAssembly exception support
mode is enabled
+ set the NOEXCEPTIONS mode by default for the WebAssembly targets
+ support writing the new tai_tagtype directive in the asm output
* Reverted the accidentally committed debug code in 4a7a113a.
x86: MOV constant optimisation
* is_calljmp really means calls and jmp
* is_calljmpuncondret includes ret
* handle - more cleverly if SSE is used
* fix alignment issues with - when using SSE
+ started the wasmbase unit (similar to elfbase and omfbase)
+ implemented TWasmObjData.sectionname
+ write the wasm binary module header and version
* fixed TWasmObjData.sectionname_gas
+ enabled the WASM32_INTERNALASM define when compiling with the lazarus project file
+ write some debug info to the console in the wasm obj writer
+ added TWasmObjSection class
+ introduced TWasmObjSection.IsCode and .IsData
+ count the number of segments and assign segment indices to the wasm sections
+ start writing the wasm sections. The DataCount section is the first section to be implemented.
* simplify real expressions involving unary minus
+ test
+ create the data section and the first entry of the import section
+ add the __stack_pointer global import
+ added the indirect function table to the imports section
+ debug print the obj symbols to the console
* fixed crash when writing a binary wasm module with a .bss section
+ print more symbol properties to the console
+ added the TWasmRelocationType enum
+ added the TWasmLinkingSubsectionType enum
+ more unary minus optimizations
* test extended
+ more unary minus optimizations
* test extended
Expanding division to 64-bit and tests
* some fixes for expectloc
+ added function name to functype hashlist in the wasm objdata class
+ apply unary minus optimizations also to /
* test extended
o manually applied merge request 46 by J. Gareth "Kit" Moreton:
+ x86_64: XMM-based block move optimisation
* set expectloc properly for x87 on x86
* fixed the writing of the external functions in the import table
* store the funcname to functype index in a TFPHashObjectList, instead of
TFPHashList with the index converted to pointer, which was a hack and didn't
allow adding more fields, which we would need to do for e.g. import_module
and import_name
+ added method TWasmObjData.AddOrCreateObjSymbolExtraData
+ handle the import_module and import_name directives in the internal
assembler and store them as obj symbol extra data
+ handle tai_local in the internal asm writer and store the locals in the
wasm obj extra symbol data object
obcpas: fix categories implementing protocols
Allocate the ImplementedInterfaces array for them and save to/load from ppu
Solves
gitlab 0039375
+ generate and write the functions table in the wasm binary module,
produced by the internal obj writer
+ write the code section (still, without the actual function code, but with
the correct locals)
* replaced TWasmObjData(Data) with FData in TWasmObjOutput.writeData
+ write the actual function code in the code section
+ partial implementation of emitting RELOC_FUNCTION_INDEX_LEB relocations
+ add relocation objects for the RELOC_FUNCTION_INDEX_LEB relocation to
the relocation list. They are not written to the object file, yet.
+ added enums for the wasm symbol type and constnats for the bitflags
+ write the linking section (empty for now)
Revert " * patch by J. Gareth Moreton: Nothing (NOP) node optimisation, resolves
gitlab 0038194"
This reverts commit c2ff85ac5ba307d7cc10cae7ee17d479c83c9119.
That change duplicates the logic of tstatementnode.simplify in
tblocknode.simpify in a very complex way, and in case of issue
gitlab 0039336 results
in adding a non-tstatementnode in a tblocknode, which is illegal. If
tstatementnode.simplify cannot catch all cases, then that one should
preferably be improved instead (and if not possible, we can look into
catching those edge cases in tblocknode.simplify rather than duplicating
everything).
Resolves issue
gitlab 0039336
* Aarch64: taicpu.spilling_get_operation_type with new instructions extended
+ write the externals to the symbol table
+ write the non-external functions to the symbol table as well
+ also write the data symbols to the symbol table
+ write the segment info (names and alignment) to the linking custom section
+ write the relocation tables for the code and data sections (empty for now)
+ fully implemented the RELOC_FUNCTION_INDEX_LEB relocations
+ introduced TObjData.SymbolPairDefine, to allow custom handling of symbol
pairs in the internal object writer
+ support tai_symbolpair in the wasm internal obj writer, so that the
PASCALMAIN alias of main can be created
+ support generating R_WASM_TABLE_INDEX_I32 relocations
+ support writing RELOC_FUNCTION_INDEX_LEB relocations to non-external functions
+ support writing imports from a different module in the wasm binary object writer
+ support writing R_WASM_MEMORY_ADDR_I32 relocations
+ add threadvar symbols to the symbol table
* generate an internal error if an attempt is made to emit a
R_WASM_MEMORY_ADDR_LEB relocation, that points to code, instead of
data
+ re-added accidently removed internal error
* made the constructor of TObjSymbol virtual, so it can be overriden
* fixed bug in the code, generated for the RELOC_FUNCTION_INDEX_LEB
relocation
+ fixed the addend in the relocations that point to data
Bug fix to XMM block move optimisation
Changed get_volatile_registers_mm to not return XMM16 to XMM31 when not under AVX512
- removed unused constructor of tai_impexp, as well as unused member variable extmodule
* tai_impexp renamed tai_export_name
* ait_importexport renamed ait_export_name
* simplified and integrated the WriteImportExport procedure into the case
statement. Use similar statements to write the asm code for the export_name,
like we use for the import_name directive.
+ generate the export section in the wasm internal obj writer
- removed debug writelns from the wasm internal object writer
+ generate funcdef for external procs, that don't have an import dll
+ enable the WebAssembly internal assembler and object writer
* use objsym.size to determine the code size of the function (instead of
writing until the end of the section) in the wasm internal object writer.
This removes the extra padding of 'unreachable' instructions at the end of
each function (which are zeroes, added for alignment - they are harmless,
but are unnecessary and cause a slight increase of the size of the
resulting binaries), after the final 'return' instruction of the function.
* use an incrementing counter variable to determine the numbers for the code
and data section, so they can be used in the relocation section, without
hardcoding them as constants. This will automatically adjust the numbers
when we add more sections, or when we make writing some of the sections
optional.
* omit writing the export section if there are no exported functions from
the module. This reduces object file size slightly for modules without
exports.
+ support the 'try' instruction in the wasm internal assembler
+ implemented the 'delegate' and the 'rethrow' instructions in the wasm internal assembler
* emit a tai_tagtype for __FPC_exception instead of hardcoding the asm output
directly when wasm native exceptions are enabled
* introduced the tai_globaltype asm directive, use that to declare the stack
pointer global symbol
+ introduced the AT_WASM_GLOBAL asm symbol type
* track wasm global types in the internal object writer
+ proper support for WASM globals in the internal object writer - emit
relocations, generate a Global section, if they are declared in the object
file, etc.
* combined TWasmObjSymbol.ImportIndex and .FuncIndex into just .FuncIndex,
because there's no point in having them separate, and the name ImportIndex
is misleading, as there are multiple import indices (they are separate for
functions, globals, tables, memories, etc.)
* the data section is now only written by the internal wasm object writer, when
there are data segments in the module
+ also support immutable wasm globals in the wasm assembler writer (both internal and external)
+ introduced the FPC_EXCEPTION_TAG_SYM string constant
+ introduced the AT_WASM_EXCEPTION_TAG asm symbol type, use that for specifying
the parameter to the 'throw' and 'catch' instructions
+ added support for exception tags and for the 'throw' and 'catch' instructions
in the wasm internal assembler and object writer
* fill exceptstate variables and update flowcontrol in
twasmexceptionstatehandler_nativeexceptions.new_exception
- removed the TODO comment, generated in the asm output by
twasmexceptionstatehandler_nativeexceptions.free_exception
+ support in_wasm32_throw_fpcexception in twasminlinenode.pass_typecheck_cpu
* emit a weak symbol for the exception tag, since that's what the LLVM linker
wants to treat them as shared between .o files
* updated ppudump with the new asm symbol types and binding types
* fixes to the try..finally code generation in wasm native exceptions mode
- get rid of fpc_PushExceptAddr and fpc_PopAddrStack entirely, when compiling in
wasm native exceptions mode - these helper routines aren't necessary in this
mode
* decblock moved after end_try, instead of after catch
+ initial implementation of try..except..end in wasm native exceptions mode.
The 'on' statements are not implemented yet.
+ override the 'on' node for WebAssembly
* x86_64-linux doesn't need .data.rel.ro either
+ implemented the 'on' node for WebAssembly in native exceptions mode
+ generate functype directives for all functions in all used units, regardless
of whether they have paraloc info created. This fixes linking of WebAssembly
programs that declare their own classes, because that causes the compiler to
generate a VMT, containing references to virtual methods, and these don't
necessarily have paraloc info (if they're not called from within the program)
* the fpc_Catches result test code was inverted
+ implemented sqrt via the f32.sqrt and f64.sqrt instructions
* fixed opcode generation for the f32.const in the WebAssembly internal asm
+ implemented abs(real) for WebAssembly via the f32.abs and f64.abs instructions
+ implemented int(real) for WebAssembly via the f32.trunc and f64.trunc instructions
* fixed output of 32-bit floating point constants in the llvm-mc asm output
+ implemented trunc(real) for WebAssembly via the i64.trunc_f32_s and i64.trunc_f64_s instructions
+ implemented round(real) for WebAssembly via the fXX.nearest and i64.trunc_fXX_s instructions
x86_64: Fix to tw8573 overflow bug under -Cg option
* properly search in GetMMRegisterBetween and GetIntRegisterBetween for usable
volatile registers (low() .. high(
and not only the included ones)
* fixed code generation for 'boolean64 and/or boolean64' for WebAssembly
* fixed WebAssembly code generation for 'if boolean64 then ... else ...'
* int64/boolean64 fix in twasmtypeconvnode.second_int_to_bool
* fixed 'not(boolean64)' for WebAssembly
* fixed second_int_to_bool for cbool types for WebAssembly
* another WebAssembly cbool fix in twasmtypeconvnode.second_int_to_bool
* fixed WebAssembly cbool support for OP_NOT
* fixed WebAssembly code generation for not(cbool64)
* modified (cosmetics) patch by Rika: replace DJB2 with MurmurHash3, resolves
gitlab 0039377
+ Aarch64: AndCmpB.E/NE2Tbnz/Tbz optimization
+ Aarch64: Ldr
Mov2Ldr optimization
x86: Missed logic with CMP and MOV optimisations
+ added the memory.copy and memory.fill WebAssembly instructions
+ added inline numbers for a memory.copy and a memory.fill intrinsic
+ implemented FillChar for WebAssembly via the memory.fill instruction
+ implemented move() for WebAssembly via the memory.copy instruction
* fixed OS_S8 to OS_16 conversion for WebAssembly. This fixes test/cg/tcnvint6
+ enabled compilation of the fpintres unit for the WASI target and enabled tf_has_winlike_resources for the target
+ added system_wasm32_embedded to systems_embedded
+ use the aasmdef unit in wasm32/cpunode.pas
- don't set casmdata in wasm32/aasmcpu.pas, so that the aasmdef unit can override it
* fixed WebAssembly method pointer assignment
+ workaround for WebAssembly treating the stack parameter of the store and load
instructions as unsigned. This caused an 'out of bounds memory access' trap
when accessing arrays with negative offset index, e.g. in test/cg/tvec.pp
+ implemented the <= operator for smallsets for WebAssembly
Fix bitpacking 62/63 bit fields on 64 bit targets
As reported on the lazarus forum:
* https://forum.lazarus.freepascal.org/index.php?topic=56341.new
* https://forum.lazarus.freepascal.org/index.php/topic,56339.msg418608/topicseen.html
Also optimized nextpowerof2 in the compiler
+ support equality comparison of smallsets on the Z80
+ support the <= and >= operators for smallsets on the Z80
* define DEBUG_AOPTCPU if EXTDEBUG is used
Fixed bug where hp1 object was used after being freed
Typed constants: no internalerror on failure
Don't check whether the expression queue is empty in the destructor in case
there was an error. Also improved error messages (constant expression instead
of variable expression expected).
Resolves
gitlab 0039393
+ x86: MovOp2Op optimization
+ introduced WebAssembly branchful exceptions
+ increase string type to avoid const string truncation
+ fixed compilation of ppudump
- removed msg2inc. Stupid git added it without my consent.
AArch64 popt: don't replace registers with X/WZR
Most arithmetic/logica instructions don't support X/WZR as operand (since
you should use movk with the calculated constant in that case)
Resolves
gitlab 0039372
Avoid range check error in TCpuAsmOptimizer.OptPostAnd method
* bail out early in MatchInstruction
* cloned the WebAssembly native exceptions code generation and rtl support into
the branchful exceptions (which will be modified later, but we're using this
as their starting point, because we can get a snapshot built, without compiler
internal errors)
- don't generate any WebAssembly native exception handling instructions, nor
relocations, when compiling in branchful exceptions mode. This produces a
currently not working, but accepted by wasmtime binary (otherwise, it
complains it doesn't support exceptions and refuses to try to run it).
+ introduced raiseBr, similar to exitBr, but will point to the current
innermost exception handler, if there is such a handler in the current
procedure, otherwise it will be the same as exitBr.
+ added comment that states that raiseBr is only used in branchful exceptions mode
+ insert exception flag check and branch after each function call, when
compiling in WebAssembly branchful exceptions mode
+ implemented try..finally in branchful exceptions mode
+ initial implementation of try..except in branchful exceptions mode
+ implemented the 'on' node code generation (try except 'on' ...) for the
branchful exceptions mode
+ call g_checkexceptions after calls to fpc_reraise and fpc_raise_nested in
branchful exceptions mode
* x86: Refactored CMOV optimisations and permitted the use of constants in some cases.
* use 'br_if' instead of 'if br end_if' sequence in the code, generated by
thlcgwasm.g_checkexceptions
+ support exception object cleanup, when 'exit', 'break' or 'continue' is used
in the except 'on' statements, in branchful WebAssembly exceptions mode
+ exception cleanup when break, continue or exit is used inside a
try .. except 'on' block, in WebAssembly native exceptions mode
Expanded MM block move to include YMM registers under AVX
+ proper exception cleanup for try except blocks that use exit, break or
continue in WebAssembly branchful exceptions mode
+ proper exception object cleanup when using break, continue or exit in try
except blocks in WebAssembly native exceptions mode
- removed duplicated assignment
* twasmexceptionstatehandler_nativeexceptions.handle_nested_exception and
twasmexceptionstatehandler_bfexceptions.handle_nested_exception should not be
called, so now they cause an internal error
* thlcgwasm.g_checkexceptions renamed .g_maybe_checkforexceptions, added also as
an empty virtual method in thlcgobj and modified the WebAssembly
implementation, so that it can be called from any exceptions mode (so it
emits no code in exception modes that don't require it, instead of generating
an internal error). This will allow .g_maybe_checkforexceptions to be called
from the generic parts of the code generator, after calls to systemprocs that
could raise an exceptions.
+ added call to g_maybe_checkforexceptions after generating call to fpc_iocheck
* partially applied patch by J. Gareth "Kit" Moreton to inline parts of cclasses, resolves
gitlab 0039344
* use source register as second register in VCVTSD2SS and VCVTSS2SD, this should break
dependency chains better and resolves partially
gitlab 0039360
* Optimized evaluation of the condition.
* Strength reduction optimization: - Use a temp for complex loop start values to prevent double evaluation.
- For slow CPUs perform the optimization for all sizes of array elements.
* generate VMOVAPS for (V)Cvtss2CvtSd(V)Cvtsd2ss optimization, resolves
gitlab 0039360
+ added the current WebAssembly exceptions mode to the .ppu module flags and
perform a check to ensure all units are compiled in the same exceptions mode
as the main program
* another location to use source register as second register in VCVTSD2SS and VCVTSS2SD
to break dependency chains, hopefully final fix for
gitlab 0039360
+ support of SHA extension in the internal assembler
Better handling of zeroing upper parts of registers
Better handling of zeroing upper parts of registers
xor optimisation now doesn't check to see if the REX prefix will actually be removed, as it's beneficial for speed reasons to only use the 32-bit register when zeroing the whole thing
o based on a patch by Rika, resolves
gitlab 0039401:
* use Base64 (62=_, 63=$) encoded FNV hash (instead of CR-32) to shorted identifiers
* renamed fpccrc to fpchash
+ test
* fix x86 compilation after my last commit
* by default, DEBUG_AOPTCPU is only enabled if the compiler is compiled with -dEXTDEBUG
+ being able to define change information for xmm0
* corrected change information for SHA256RNDS2
* patch by Dean Mustakino to avoid generation of debug info for generics, resolves
gitlab 0038827
+ test
* add no internal flag when folding constants in taddnode.simplify, resolves
gitlab 0039308
+ pass 64-bit structures by address in WebAssembly for compatibility with LLVM's C ABI
* Removed unused tlocation.registers[].
* itcpugas unit for Z80 providing gas_regname to fix compilation with -dDEBUG_NODE_XML
* C ABI fixes for the passing of records in WebAssembly
* fixed formatting in defToWasmBasic
+ added support for the handling of singleton record and array types in
defToWasmBasic
* fixed passing of singleton record parameters, containing a float in WebAssembly
+ support cdecl and stdcall on the WebAssembly target. They are essentially the
same, the only difference is that cdecl creates an unmangled alias
* replaced the 'if br end_if' sequence with the 'br_if' instruction, when
generating WebAssembly code for try..finally blocks (in all exception modes)
+ extend assembler optimization MovxMov2Mov to MovxOp2Op
* merge request 75 by J. Gareth "Kit" Moreton manually applied:
This merge request makes a number of improvements to the DeepMOVOpt method and supporting functions:
* ReplaceRegisterInInstruction now replaces registers in references that are written to
(since the registers themselves won't change)
* RegModifiedByInstruction will no longer return True for a register that appears in a reference
that's written to (for the same reason as above) - special operations like MOVSS
(the 0-operand version) aren't affected.
* DeepMOVOpt returning True will now always set the Result of OptPass1MOV to True even though p
wasn't directly modified, since this often caused missed optimisations.
* Some of the speed-ups in the patch from
gitlab 0032916 have also been applied in order to make
the general DeepMOVOpt run faster, notably it tries to avoid calling UpdateUsedRegs where possible.
* manually merged merge request 69 by J. Gareth "Kit" Moreton:
x86: CMP/MOV refactoring and expansion
This merge request refactors the SwapMovCmp routine, and calls to it, to be more self-contained,
having the preliminary checks built-in to ensure that moving the MOV instruction is
actually a sound idea, while also making it more general-purpose so it can handle instructions
that are not MOV operations. This feature is primarily for future expansion,
but also cleans up the code for the x86 peephole optimizer.
* patch by Sergey Larin: Reducing and aligning the size of TAnsiRec, TUnicodeRec for CPU64, resolves
gitlab 0038018:
For CPU64, the size of record TAnsiRec and TUnicodeRec is 16 bytes instead of 24.
Which is very good also because of the alignment. when allocating memory, the address
of the first character of the string will be aligned on the 16-byte boundary.
At the same time, the useless Dummy field, which is needed in CPU64 for exactly alignment, has been removed.
For CPU32 (and CPU16), the record size has not changed, so procedures such as
fpc_AnsiStr_Decr_Ref, implemented in assembler (see i386, arm), remained working correctly.
* tests adapted
+ support reading of .p2align with op code and/or max. bytes in the gas assembler reader
+ test
+ introduced the use of asm labels for WebAssembly. Resolve them in
tcpuprocinfo.postprocess_code. Use them when generating code for the
'continue' label jumps.
+ use WebAssembly asm labels for the code generation of 'break' statements as well
* fixed some more warnings
* use WebAssembly asm labels for generating code for the 'exit' statement
* leave unresolved branches in the asm output, when the compiler is compiled with -dEXTDEBUG
* if a label cannot be associated with the previous block instruction, try
matching it with the next instruction
+ wrap block nodes with exit in a_block..a_end_block instructions. This fixes
'exit' in inlined procedures on the WebAssembly target.
* moved the 'end_block' WebAssembly instruction before the 'exit' label right
before the procedure finalization code. This fixes compilation errors in
procedures with implicit finalization code (e.g. for ansistring local vars,
etc).
* match the label to the wider block, if it is adjacent to both the brevious
and the next instruction
internalerror if the section we're about to keep has no exesection assigned
* use WebAssembly asm labels for the raise branch instruction in branchful
exceptions mode
+ added sanity check when resolving labels to ensure we don't get any jumps with
negative nesting depth
* moved the default procedure CurrRaiseLabel to the end of the procedure, not
at the exit label. This fixes problems when using units with finalization
code that contain classes with class destructors in branchful WebAssembly
exceptions mode.
Bug fix to MovMov2Mov 6 optimisation exposed by 4012c3dbd47f661805bb7a831c6c687807ede3b4 (and miscellaneous code refactors)
* WebAssembly code generation for 'case' nodes changed to use labels
- removed thlcgwasm.incblock, .decblock and br_blocks, as branching is now done
entirely with labels
+ TDFABuilder.redodfainfo
* keep track of the block stack, when resolving labels and check whether the
blocks match (i.e. block..end_block, if..end_if, loop..end_loop, try..end_try)
+ added 'else' tracking for the if..end_if blocks
* TX86AsmOptimizer.OptPass1MOVXX takes care of volatility
* improved TX86AsmOptimizer.OptPass1MOVXX
+ print full file path if -vb is passed even if no line number is known, resolves
gitlab 0039419
Improved ADD and SUB optimisations for LEA instructions
* Better coalescing with real registers. This improves setting of parameters
in registers.
* Removed superfluous condition in trgobj.enable_moves().
* Fixed flags checking in trgobj.adjacent_ok().
* Added assembler comments about coalescing when DEBUG_SPILLCOALESCE is defined.
Fixed some range check problems
* correctly read the region label in $region directives, resolves
gitlab 0039395
Fixed OptPass2Lea not honouring symbols
+ write code and data size for Mach-O files if possible
* cleanup of 2.7.0 defines
+ fold real constants c1,c2 for v+c1+c2 or c1+(c2+v) (+ being either + or *) as well if fastmath is enabled
Record variant discriminators: check types
* AArch64: TCpuAsmOptimizer.RegLoadedWithNewValue: check if p.ops=0
* Corrected calculation of spilling efficiency.
optcse: fix wrong typecast
* Write interference graphs to the unit output directory.
* Removed unused and confusing tnode.parent and tnode.concattolist().
* Removed obsolete OLDREGVARS ifdefs.
* Corrected setting of the flag.
* tcgaarch64.g_concatcopy calls tcgaarch64.g_concatcopy_move only if the current subroutine has pi_do_call set
* fixed copy loop in tcgaarch64.g_concatcopy if ldp/stp is used: fixed increment calculation and fixed tail length calculation
* improved heurisics when thread var addresses or float constants are put in registers
* corrected accidently made changs in 01a449c8, resolves
gitlab 0039424
+ ARM: started on vfpv5 support
+ fp-armv8 fpu type added
* tcgsizep2size now supports all tcgsize values
* Fixed node coalescing with real registers.
+ be able to add single cpu capabilites by the command line
+ AArch64: SHA2 capability
+ more Aarch64 cpu capability flags added
* fix (V)Cvtss2CvtSd(V)Cvtsd2ss2* optmizations for non-avx code, resolves
gitlab 0039416
* my last commit hopefully fixed
+ Aarch64: read register sets with ranges properly
+ tests
* when converting a*a into sqr(a), set the result type correctly
* removefloatupcasts takes care of cs_excessprecision, resolves
gitlab 0039012
Explicitly disable overflow for offset propagation optimization
* patch by Rika to pass some strings by reference, resolves
gitlab 0039338
* patch by Don Siders: Fixes spelling, grammar errors in source and compiler messages, resolves
gitlab 0039434
llvm: version 12.0 support
x86: new optimisation to change add/sub 128,(dest) to sub/add -128,(dest) to reduce binary size
Add -WP option so that IDF version can be passed in - stored in globals.idf_version. The version is checked in t_freertos.pas and for esp-idf version 4.3.x an extra link file is added, also running ldgen.py is skipped as that seems unused.
* inputfilepath might not be empty
+ draft for esp-idf version specific rtl unit which contains the necessery linklib statements
* correct idf version check
* better code and data size info for FreeRTOS
The linklib list for esp-idf v4.2 is also needed for v4.3
Place IDF related files in executable output folder.
Remove unused $OUTPUT substtution and empty check of outputexedir.
- Bug fix to new ADD/SUB optimisation where conditions are concerned
- Register allocation fixes for overflow checks
Bug fixes to magic division and vectorcall code that trigger -CriotR checks
* cleanup of VER3_0 defines
+ Aaarch64: support adr instructions with local labels in the assembler reader
+ throw an error if an illegal instruction extension is passed as command line option
+ more AArch64 extensions
* x86-64 can handle overflows in 64 bit multiplications directly, part of resolving
gitlab 0039450
* fix conditional statement as pointed out by Sergey Larin
* last commit was not correct, fixed
Keep esp32 and esp8266 version specific tweaks separate.
Extract linker script generation as separate method. Check if esp linker scripts can be found in library paths, if not then generate scritps.
* Added Tmoveins.id to be used for sorting and searching in Tmovelist, to
produce the consistent order of elements.
This fixes occasional differences in the register allocation caused by
the address space randomization. When ASLR is in effect, the previous
approach to sort elements by their memory addresses can't guarantee the
consistent elements order for each compilation of the same source code.
* Use longint for Tmoveins.id instead of word to prevent overflow in extreme cases.
Add output path to kconfig source file location parameters.
Always call DoExec to generate linker scripts. Even if cs_link_nolink is set, the ldgen scipt needs to be called in the generated ppas script.
Change declaration of DynLinkStr local variable of MakeExecutable method to ansitring to avoid short string overflows
Fixes to ADD/SUB 128 optimisation that didn't check flags properly, and also handling ADC/SBB properly
+ - can be used to remove options from a cpu capability switch
Fixed Unreachable code warning when building on a 32-bit platform with DEBUG_NODE_XML
* fixes excluding of cpu capabilities
New MovxMovxOp2OpMovx optimisation
* generate no exit code at all on x86-64 if the subroutine is compiled with po_noreturn
Bolder OptPass2Movx optimisations, including a simplification fix
New Movz ###,%ecx, shift/rotate %cl,... optimisation
* compilation of x86_64-win64 fixed
MovZX->MovSX optimisation
Improved handling of signed sequences in OptPass2Movx
Massive overhaul to OptPass2Movx to favour operand shrinkage
New MovxAndTest2Test optimisation to mirror the regular MovAndTest2Test optimisation
Added missing MOVSXD check to PostPeepHoleOptsCpu
+ store references to global variables in registers if benefical (currrently used for aarch64 only)
* Increased the bounds of TBooleanArray to prevent a range check error while linking Lazarus.
* Prevent a range check error in case of big unsigned values.
* Fixed random AVs when targeting the AVX FPU.
x86: New TEST optimisations
Safety checks on TEST removals and better FLAG tracking
* fix m68k IE after e9acd759, patch by Yuriy Sydorov
New optimisation that merges small constants written to the stack
Fixed bug in new TEST optimisation where a FLAGS check always returned "in use"
* make tgobj.pas less verbose in extdebug mode, use separate define DEBUG_FREETEMP for the really
verbose stuff
Removed incorrect logic in TEST optimisation
+ in_min/max_single/double support for aarch64
* ARMv7A / A64: Constant writes to memory merged to larger forms where possible
+ in_min/max_dword/longint support for aarch64
* compilation with i386 fixed
Overflow bug fixes to MovZX/SX optimisations when CMP instructions are encountered.
Fixed MovxOp2Op failing on i386 due to lack of register check
* TX86AsmOptimizer.OptPass1MOVXX should search only over other instructions if it works with registers only
* patch by Rika: improve ctuils.newalign/align, part of
gitlab 0039496
x86: New double CMP optimisation to remove a branch
i386: Correction to GetIntRegisterBetween to ensure we only get 8-bit registers that we can actually encode
x86: Additions to OptPass2Movx to better synergise with new CMP optimisation under -O2
Refactoring of OptPass2Movx to remove goto
Fixed bug in MovxMovx2Movx optimisation that would specify a 64-bit destination instead of 32-bit one
* patch by Rika: another improvement of cutils.newalignment, part of
gitlab 0039496
Procedure-saved registers are now recorded for peephole optimizers to use
JccAdd2SetccAdd modified to make use of GetIntRegisterBetween
* use an anonymous symbol for the record operator table as its typing is different for each incarnation anyway
* Amiga-likes: set some sensible heapsize defaults, for OSHeap support
MOV/CMP optimisation is now in both Pass 1 and Pass 2 to catch more
eventualities
* allow %... for binary constants in delphi mode, resolves
gitlab 0039503
+ modeswitch UNDERSCOREISSEPERATOR, active by default in delphi modes:
support _ as seperator in numbers, it is ignored while reading them, resolves
gitlab 0039504
Additional copyright header
Debugging code in AllocRegBetween is now safer and more accurate, and p2 can no longer be nil
* (modified) patch by Rika: optutils.SetNodeSucessors improvement, resolves
gitlab 0039509
* compilation with -Oodfa fixed
PostPeepholeOptTestOr now removes TEST when dealing with POPCNT and LZCNT
Use different library link lists for esp8266-rtos-sdk v3.3 and v3.4.
Avoid range check error inside tcgcasenode.pass_generate_code method
Ignore NR_DEFAULTFLAGS for ait_regalloc, because there is no default flags for JVM
New backward MOV optimisation
Add help message for xtensa-freertos -WP option
* apply patch by Blaise.ru:
- avoid creation of a dummy typesym just to call parse_var_proc_directives() by introducing a new parse_proctype_directives() that takes a tprocvardef instead of a symbol like the former does
- have parse_var_proc_directives() call parse_proctype_directives() to avoid duplicated code
* apply patch by Blaise.ru:
- all call sites of parse_var_proc_directives() have the tprocvardef easily available, so use parse_proctype_directives() directly
- remove the now no longer required parse_var_proc_directives()
* apply patch by Blaise.ru: parse_object_proc_directives() and parse_object_record_directives() should only be called with procdefs, so change the parameter from tabstractprocdef to tprocdef to make this explicit
* apply part of patch by Blaise.ru: check only once whether writable consts are enabled or not by determining the type of the assembly list earlier (it's only not needed in an error case anyway)
* apply part of patch by Blaise.ru: reduce code duplication when parsing anonymous procvar types
- apply patch by Blaise.ru: pdflags are no longer required in generate_specialization_phase2() after parse_proc_directives() was done, so remove its unused modification after that call
* throw an error if raise is called in a noreturn subroutine outside of any exception frame, resolves
gitlab 0039514
* apply patch by Blaise.ru: reject assignments of instance methods, accessed via a type, to method pointers
+ add tests
* apply patch by Blaise.ru: avoid internal error when assigning class methods, accessed via a class reference type, to incompatible procvars
+ added tests
* apply patch by Blaise.ru: proper code generation for assigning class non-static methods, accessed via a class reference type, to method pointers
+ added test
* x86: Fixes to GetInt/MMRegisterBetween assignments
Turn TCallCandidates into an object, make it create FIgnoredCandidateProcs on demand, and outline such adding on demand into dedicated TFPList.AddOnDemand.
* New UpdateUsedRegsBetween utility subroutine
* x86: OptPass1_V_MOVAP now uses GetNextInstructionUsingReg and UpdateUsedRegsBetween
Fixed Internal Error 2020120501 number clash
+ apply patch by Blaise.ru: allow initialisation of method pointers with class methods (when class types are
known at compile time)
* adjust error message when a method pointer isn't suitable
+ add tests
* regenerate msg{idx,txt}.inc after message change in last commit
Use '.rodata' for read-only data section for aarch64 CPU
New MOV optimisation that helps reduce instruction count and memory accesses
+ add method ResetSourceLines to TExternalAssembler to reset already written lines
* reset written source lines once a section is encountered
Remove fall-through logic and separate idf_version checks of esp32 and esp8266. Also warn if idf_version is below the supported range.
+ DestSize parameter for fpc_Val_UInt functions
Refactoring procedures in aoptx86 to gain speed boosts
Merge foreachnodes into one version that uses a context object.
Add a bound parameter to node_count(_weighted).
Allocate THashSet item and its key together when FOwnKeys=true.
Get rid of some global variables.
Fixed and refactored MOVX optimisation that occasionally caused crashes on i386 platforms
Correct linker script for aarch64-embedded
Start address was wrong, should be 0x80000, not 0x8000
* extract a symbol or def from its previous owner if that owner has OwnsObjects set to true
+ provide a tsym based variant of ChangeOwnerAndName
* a function also captures other nested functions when these are called
* generate a better name if the procdef is an anonymous one
+ add method register_implemented_interface to tobjectdef which registers an implemented interface and - if desired - also initializes the GUID related fields of the objectdef
* use that method in all locations outside symdef that add add an implemented interface
Based on work by Blaise.ru
Add link unit for esp-idf v4.1. Version checks to allow for different patch levels in idf_version.
GenerateDefaultLinkerScripts should set out_ld_filename.
esp32.rom.api.ld was only introduced in esp-idf v4.3. Remove invalid linker search path.
* High() and Length() for dynamic arrays deal with sizesinttype instead of ossinttype (on AVR the former is 16-bit while the later is 8-bit thus this is an important distinction)
+ MovapXComisX2ComisX2 optimization
+ add constants for the Invoke symbol of a function reference interface (both for declaring and finding it)
+ add utility function to retrieve the invoke procdef of a function reference interface
Refactoring and bug fix in OptPass2Movx that could cause incorrect
values in overflow conditions
* Aarch64: operations affect always the full 64 bit register, so
TCpuAsmOptimizer.RegLoadedWithNewValue can use SuperRegistersEq
+ Aarch64: SxthSxtw2Sxth optimization
* Pass 2 can now be run multiple times when
under -O3 and above.
Added correct flag tracking for JccMov2CMov optimisations
* change cgsize2subreg and reg_cgsize on Z80 to behave more like they do on AVR; this fixes compilation of Z80 now that the array and string length fields are indeed of type SizeSInt instead of OSSInt
* move the handling of the symbol found in factor_read_id to a separate function
* ensure that an expression that involves an overloaded generic in mode Delphi isn't handled as a specialization if it shouldn't be
+ added tests
* ensure that result of factor_handle_sym is initialized
* check also for 64 bit registers in TX86AsmOptimizer.RegModifiedByInstruction
Fix linker commandline for m68k-atari
CMOV now modifies rather than writes to the destination register so RegUsedAfterInstruction behaves properly
Fix linker script for atari/gnu ld
* m68k-sinclairql: fix the inclusion of the target proper
+ fix support for 8-byte records, held in a register pair on the WebAssembly target. This fixes
gitlab 0039524
* adjust parse_proctype_directives so that it can handle a function reference as well
+ m68k-atari: fixed bogus TOS program flags passed to VLink. added -WF argument to allow the user to specify their own flags if needed
* regenerated message includes
* m68k-atari: make the Atari target use 68000 CPU as default
* m68k-atari: make the Atari target always default to VLink, even for crosscompilers
* m68k-atari: make vasm the default assembler. also don't claim we have an internal linker
Fixed registers in references not being tracked properly in MovMovXX2MovXX 1 optimisation
Add internalerror if ogwasm tries to write unset Func/Global or TagIndex of TWasmObjSymbol
* when adding WebAssembly object info, traverse through current_module.used_units,
as well as the usedunits global. This resolves
gitlab 0039543
Optimized the comparison of a widestring variable with ''
Fixed optimization `Length(W)=0` -> `(Pointer(W)=nil) or (PLongword(Pointer(W)-4)^=0)` for WideString
* name of result variable of anonymous functions can be changed (and must be in modes without modeswitch Result)
* extend parse_proctype_directives to handle proc(var)defs as well as invokables
* adjust handle_calling_convention so that it can be used with both proc(var)defs and invokables
* correctly handle directives for anonymous functions
Allow WideChar const to UTF8String const conversion
* handle result type of unsigned ordinal operations in ISO/Extpas mode similiar to TP, solves
gitlab 0037875
* Removed unused parameter
* Section-offsets have 64 bits in the Dwarf-64 format
Update build and link requirements for esp-idf v4.4. Refactor the version dependent linker fragments list into an array of version specific array of strings for easier updating in future.
Improved JccMov1JmpMov0Jmp -> SETcc optimisation
* declare the type symbol of an internal def as sp_internal
+ add a constructor for trecorddef to declare an internal record type as part of a specific other type
Based on code by Blaise.ru
* make the VMT symbol and type def of the corresponding class or object instead of having them be global
* bump PPU version to avoid potential compilation errors due to this
Based on code by Blaise.ru
atari: pass tos exe flags also to ld
atari: add -Wt option to allow specifying the executable format
This is useful to create aoutmint format binaries using vlink,
which have a symbol table that has no limit for the name length.
* mips64el compiler can be compiled
mips64 define must also set mips
Also set mipseb or mipsel macro for 64-bit mips CPU
Add default macros inoptions unit for mips64 and mips64el CPUs
Add use of SD instruction in tcgmips.a_load_reg_ref method
* move checking for a def in the hierarchy to a separate nested function and use it to check the hierarchy of the current def being specialized as well
* check hierarchy of the current generic or specialization def independant of whether it's a record- or objectdef
+ add a field to denote that a symbol (mainly local and parameter ones) was captured through another symbol
* don't check for a duplicate internal symbol in inherited symtables
* set the type symbol of the procvar while it is parsed so that a function reference can have itself as part of the parameters or the return type
* set the flag that the symtable contains a generic at the end of the corresponding block of types_dec() to ensure that the owner is assigned correctly
+ add function funcref_equal to check whether two function references are considered equal enough to be assignable
* consider invokables as related when they're equal
* correctly handle calling convention for function references
* protected symbols are visible for defs declared in a local symtable as well
+ some basic stuff for MIPS64
* register MIPS64 targets properly
+ add utility function to retrieve a file position of a usage of a type symbol from a type's definition
* an internal definition in a specialization might not have a genericdef
* if a symbol is not part of a symtable then assume it's from the current module
+ add an error message for when a symbol can't be captured
* regenerate msg{idx,txt}.inc
+ add necessary core functions and functionality to implement capturing of variables
Based on code by Blaise.ru
* do not insert the $result symbol again when the VMT for the capturer is built
+ add function to check whether a procdef can be converted to a function reference
* two function references are equal to each other as long as their signatures match
+ implement necessary functionality in tcgprocinfo to initialize and populate the capturer
Based on code by Blaise.ru
+ startup code skeleton for MIPS64
* aros64: recent developments hanged the library call ABI, lets try to follow it (aros64 is experimental)
* also handle function references when a generic one had been parsed
+ add flag to denote an object def as a function reference
+ add support for parsing function references
* revert accidently committed code
+ add flag to denote that an objectdef is invokable, thus can be used like a function variable
+ add utility function to check whether an objectdef is an invokable one
* if an interface is declared inherit the invokable flag from the parent interface
* sorted defines in the compiler: mips64 is defined on all 64 Bit mips platforms, mips64el for little endian, misp64eb for big endian
Fixed bug on x86 platforms where the stack pointer was not allocated if it was different to the frame pointer
* m68k: do not generate unnecessary unaligned load sequences for byte loads into registers, this fixes tcnvint1 test on plain 68000
* m68k: don't attempt to copy less than 1 byte in g_concatcopy, this fixes tdfa7.pp on 68000 and removes some superfluous address processing on 68020+ in the same test
* Some streamlining in x86's OptPass1LEA routine now that the stack
pointer is properly tracked, which also permits some deeper
optimisations on -O1 and -O2 virtually for free.
+ add utility function to check whether an invokable can be invoked without explicit parameters
* MIPS64 can
* MIPS64 does not need separate 64 bit code path for ordinals
+ add a new tproccopytyp pc_normal_no_paras to copy an abstractprocdef without its parameters (useful if the parameters themselves will be reused and the original def otherwise deleted)
* do not copy parameters onto the stack using FPU registers if the type is
actually handled by the MM unit, resolves
gitlab 0039567
+ emit an error message if the ihxutil is not found when compiling an ZX Spectrum executable with the internal linker
+ emit a 'tried' message (fpc -vt) when using ihxutil for ZX Spectrum
* m68k-atari: override the exeext globally, not just at the final step of the linking. this fixes 'Linking .ttp' messages, when in fact .prg gets generated
Resolve address of a symbol defined as absolute of another symbol, in assembler code.
Fix compilation of mips64 compiler by simple use of 'make mips64'
Fix loading of 64-bit constant into register for 64-bit mips CPU
Fix invalid typecast by postponing sym change to after address resolution in 44094dba
* Local speedup in OptPass1LEA that avoids expensive calls if p and
hp1 are adjacent.
* if an invokable that isn't a function reference is followed by a point in a mode that doesn't use TP/Delphi style calling without parameters then don't call it like is done with normal procvars
- removed spurious comment
* use 'with' in tlinkerwasi.SetDefaultInfo
* set and use ExeCmd instead of DllCmd when making an WASI executable
* some fixes to the WASI library compilation (not ready, yet)
+ added separate startup code for libraries, that declares _initialize, instead of _start
- removed --allow-undefined linker option when compiling a WASI library
- removed commented out code for executing WASI dllcmd[2]
- don't pass --export-dynamic to the linker when linking a library for the WASI target
* x86: Improvements to JccMov2CMov to catch Jcc @Lbl; ; JMP @Lbl
* hopefully final fix for absolute references to absolute symbols
- don't write the wasm-ld command line to the screen when linking a WASM
library. The command line, passed to the linker is dumped when compiling with
-vv anyway.
* move determine_generic_def out from pdecl.types_dec to pgenutil
* extract the code to parse a forward declaration out from types_dec into its own function parse_forward_declaration
+ add ability to strictly compare defs with generic constraints (this is needed for declarations, while for normal code we're rather relaxed)
+ add a method to retrieve a copy of a specialization context
+ add support for forward declarations of generic classes and interfaces (any implicit pointer type really); fixes
gitlab 0034128
* fix typos in comments, no code changes
* just copy value parameters to a temp. when inlining instead of
using (@...)^ constructs, resolves
gitlab 0039590
Add section directive for subroutines for embedded and freertos systems.
* throw an internal error if the reference of lea contains a segment register
* powerpc-morphos: add support for linker map file generation, some code cleanups
help text: vlink is no longer default on MorphOS for a while now, remove from help text, add Atari and Sinclair QL where it is the default
* regenerated message files
* reorder string expressions with parentheses so fpc_*_concat_multi can be used efficiently, resolved
gitlab 0039479
Move member variable "section" to tprocdef. Type of "section" to agree with symansistr define.
* throw error properly if a target does not support sections
* z80-msxdos: cleaned up some msdos leftovers in i_msxdos. no functional changes.
* x86: Fix to MOV/CMP register deallocation positioning
* x86: RegModifiedByInstruction and RegInInstruction
are now more accurate for (I)MUL and (I)DIV.
* var, type, threadvar, const sections require also in classes etc. at least one declaration, resolves
gitlab 0039599
* building for LLVM fixed
* do not throw an internal error in case of a misplaced string, resolves
gitlab 0039609
* m68k: allow vasm to be used for system_m68k_embedded target, simplify some code
* z80-amstradcpc: add some initial files for the target (mostly just the clone of ZX Spectrum files for now)
* prevent that a absolute symbol references itself, resolves
gitlab 0039604
* m68k: fix an endless syntax error loop in the assembler reader
* regenerated message files after adding the z80-amstradcpc target files
* cleanup: cs_opt_loopunroll is a generic optimization for a long time already
* z80-amstradcpc: fixed target naming mess, so -Tamstradcpc works now, also fixed the help text
* regenerated message files after CPC naming fix
* fix MovapXComisX2ComisX2 optimization
* m68k: disable the frame pointer optimization on subarchs that don't support long displacements for now, until the shortcomings of the cg can be addressed
* m68k: spilling read, write, and replace is now bound to CPU capabilities instead of CPU family. This probably fixes some issues on 68000, where spilling replacement was not respecting CPU displacement handling boundaries, leading to assembler errors.
Extra code generation options for shift with compile time constant.
* fix change information for a lot of MMX instructions
* m68k: fixed the register save/restore for larger than 32K stackframes on subarchs which has no long displacement, to not trash register A0
* more change information fixed
* more change information updates
* m68k: make sure right is in an address register for muln,addn,orn,xorn, before calling the low level cg
* more change information updated
* change information updates
* fixed SSSE3 change information
* change information for SSE4.1 instructions
* change information for SSE 4.2 instructions
* AES instruction change information fixed
* few more updated change information entries
* continued to update change information
m68k: utilize cg.a_loadaddr_ref_cgpara in hlcgcpu, as m68k has an instruction for loading addresses directly to the stack (PEA), and the default implementation of hlcg.a_loadaddr_ref_cgpara doesn't use that code path
Revert "m68k: utilize cg.a_loadaddr_ref_cgpara in hlcgcpu" for now, turns out it's not needed
* continued to update change information
* another change information update
* more change information
* finished change information for AVX1 instructions
* completed change information for AVX-2
* change information for AVX-512 mask register instructions
* started with change information for AVX-512
* extend tabstractprocdef.getcopyas by a parameter to control whether the copy should be registered or not
* rework tprocsym.Find_procdef_byprocvardef so that its implementation can be used in a more generic manner
+ add method tprocsym.Find_procdef_by_funcrefdef to find a procdef that's compatible with the specified function reference
* make tprocinfo.addnestedproc public so that it can be used to add generated functions
* do not throw an error if syscall is used with a syntax not applicable for the current
target, resolves
gitlab 0039640
* fix
gitlab 0035261: apply slightly adjusted changes by Ryan Joseph to implement support for implicit generic function specializations
The main adjustments were as follows:
- fixing coding style and identation
- fixing some typos
- using a better name for the property in tcallcandidates which holds the symbols created for anonymous parameter values
* probably check type for int_to_real instruction selection
Symbolic constants: don't range check on use
If these constants are defined with an explicit type, they are already
truncated/checked at that point. If we range check them again on use, we
may get errors because at that point there is no explicit type cast
any more.
* [x86] Added new RefsMightOverlap method and implemented it into the XMM memory move optimisations to catch memory overlaps; fixes bug i39627
Symbolic constants: don't range check on in use in typed constants
Same as 3da54dcf9f, but this type when used in type constant definitions
like record fiels
AArch64 asm reader: add support for fpcmp(e) conditions
Resolves
gitlab 0039643
* i386: make also use of VCVTUSI2S* instruction if possible
* x86: m128 etc. are now vector arrays (giving correct memory alignment) and "use_vectorfpu" will return True for these types
m68k: opcode table updates based on vasm 1.9 (used with permission)
* factored out tx86typeconvnode.int_to_real_mm_location
* do not crash in case of too many $push directives, resolves
gitlab 0039652
LLVM: enable DWARF debug info generation
LLVM: data location debug info support
This was added to LLVM for Fortran arrays, but can also be used for Pascal
dynamic arrays
LLVM: support for attaching metadata to instructions
agllvm: remove useless code
LLVM: factor out writing operands in agllvm
Check mf_symansistr is compatible with current compiler mode and issue a message before failing PPU loading
* Compiler error is now thrown if record alignment is not a power of 2 or is greater than 64.
+ recurse into multiple subscription nodes when calculating contant @... expressions, resolves
gitlab 0039665
* disallow offsetof trick for types involving implicit dereferences, resolves
gitlab 0039667 partially
* x86: New CMP optimisation that mimics some of the CMOV optimisations and removes unnecessary conditions.
* Removed foolish inline from StripLabelFast
agllvm: support for writing specialised metadata nodes
tnodeuitls: merge GenerateObjCImageInfo into InsertObjectInfo
LLVM needs to insert the Objective-C image info into the general object info
metadata. This way we don't need to store a reference to that metadata so
as to add extra data to it later (tnodeutils is never instantiated, it only
contains class methods)
LLVM: assign procdef.procstarttai, like in the regular code generator
* x86: Introduced TrySwapMovOp method, and redesigned TrySwapMovCmp
to use it while also trying to move one more instruction back
* x86: New jump/label tracking in CrossJump optimisations
tfileposinfo: separate types for the fields
Allows other units to declare variables of the appropriate type when storing
those values separately
* x86_64: do not use copy_mm in g_concatcopy for 8 byte sized copies
+ add method to find a procinfo for a nested function by the corresponding procdef
* x86: Changed the names of temporary register
stores in OptPass1MOV for reasons of clarity,
and other minor optimisations.
* x86: Extension to CanBeCMOV that permits a potentially unsafe reference if it appears in the previous comparison
* use MOVDQA instead of MOVQ in spilling_create_store
* call OptPass1_V_MOVAP for MOVDQA
* call OptPass1_V_MOVAP for MOVDQA on i386
* x86: Fixed bugs in and refactored and renamed
DoSubAddOpt optimisation method
Typed const builder: store tsym
Useful for LLVM debug info generation
llvmdbg: initial version based on dbgdwarf
Line information is mostly functional, type information not yet (except
for basic procdef info, as that's required for line info)
+ fold "a shl n1 shl n2" and "a shr n1 shr n2" into "a shl (n1+n2)" and "a shr (n1+n2)", resolves
gitlab 0039629
dbgllvm: remove restriction to only write struct procdef in context of struct
Does not make a difference for LLVM since all debug info for procdefs is
assigned to the definition instructions for the procdef anyway, and avoids
issues when only generating line info (in that case the structs will never
be processed, but we still have to generate the basic debug info for their
procdefs to provide a scope for their line info)
Use a set instead of boolean arguments to TCallCandidates.
Outline freeing TFPList with disposing its items into TFPList.FreeAndNilDisposing.
* only abort due to a missing overload directive if there indeed was any procdef found (due to implicit specializations there might be none), fixes compilation of tests webtbs/tw38310b and webtbs/tw38310c
* move handling of a dummy symbol (mainly either resolving it or generating a suitable error) inside single_type to a nested function as the same code is used multiple times
* fix
gitlab 0039673: also resolve the dummy symbol in case this isn't a reuse of the current generic's name
+ added test
* fix
gitlab 0039679 and fix
gitlab 0039680: for implicit specializations a parameter used in a call might also inherit in some depth from a specialization used as parameter type
+ added tests
* the index of the generic type parameter is not the same index of the paras list
+ added test
* a function can't be used to implicitely specialize a specialized procedure variable parameter and vice versa
+ added test
* fix
gitlab 0039681: also handle the result type of a specialized procvar when checking for a possible implicit specialization
+ added test
* fix
gitlab 0039675: consider the symbols for unnamed parameters as used so that there won't be unnecessary hints about them
+ added test
* x86: Improvement to CMP/JE/CMP/@Lbl/SETE ->
CMP/SETE/CMP/SETE/OR optimisation to reduce
pass counts (and work better with improved
FLAGS register allocation).
* use a single if-condition for both check_hints and addsymref
* in case of an implicit specialization ensure that the symbol of the generic is indeed considered as used once the final implicit specialization has been picked
+ added test
* x86: Improved TrySwapMovCmp to insert before
the FLAGS register is allocated.
* AVR: fix TCpuAsmOptimizer.InstructionLoadsFromReg for MOVW
* simplify code for MovMov2Movw optimization
* AVR: moved MovMov2Movw optimization into pass2 as it might prevent other optimizations
* Fixed bug in register preservation tracking
LLVM lineinfo: fix nolineinfo generation
LLVM requires line info metadata for all call instructions that may potentially
be inlined. So attach one to all call instructions in nolineinfo regions, but
set their line number to 0 (same as what clang does)
llvmtype: ensure all processed defs get recorded
This is necessary so they get reset as well, as they may be reprocessed while
compiling other units (both by llvmtype and dbgllvm)
llvmdbg: add declaration for all DISPFlags
dbgllvm: create dummy line info for instructions that shouldn't have any
Use line 0 for that, like clang does
dbgllvm: handle array of const (stub)
dbgllvm: handle empty spFlags
llvm metadata: use cardinal instead of tsuperregister for unnamed metadata numbers
We're not putting these into registers, so no need to limit ourselves
dbgllvm: fix infinite loop when writing multi-dimensional array info
cutils: also use minalign, when varalign equals it, not only when varalign is less than it (21 years old bug?)
LLVM: fix fileinfo of temp allocations
dbgllvm: fix crash when generating debug info for procdef of imported struct
dbgllvm: fix crash for files without procedures/functions
dbgllvm: add scopeLine attribute for function debug info
Ensures that breaking on the function correctly sets the breakpoint on the
first source line of the function (rather than potentially in the prologue
without line information)
* allow 32 byte alignment of constants and variables on aarch64-darwin
+ AVR: helpers take care of ADIW
* AVR: use adiw to create spilling constants if possible
* AVR: insert allocations for registers used by spilling so the assembler optimizer does not remove spilling code
llvm metadata: counter per unit rather than globally
Results in less high numbers, and reproducible results when partially
rebuilding
llvmdbg: diflags/dispflags fixes
Fix MainSubprogram flag for older LLVM versions, as it was a plain flag rather
than a subprogram flag there.
Added visibility flags for procdefs (public/private/protected)
Write flags as enum rather than integer to avoid issues with changing values
across different LLVM versions
Fix generation of default linker script for esp-idf v4.4
+ AVR: track flag usage
+ AVR: take care of allocated flags when spilling
* AVR: trgcpu.do_spill_read might also use ADIW
* Bug fix that prevents downsizing of
"(x div y) and z" when "x div y" is 64-bit and
z is 32-bit or less. Fixes i39646
Rename tsymtable.insert and delete methods to insertsym ands deletesym
* x86: Bug fix where aoc_ForceNewIteration was
checked in the wrong pass.
* AVR: trgcpu.do_spill_read must load ofs
* Corrected label reference counts caused by TAsmLabel.GetName incrementing refs
* set minimum compiler to compile the compiler to 3.2.0
SymAnsiStr: fix "make all" and webtbs/tw39661*
Fixes compilation with LLVM backend
TSymStr: more consistent usage
* x86_64-linux and i386-linux align variables and constants up to 64 byte boundaries
PPU version: bump
fcaea210758 changed name mangling
* arm-linux: set max. alignment for constants and variables to 32 byte boundaries
Fix for variables longer than 127 chars
* set max. variable and constant alignment for win32 and win64 to 64 byte boundaries
LLVM debug info: LLVM 7.0 support
Also defined some llvm flags in a negative way so they can be removed from
later versions rather than added
* Fix to bug that would reset nf_write flag on tempref nodes in assignments
Use round to convert float constant into s64comp type for LLVM compiler as is done in general case
* simplifications by Rika (*2 loops => shl/Bsr), resolves
gitlab 0039717
aasmtai: added tai_string.Create(ansistring)
Also prevent range check errors for empty strings
LLVM metadata: specialised metadata fleshing out
+ added the atomic memory access WebAssembly instructions from the threading proposal for WebAssembly
+ enable the atomics extension on the llvm-mc command line (extension appears
to be recognized since LLVM 8.0, so it should be safe to always enable this
from the llvm-mc command line)
* patch by Rike: Use reverse_longword instead of manually reversing longword, resolves
gitlab 0039720
+ added intrinsic (for RTL internal use) that emits the WebAssembly atomic.fence instruction
+ support the atomic.fence instruction in the WebAssembly internal object writer
llvmdbg: disable open array data location
Since we don't generate full debug info for parameters yet, this internalerrors
llvmdbg: remove some commented dbgdwarf code
Also adjusted some hashtable sizes
Fix syntax error for isLocal field for function/procedure type LLVM debug information
Use '.L' as labelprefix for LLVM compiler variant
+ Aarch64: MovOp2AddUtxw optimization
LLVM: separate as_clang_llvm_darwin
The Darwin local label prefix ('L') is different from that on most other
platforms ('.L). While LLVM generally handles that for us, for inline
assembly it's still FPC's job to adhere to the target conventions.
Only use Win64 vectorcall special case if calling convention is vectorcall.
* a64: Fix where hp1's was assumed to be an instruction and not actually checked
* a64: New movz reg,#0 -> mov reg,xzr (or wzr) optimisation
* more readable fix for the missing ait_instruction check
* arm/a64: New sbfx/ubfx -> mov optimisation
* a64: Updated debug messages to follow standard.
Call increfs manually to avoid removal of stabs debug related labels
* increase default dwarf version for linux targets where current distributions exist
Do not alloc/dealloc NR_DEFAULTFLAGS for wasm32, as it is NR_NO
* implement necessary conversion functionality for anonymous procdefs to function reference interfaces including capturing of variables
* Streamlined label referencing
* better constant propation for inline nodes
+ added instrinsic support for the all the 2-parameter read-modify-write
WebAssembly atomic operations (add, sub, and, or, xor, xchg). Note that they
are not implemented in the internal assembler, yet.
+ added intrinsic support for the WebAssembly cmpxchg atomic operations as well
Add missing reference increases for ait_jvar labels
* if a for loop does not change a variable, we can propate it if it is a constant, resolves
gitlab 0039726
+ support the new WebAssembly threads and atomics instructions in the internal assembler
+ support intrinsics for the WebAssembly memory.atomic.wait32 and memory.atomic.wait64 instructions
+ support intrinsic for the memory.atomic.notify WebAssembly instruction
+ add a new symoption for symbols created for nameless types during implicit function specialization so that they can be recognized
* if the symbol belongs to the current def also consider it a specialization if it's a nameless type symbol from an implicit function specialization as their owner gets changed to the function itself
agllvm: fix writing metadata operands for variable declarations
llvm metadata: add DIGlobalVariableExpression enum
Only documented as of LLVM 9.0, but existed already in 7.0.
Also fixed DIGlobalVariable not being marked as unique
llvmdbg: handle nil in more places
"void" is represented as "null" in LLVM debug information, which we represent
by nil
llvmdbg: build hashtable to lookup llvmdecl belonging to a global variable
We need to attach the debug info to it
llvmdbg: fix missing initialisation when there are no procedures
llvmdbg: emit debug information for global variables
llvmdbg: emit uppercase symbol names unless C++-style debug info is selected
Otherwise gdb won't find the symbols unless you use the exact case
* more robust code for constant propagation in for loops
llvm: replaced boolean fields in tllvmcallpara with a set
* continue const. propagation after a for loop when possible
llvm: changed llvm_metadatatype from untyped pointer to undefineddef
That matches its meaning better, as it should not result in type conversions.
E.g. some kinds of metadata parameters expect a "type register" parameter such
as "metadata i32* %reg.3"
- remove duplicate paraprintnodetree to ensure that there the right paraprintnodetree is used (namely the one from globals)
* ensure insert_self_and_vmt_para can deal with a preexisting self symbol as long as it has the expected type
* patch by Pierre, which fixes WebAssembly code generation for signed div/mod with overflow checking
* WebAssembly code generation fix in thlcgwasm.a_op_reg_reg_reg_checkoverflow, based on patch by Pierre (but simplified, to use a single block)
* fixed WebAssembly code generation in thlcgwasm.g_overflowCheck_loc (patch by Pierre)
* replaced several internal errors, related to the WebAssembly labels
resolution with more meaningful error messages, in order to ease the
debugging of the compiler. Based on patch by Pierre.
+ reserved inline numbers for the WebAssembly atomic loads and stores
+ implemented WebAssembly atomic load intrinsics
+ added WebAssembly atomic store intrinsics
* implement assignment of procedure and method variables and routines (global, instance and nested) to function references
Add help for -Aomf option for wasm32 CPU and new message for ogwasm binary writer
Avoid some range check error and convert internalerror into error messages
tllvmcallpara: turned into object and added convenience methods
* the WebAssembly internal assembler renamed WASM (previously it was OMF, which was the ID of the MS-DOS .obj writer, which I forgot to rename)
* fixed the message in the previous commit
TCGParaLocation: remove alignment gap
+ support different versions of llvm-mc (version 10 seems to be the earliest that works)
* correctly handle directives for function references
+ added "(experimental)" to the compiler help screen for the WebAssembly compiler options that are still unstable/experimental
* compilation with -O3 fixed
Fix cycling with -CR option
* fix
gitlab 0039736: ensure that the capturer object and any converted function reference interface are considered used
+ added test
* fix compilation with DEBUG_NODE_XML defined
Avoid invalid typecast to tabstractvarsym
agllvm: support nested constants in parameters
Needed for metadata support
agllvm: support specialised metadata with field names
Necessary for DIExpression
tllvmcallpara: record whether it's passed to metadata
Sometimes we need the def to store a the original def of the passed parameter,
e.g. for the first argument to llvm.dbg.addr
hlcgobj: new getlocal and recordnewsymloc methods
Call hlcg.getlocal instead of tg.getlocal when used for actual parameters/local
variables. Has an extra tsym parameter, which will enable the LLVM backend to
insert debug information.
Call hlcg.recordnewsymloc when the location of a (local/para) symbol changes,
so debug info tracking can be updated (only done for LLVM currently)
+ enable the ROL/ROR instructions for WebAssembly
+ implemented popcnt via the popcnt instruction in WebAssembly
* Risc-V: return with mret from interrupt handlers, resolves
gitlab 0039737
+ added the memory.init and data.drop instructions
+ added the WebAssembly reference instructions ref.null, ref.is_null and ref.func
+ added the WebAssembly table instructions
+ added the WebAssembly reference and vector types to TWasmBasicType
+ support all the new types in encode_wasm_basic_type
+ added the 'wasmthreads' target switch (enabled via -CTwasmthreads)
* fixed compilation of ppudump
+ added a 'producers' custom section to WebAssembly object modules, containing the FPC version
+ produce a target_features section when compiling with -CTwasmthreads
ngtcon: fix def of emitted vmt in procedure of object typed constants
Fixes compilation of tests/test/tprocvar17 with the LLVM backend, and probably
some other tests as well
rautils: don't interpret ".L3" as potentially meaning "unitx.identifier"
Fixes compilation of webtbs/tw10641.pp with a compiler compiled with
range checking
taddnode.cmp_of_disjunct_ranges: fortify in case of programs with errors
Fixes compilation of webtbf/tw3116 with a compiler compiled with -Cr
+ support the memory.init and the data.drop instructions in the internal asm writer for WebAssembly
+ added the WebAssembly saturating truncation instructions to the internal assembler
* pass the option to create shared, imported memory to the linker, in case the module is compiled with -CTwasmthreads
Note that this breaks running programs compiled with -CTwasmthreads with "wasmtime run --wasm-features threads", but
there's not much we can do about that, since shared memory is required for threading, and wasmtime still doesn't
support it.
* the stack pointer on Risc-V points always at the last used position, resolves
gitlab 0039739
* pseudo instructions for flag handling
* standard Risc-V pseudo instructions for Risc-V 32 completed
* unified Risc-V 32 and 64 cpubase.pas
+ completed Risc-V 64 pseudo instructions
* typo fixed
llvm: support for adding/subtracting constants to pointers in typed constants
Fixes webtbs/tw34027 for llvm
do_set: immediately exit in case of range error
Prevents run time error in case of a compiler compiled with range checks
enabled (webtbf/tw10890a)
tarraydef.elecount: fix overflow detection
It did not trigger in case of an array[0..high(asizeint)]. Fixes compilation
of webtbs/tw9039[ab] with a compiler built with range checking enabled.
llvmdbg: fix overflows for aggregates > 2^61 bytes
LLVM does not support aggregates larger than that at all, because internally
it stores all sizes in bits in an uint64. Their rationale for not having
special support for that is that there is no hardware with full 64 bit VM
address space anyway. So truncate our size emissions in debug info also to
that.
read_record_fields: fix overflows of variant record size variables
Could happen in case of > 32 bit variant parts, or variant parts at offsets
> 32 bit offsets.
Fixes webtbs/tw9039c with a compiler compiled with -Cr
* set the correct symtable level for the invoke procdef
* ensure that the VMT for the function reference interface is generated correctly, but for this the invokedef needs to be copied without hidden parameters (and handle_calling_convention will be done by the VMT builder as well)
function references: make names of interface methods valid Pascal identifiers
On high level targets, and on PowerPC/PowerPC64, interface method thunks are
implemented using internally-generated Pascal wrappers, so the method names
need to be valid Pascal identifiers.
Additionally, that wrapper code uses the procsym's realname, so also
update the realname field when changing the name of anonymous methods.
* unified Risc-V 32 and 64 register data file
+ "rescued" mkrvreg.pp from old svn data
* fix
gitlab 0039745: the conversion from ordinals to pointer types in mode Delphi is not allowed for a void type (happens when using a typecast to convert a method without parameters to a function reference)
+ added test
Fix compilation of sparc compiler with -dDEBUG_ALL_OPT
Also add a comment when a label has been optimized out when compiled DEBUG_LABEL
Manually increase refs of newly created labelsymbol in insertpcrelativedata
Add several increfs to avoid troubles on AIX target OS
+ added Risc-V register information file generation to the compiler Makefile
* more stringent naming of register file information for Risc-V
* make proc_to_funcref_conv publicly available
+ add an error message that a nested function variable can not be assigned to a function reference
* regenerate msg{idx,txt}.inc
* ensure that a nested function variable can not be assigned to a function reference
* the check for nested procvars is now done during the conversion in capturer_add_procvar_or_proc so loosen the check in proc_to_funcref_equal_internal
* fix
gitlab 0039740: consider a conversion of a procedure or procedure variable to a function reference as a bit more expensive than otherwise
+ added test
* fix
gitlab 0039742: when assigning a function to a function reference it's not the function itself that needs to be checked to be captureable, but instead what it captures (this applies for both the non-generic and the generic case)
+ added tests
Disable finalisation code fro LLVM compiler to avoid interface finalisation troubles
Fix compliation error with -Oodfa option as reported by Gareth
+ forgotten pseudo-instructions added
* zero is a valid Risc-V register alias
* "fast lane" code and comment fixed
Fix compilation of 32-bit powerpc compiler
llvm: version 13.0 support
* Risc-V: allow also register aliases in register modification lists after asm blocks, last part to resolve
gitlab 0039738
llvm: added support for newer Xcode toolchains
Based on https://en.wikipedia.org/wiki/Xcode#Xcode_11.x_-_13.x_(since_SwiftUI_framework)_2
LLVM: list supported LLVM/Xcode versions
Use the -i or -il command line parameter
llvm: version 14.0 support
llvminfo: fix copy/paste error in llvm 14 comment
Spotted by @Alexey-T1
dbgllvm: rename hastable for staticvarsym declarations
llvmdbg: support for generating debug information for local/para varsyms
Note that not all symbols are covered yet, because absolutevarsyms are not
yet supported and those are e.g. used for function result aliases.
Additionally, not all types are fully supported yet.
* patch by Rika: improve EncodeUleb128/EncodeSleb128, part of
gitlab 0039750
llvm: removed Xcode 10.0/10.1 as supported versions
These already did not work because they predate clang 7
parentfpstruct: don't add vo_is_firstfield to first field of record
That flag is only for the first field of variant parts of records
objcdef: remove duplicate variant start check
aasmllvmmetadata: remove leftover unused type
dbgllvm: support for record field debug information
Try to fix real constant problems for llvm compiler
dbgllvm: added appenddef_struct_named
Factored out of appenddef_record_named for reuse by objectdefs.
Also moved responsibility of adding the struct dinode to the asmlist
to the caller, as the name of this method does not imply it will do
that.
dbgllvm: remove tmembercallbackinfo
Leftover from dbgdwarf, not used here
dbgllvm: skip static fields when writing struct fields
These are not part of the struct instances
dbgllvm: struct_metadef fixes
It will be used to hold a reference to the underlying structure of a class,
whose type is represented as a pointer to a DW_TAG_class_type for compatibility
with the debug information generated by the FPC backend (otherwise we could
instead just add a deref expression to all variables of such a type)
dbgllvm: support for tobjectdef debug information
Classes, objects, interfaces, Objective-C classes, ...
dbgllvm: emit all symbolic constants as enum values/strings
Easier to read in the .ll files, and avoids potential mismatches with their
value in LLVM (in case it changes across LLVM versions)
Fix compilation of arm compiler with LLVM=1
Fix oversized type size constant
Avoid Invalid typecast error when using -CR option by using tabstractrecordsymtable type for record or object symtable
dbgllvm: removed some commented-out declarations
* patch by Rika: Replace some instances of manual work with endianness with cryptic oneliners, resolves
gitlab 0039719
defutil: new is_address() helper
Returns whether a def represents an address
nllvmadd: fix not always forcing pointer constants in registers
There could have been a typeconversion around the pointerconstn/niln.
This was hidden because llvmtype fixed it up later, but with opaque
pointers it showed up again.
* a few more MISP64 fixes
agllvm: missing space between type and tai operand
llvm: support for opaque pointers
Will be the default starting with LLVM 15, and required with LLVM 16.
Tested with LLVM 14 and '-mllvm -opaque-pointers'. See
https://releases.llvm.org/14.0.0/docs/OpaquePointers.html for more
information.
llvm: use formaldef rather than undefineddef for llvm_metadata
Better matches the intent, and fixes compilation issues on AArch64
+ RiscV32: patch by kupferstecher: compiler support of CH32V30*, part of
gitlab 0039777
arm paramanager: always create at least one paraloc
Even for parameters of 0 bytes. Matches behaviour on other targets.
* use a TCmdStr as parameter for SetVerbosity as it gets passed a TCmdStr in the option handling, thus may contain a parameter value (especially -vmXXX) larger than 255 characters
+ add a AnsiString based overload of GetToken
* change ChangeMessageVerbosity from String to AnsiString as long parameters might be passed to it
llvmpara: don't crash if a parameter has no paralocs
* don't load the controller unit if the currently compiled unit *is* the controller unit (which might happen if one compiles the controller unit as part of a program)
* do not throw messages on potentially uninitialized internal symbols, resolves
gitlab 0039744
Put systems_bsd into systems_weak_linking to fix heaptrc compilation failure for netbsd and dragonfly target OS introduced by commit ae346a87
llvmdbg: fixed variant fields
They have to be members with a union type, rather than union types
themselves.
* optimize a-const1-const2 when const1 and const2 are real constants and fast math is on, part of fixing
gitlab 0039782
darwin: also run dsymutil for DWARF 4
x86-64: keep tcgpara vardef the same as the para's real def
Only override the paraloc's vardef if necessary. This fixes compilation of
tests/test/cg/tvectorcall*.pp for LLVM
x86-64: properly set parameter alignment if not default
* get rid of cs_opt_none
* $O+ sets cs_opt_level2 instead of cs_opt_none which made no sense
* do not use Dwarf-4 yet as it is too little tested and has no benefits
* remove accidently commited writeln
Support arrays and classes in compile-time OffsetOf.
* WebAssembly exceptions fix: fixed raise without parameters in except..end
blocks in WebAssembly native and branchful exceptions mode. Fixes
gitlab 0039752
+ added check whether PPU and program are compiled in the same WebAssembly
exceptions mode (either both are turned on, or both are turned off)
* Don't call secondpass(left) in twasmtypeconvnode.second_int_to_real, this fixes bug
gitlab 0039735.
+ WebAssembly: use the 64-bit div instruction, instead of an RTL helper for 64-bit division
* fixed WebAssembly code generation for integer unary minus with overflow checking
+ generate exception checks after calls to fpc_overflow class in WebAssembly
branchful exceptions mode, because fpc_overflow can raise an exception in case
unit SysUtils is included.
+ make use of the unsigned remainder instructions in WebAssembly (i32.rem_s, i64.rem_u)
* fix
gitlab 0039795: when extracting make_prettystring it was forgotten to also append the const part of the name to the specialize name
Simplify SanitiseXMLString.
* do not throw an internal error if slice is used on dyn. array paramters, resolves
gitlab 0039806
* Fixed infinite loop when CONSTPROP is enabled
but USELOADMODIFYSTORE is not.
riscv32: Fix potential FP proc_exit bug
* do not optimize away +0.0 if no fastmath is passed as -0.0+(+0.0)=+0.0
* x86: MovAndTest2Test optimisation now accepts a smaller sub-regiser on the TEST instruction
cresstr: fix length specified for resource strings to typed const builder
Copy/paste error
* allow type parameters in variant parts of records as we do not now
what type is used during specialization, resolves
gitlab 0039805
* x86: Shrink TEST instruction on MovAndTest2Test
where possible.
set Tag_ABI_VFP_args to 1 only if the hard float abi is used, should resolve
gitlab 0039817
* convert a+/-const1-/const2 in into a+/-(-const1)+(-const2) to enable further optimizations, resolves
gitlab 0039782
riscv: Merge stack code, fix interrupted code
- Stack pointer is kept below register save area. This ensures that
registers are not overwritten by interrupt handlers.
- RV32 and 64 code is merged to base class.
__fpc_valgrind symbol: use correct size when inserting definition
x86 BuildInsTabMemRefSizeInfoCache: don't read past end of instab
Add cntfrq_el0 and cntpct_el0 AArch64 registers
tstringconstnode.changestringtype: fix buffer overrun
Found by asan
* handle absolute on strings correctly for dwarf debug info, resolves
gitlab 0039816
ttai_typedconstbuilder: do not remove tcalo_vectorized_dead_strip_item
This was done because originally getting the finalized asmlist happend
through a single proc that either called the vectorized version or the
regular version depending on the presence of tcalo_vectorized_* flags.
Nowadays, calling either get_final_asmlist_vectorized_dead_strip or
get_final_asmlist happens directly as needed.
This flag will be used by the LLVM asmwriter to add appropriate
address sanitizer information.
LLVM backend: address sanitizer support
Activate with -Clfsanitize=address. Only tested on Darwin/x86-64 for now.
agllvm: fix writing strings in metadata arrays
They were interpreted as part of larger strings
llvm: fix reading past end of data for some parameter references
Fixes false positives when using address sanitizer
* a64: New conditional branch to CSET peephole optimisation
* a64: Porting of MatchOperand function from x86 that takes integer parameter
Adding AArch64 CurrentEL register
CurrentEL is used to determine the current "exception level" in the CPU.
It has four possible results:
0b00 - EL0 - Application
0b01 - EL1 - Rich OS
0b10 - EL2 - Hypervisor
0b11 - EL3 - Firmware
https://developer.arm.com/documentation/ddi0595/2020-12/AArch64-Registers/CurrentEL--Current-Exception-Level
https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels
* Reference counts are now properly incremented on duplicated taicpu objects
LLVM address sanitizer: add asan library and rpath on Darwin
Also verified that "make all" works with asan on macOS/AArch64
* Always generate CFI-information. During linking it can be omitted when
no debug-information is requested. On Linux this needed a change in the
linker-script. On Windows it already works as desired. Other targets
may need some adjustments as well.
* arm: Symbol reference counts are corrected when PC-relative data is inserted
* arm: Labels to constants are now data labels and not jump labels
x86: Direct assignment instructions are no longer checked prior to calling CheckJumpMovTransferOpt, instead relying on the callee to do the heavy lifting (also fixed -Os bug)
* correctly truncate rtti symbol names of enumeration types, resolves
gitlab 0039829
* x86: Fixed bug in "Mov0LblCmp0Je -> Mov0JmpLblCmp0Je" optimisation
where the reference count was increased twice.
+ support writing of 32-bit and 64-bit relocations in the REL object writer
for Z80. This fixes DWARF debug output and makes it behave consistently with
the Z80 external assembler writer.
* patch by rika: simplify tscannerfile.readstring, resolves
gitlab 0039835
+ added the WASM_SYM_TLS symbol flag constant
+ added WASM segment flag constants
+ set the TLS flag for threadvar sections when WASM threads are enabled
+ prefix the threadvar sections with '.tbss' when WASM multithreading is enabled
+ WebAssembly multithreading: also declare threadvar sections as TLS and prefix their name with '.tbss' when using the external assembler
+ introduced trefaddr.addr_got_tls, to be used for generating WebAssembly threadvar access, when WASM multithreading is turned on
+ generate proper WebAssembly threadvar access when multithreading is turned on
+ declare the three magic global variables (__tls_size, __tls_align, __tls_base), created by the linker, when WebAssembly multithreading is enabled
+ added WebAssembly intrinsics for reading __tls_size, __tls_align and __tls_base
+ add the "-m wasm32" parameter to the linker, when linking for the WASI
target. No idea if it does anything, but is passed to the linker by the
official WASI SDK, so it shouldn't hurt.
* set the default stack size for the WASI platform to 65536 bytes (this is the
default, used by the linker)
+ allow changing the stack size for the WASI platform
* stack alignment on the WASI platform is 16 bytes
* set the stack size to 64kb and stack align to 16 bytes for the wasm32-embedded target
+ allow setting the stack size for the wasm32-embedded target
+ pass '-m wasm32' to the linker, when compiling for the wasm32-embedded target
+ allow creating a linker map file, when compiling for the wasm32-embedded target
* use current_module.sharedlibfilename instead of current_module.exefilename, when linking a library for the wasm32-embedded target
+ allow specifying custom extra linker options for the wasm32-embedded target
+ allow specifying custom extra linker options for the wasm32-wasi target
- removed debug writeln when calling the linker for the wasm32-embedded target
+ show a "linking" message before invoking the linker for the wasm32-embedded target
* fix
gitlab 0039826: correctly handle function references that are part of generics/specializations, but are not generics/specializations themselves
+ added test
* apply the same alignment parameters to wasm32-embedded as wasm32-wasi
- disable the cs_opt_nodecse optimization from the -O2 for the WebAssembly target, because it causes a crash, when compiling the classes unit
+ added custom section descriptions for DWARF debug info for the WebAssembly object writer (not actually emitted, yet)
+ introduced TWasmObjSection.IsDebug
* fixed crashes with the WebAssembly internal object writer, when debug info is enabled. The debug info itself is not yet written to the file, though.
+ write the actual DWARF debug sections in the WebAssembly object writer. The relocations aren't ready, yet, though.
+ emit WASM DWARF debug info relocations
+ implemented the R_WASM_FUNCTION_OFFSET_I32 relocation in the WebAssembly object writer
+ always (even when multithreading is off) create a "target features" section
in the WebAssembly object writer, since we still require some (very commonly
supported) extensions, even without multithreading
* don't write R_WASM_TABLE_INDEX_I32 relocations, always use R_WASM_FUNCTION_OFFSET_I32 in debug sections
* workaround crash when generating WebAssembly DWARF debug info for threadvars, while multithreading is turned off
llvm: move asan library linking support to texternallinker
This way other platforms besides Darwin can also use it.
* an attempt to fix WebAssembly debug info section relocations
+ support RV32E Extension
* RiscV: generate mret only for FreeRTOS and Embedded
* RiscV: pass the same default directories to the linker as on other architectures
* Riscv32 and Riscv64 on linux: enable safecall support
llvm: support for getting the llvm rtl (rt) architecture name
This is the name used as part of the llvm rt libraries, like
asan (address sanitizer)
llvm: generalised sanitizer linking support
Also enabled automatic detection of sanitizer library + setting rpath to Linux
Fix compilation with -Oodfa
ARM: fixed compiler compilation after 75c16b612660
+ allow the 'section' directive for the WebAssembly platforms
+ introduced tcpustaticvarsym.is_wasm_global
* don't reserve bss data for wasm global vars
+ introduced methods for converting WebAssembly global var types from a Pascal type to TWasmBasicType
+ declare user-defined wasm globals in the llvm-mc assembly output
* WebAssembly high level code generator: use the global.get and global.set
instructions to access references to symbols of type AT_WASM_GLOBAL
* x86: Bug fix where a tai type was assumed and could sometimes trigger an invalid typecast under -CriotR
variable trashing: don't trash internal syms
Since they're managed by the code generator, they should always be valid.
parentfpstruct: explicitly trash before initialising
It's an internal sym, but it contains user data. Together with the previous
commit resolves
gitlab 0039845
* x86: Fixed minor logic bug in aoc_ForceNewIteration check where UpdateUsedRegs was called at the wrong time.
* x86: Corrected some incorrect uses of RemoveCurrentP in OptPass1_V_MOVAP.
* x86: Refactor of a DeepMOVOpt call to make use of a while loop and aoc_ForceNewIteration to increase compiler speed and efficiency.
+ VPXorVMov2Mov optimization
llvm: correctly write aliases when using opaque pointers
llvm: llvm/clang 15.0 support
* fix
gitlab 0039849: it's an error when the file (or string) parameter of a Read*/Write* is followed by a ":"
+ added test
* do not warn on anonymous functions without captured variables about being not used, resolves
gitlab 0039853
* x86: Fixed bug where redirected jump has its condition changed (fixes i39851)
* x86: Reference count fix in CMP/Jcc and TEST/Jcc redirect optimisations
+ VPXor2VPXor optimization
* x86: Correct fileinfo and some refactoring for imul2leashl optimisation
* x86: Correct fileinfo and some refactoring for OptPass1LEA
* x86: Correct fileinfo and some refactoring for OptPass1SHLSAL
* x86: Correct fileinfo and some refactoring for OptPass1CMP
* x86: Correct fileinfo for OptPass2MOV
* x86: Correct fileinfo for PostPeepholeOptCall
+ support declaring wasm globals in the WebAssembly internal object writer
+ forgotten comments for new optimizations
Update errord*.msg
new messages and other changes in errore.msg have been translated or ported to the German message files.
* captured variables cannot be in registers typically
* wasm32 obj writer: writing the debug section symbols to the symbol table moved before the writing of the debug sections themselves
* wasm32 obj writer: moved the writing of the data sections ahead
* wasm32 obj writer: determine the section number for the datacount, code, data and debug sections ahead of time (before writing the sections)
* wasm32 obj writer: do the relocations before writing the code, data and debug sections
* wasm32 obj writer: use Data.ObjSectionList.Find to find the debug section by name in MaybeWriteDebugSection
* use simpler FMOV instead of UMOV
+ introduced TWasmCustomDebugSectionType
* use WasmCustomSectionName to obtain the debug section names in MaybeWriteDebugSection and MaybeAddDebugSectionToSymbolTable
+ handle LOC_FLAGS in thlcgobj.location_force_mem, resolves
gitlab 0039292
* fix
gitlab 0039860: even if the block type is not correct for the specialization of a generic routine continue to specialize it to not trigger e.g. an internal error
+ added tests
* extract generating the specialization from a specialize node into a separate function
* try to specialize a specialize node if it's followed by a < in a non-code section so that we might get better error messages
* the clause for converting the captured symbols of a nested function must not be entered by an anonymous function
* fix
gitlab 0039858: correctly keep track of symbols that need to be captured into the capturer
+ added test
* Fixed internal error number clash (2021102610)
Mark .noinit section with nobits flag.
* x86: New SHR-based optimisations
* improved FstpFld2 optimization
* x86: New "shr %cl; shr x" swap optimisation
+ some debug messages added
* cosmetics
do not publish enums with jumps
do not publish enums with jumps - keep error on static properties
* x86: Fixed bug where the magic number of an integer division wasn't fully sign-extended, causing incorrect logic within the compiler.
* Converted assertion into an internal error
* x86: New MovShr/Sar2Movx optimisation
* patch by Rika: This speeds up DefaultReplacements by a lot (order of magnitude or so), resolves
gitlab 0039722
* x86: Improved unsigned integer division for when BMI2 is available.
Revert " * patch by Rika: This speeds up DefaultReplacements by a lot (order of magnitude or so), resolves
gitlab 0039722"
This reverts commit a2d7503f714ee8ff856efd8d17548fbab928f0ec.
Reason: breaks replacements in config file parsing.
* apply default replacements also to defines set by -d:
- -d with $ is not possible so this should not break any existing compiler call
- this fixes also the strange error message "Error: malformed parameter: -dlinux"
when e.g. -d$FPCOS is passed as the default replacements are applied to the
error message
* x86: 64-bit integer division reciprocal algorithm uses IMUL
with an immediate for the modulus version where possible
* handle also simulated flags in tmipselnotnode.second_boolean, resolves
gitlab 0039877
m68k: use CPU capabilities at places instead of hardwiring cpu_coldfire
m68k: disable an A_MOVE in the spilling code in an effort to finally try to unbreak paszlib
m68k: add a CPU capability to signal the CPU has no 48 bit encodiing limits
* fix
gitlab 0039876: correctly Read(Str) enum types which have a size smaller than 4 Byte
+ added tests
* fix
gitlab 0039857: don't trash symbols marked as vo_is_internal
+ added test
* fix
gitlab 0039875: when a WideString constant is used to initialize a PChar the constant needs to be converted to the current code page
+ added test
* improves node complexity calculations
powerpc-morphos: enable 'section' keyword support, and force the startup code to be in the .text section, to fix linking external objects with unnamed sections on this platform
* don't switch a+/-/sqr(b) into an fma statement if b is too complex
* x86: EDX is now deallocated before MULX instructions in the "magic div" algorithm so it can be used as the destination
* correctly convert a single WideChar to a PChar constant with the correct code page
+ added test
+ MovzMovz2Movz optimization
m68k: fixed the capabilities flags inverted logic issues committed in 7d23c2e9
+ AArchz64: TCpuAsmOptimizer.OptPass1SXTW
* fix for TCpuAsmOptimizer.OptPass1SXTW
* refactor TCpuAsmOptimizer.OptPass1SXTW
+ Aarch64: SxtwOp2Op optimization
* refactoring
* cosmetics
* factor out GetNextInstructionUsingReg calls in TARMAsmOptimizer.OptPass1*XT*
+ ARM/Aarch64: *xt*Op2Op optimizations
* building of arm compiler fixed
* AArch64: extended SxtwMov2Data to CMP and CMN
* factor out TARMAsmOptimizer.USxtOp2Op
* use the bts instruction on x86 if possible, the reg,reg variant is better than a mov/shl/or sequence
* apply OptPass1Data to neg as well
* x86: Added BEXTR and BZHI to special spilling rules since they follow the same format as SHRX etc.
* x86: Added SARX to BMI2 code generator
* x86: Made a check for BMI2 more explicit in the integer division code generator
vector support: check supported type during parsing already
Avoids internalerrors at the code generation stage when using an unsupported
type
vector support: use vector result types
Set the result of a vector add node to a vector type.
Ensure that that these vector types are still asignment-compatible with
regular array types (may want to change this when we expose vector types),
and don't remove type conversions from vector types to array types (so the
code generator pass can still rely on the resultdef being a vector type)
High level codegen: set MM register type for vectors
LLVM: support for -Sv (manual vector usage)
Override register type for vectors to "integer registers" because we don't
use mmregister on LLVM (they're all virtual, so it doesn't matter)
* Seems not all was committed
Darwin version comparisons: factored out into object
Use numeric instead of string comparisons
objc: use compile-time macOS version checks
Use "modern" APIs for calling inherited messages when targeting Mac OS X 10.6
or later
objc: stop generating coalesced sections
When targeting >= Mac OS X 10.6, don't generate coalesced sections anymore
because they are deprecated. Resolves
gitlab 0039818
Overload selection: call procvars if result is compatible with parameter
Previously we only autmatically called procvars without parameters in TP/Delphi
modes if their result type was equal to the parameter type to which they were
passed. Resolves
gitlab 0039748.
symcreat: support for scanner/parser escape sequences
Support escape sequences when parsing internally generated code. Used for now
to force interpreting certain identifiers as unit/namespace identifiers.
* allocate registers correctly for method pointers on 16 bit address cpus, resolves
gitlab 0039603
* i8086 compiler fixed after 9848349610219cd0d2dadc67b112fb09a8317e91
* hopefully final fix after 9848349610219cd0d2dadc67b112fb09a8317e91
* fix
gitlab 0039903: correctly parse anonymous function references in records (and classes/objects)
+ added test
* check whether the hdef is still a procvardef before accessing it as such
* handle_calling_convention is only needed for a function reference used in a record/class/object when it's an anonymous one
* fix
gitlab 0039902: correctly handle assignment of procvars to properties with a field write accessor
+ added adjusted/extended test
* fix
gitlab 0039902: in case of mode ObjFPC function pointers passed to parameters need to be checked for the correct procdef as well
+ added adjusted/extended test
Missing file from b26703feaa9
* patch by Rika: Use linear file list in FInput.TInputFileManager instead of linked, resolves
gitlab 0039880
* mark units compiled with cs_compilesystem with a corresponding flag
* fix
gitlab 0039907: only load system class types from units that are marked as a System unit
+ added test
x86: Deeper insight in OptPass2ADD and OptPass2SUB to produce more efficient code
* end of an include file works like a new line with regard to single line (//) comments, resolves
gitlab 0039912
* fix
gitlab 0039898: when a loadnode is captured ensure that its nf_load_procvar flag is applied to the subscript node as well
+ added tests
Change is_macro to return true for A_JAL if in pic mode
Add name of unit for return type if not from current module in tprocdef.customprocname
Fix loading of ObjC protocol type after c8fee69345
That type lives in the objcbase unit, not in the system unit
Resolves
gitlab 0039914
* cleanup captured symbols when moving them from the nested function to the new method
* when generating the call to the extracted function reference inside the nested routine we need to use the parameters of the nested function and not those of the newly created procdef (fixes some of the test case failures with -O2)
* propertly check equality with the for-counter when propagating constants, resolves
gitlab 0039915
* apply ShlOp2Shl optimization also to floating point operations
* look ahead for ShlOp2Op optimization
* use append_object_struct also for dwarf-3 when creating dwarf debug info for objects, resolves
gitlab 0039920
* small correction to linker script
* improve dwarf cfi on avr
* cfi for avr needs 32 bit pc begin and range
+ add utility function to retrieve a signed integer def for a given integer def
+ add message in case an ordinal or pointer expression is expected (e.g. for the atomic intrinsics)
* set the maximum alignment values for constants and variables to 64 on aarch64-linux
* fix for commit a91e5478, mixed localalignmax and constalignmax
* patch by Rika: Optimize some compiler/CFileUtl.pas functions for returning unchanged strings, resolves
gitlab 0039882
* $P/$OpenStrings is supposed to be a local switch, so change that accordingly
+ added tests
* change PPU version as the change regarding $P/$OpenStrings affects the token buffers of generics (which contains the current settings)
* enable OpenStrings by default in mode Delphi
+ added test
cs_opt_consts: disable when non-local gotos are active
This optimisation can insert code after the call to fpc_setjmp, resulting in
it not getting executed after a longjmp. Fixes tmacnonlocalgoto on AArch64
with -O2 or higher.
* fix copy/paste typo in comments
* optimize shortstring concatenations if they're on the right side of an assignment to directly use the left side instead of a temporary
* use AllocRegbetween in TARMAsmOptimizer.RemoveSuperfluousMove, resolves
gitlab 0039921
* TDebugInfoDwarf3.appenddef_object should not write an extra finish_entry for objects and C++ classes
* the right side of a concatenation of multiple ShortString values can directly pass any String[x] to the utility routine, because only the Length() is used, not High() and nothing is modified (also typed pointers must not be used for them); this allows for better code generation for strings with a maximum length < 255
cgbase: make first parameter of supregset_reset "out"
rgobj: reduce compilation time of programs with long movelists
Reduces compilation time of webtbs/tw2242 for AArch64 with -O2 from
15 minutes to 10 seconds on my system.
from 15 minutes to 10 seconds
Darwin: don't try to print size statistics if the binary wasn't linked
* x86: Bug fix where improved AddMov2Mov optimisation didn't
check to see if the other register was modified in between
* x86: Improvement to bug fix so an optimisation can still be made even if the other register is in use
* x86: Bug fix where "mov $0,%reg" was inserted on the wrong side of a SETcc instruction
* x86: Fixed mistake in var9 optimisation under -Os; "andl $255,%eax" is not
smaller than "movzbl %al,%eax" because the immediate is sign-extended,
not zero-extended, so $255 will be stored as a 32-bit value.
* fixes tcg64frv.a_op64_const_reg_reg based on the analysis of Bart B, resolves
gitlab 0039953
* x86: ConvertJumpToRET now sets the condition to C_None
* if a pointer_to_array type conversion is applied to a variable, it is not written, resolves
gitlab 0039957
riscv32: Fix 64bit comparisons
- Code taken from MIPS backend
- Removed some unused code generated for RV32 64bit integer ops
* properly reset nf_write/nf_modify flags for min/max inline nodes, needed by dead store optimization, resolves
gitlab 0039958
* factored out nutils.node_reset_pass1_write
+ added WASI multithreading helper for setting the stack pointer for the linear stack
* a_load_subsetreg_reg will no longer generate an AND instruction if it isn't necessary
* x86: Modification to PostPeepholeOptShr to skip over MOV instructions if they don't modify the current register
* make the hidden high parameter for short strings a byte for 8 bit CPUs
Fix incorrect dwarf entry count. Issue
gitlab 0039928 introduced in 1b6982107f1ac4b4111e37be0a3649d155a2bc1e
* x86: The code generator will now attempt manipulate "x and (not y)" (where x and y are ordinals) to use ANDN.
- remove unused consume_generic_interface; it has been superseded by handle_generic_interface in 17a0ac7fc03
* x86: Extended FuncMov2Func optimisation to handle 1, 3 and 4-operand functions
+ print optinfo pointer if set
* check if optinfo is assigned before using it, resolves
gitlab 0039913
* x86: FuncMov2Func moved to separate method and also called by OptPass2MOV.
* x86: Changed BMI2 check to BMI1 for ordinal ANDN optimisation
* x86: CheckJumpMovTransferOpt now also copies over register deallocations to allow better optimisations
+ apply OpTest/Or2Op optimization to ANDN as well
+ DebugMsg for OpTest/Or2Op added
* x86: PostPeepholeOptTestOr has different debug messages for each found instruction, and also tests for BEXTR and BZHI.
* fix life information propagation for while loops, resolves
gitlab 0039971
* warnings/errors fixed which are caused by the new life information propagation
+ test
* more warnings after last commit fixed
Fix internalerror generated with riscv32 compiler.
Fix
Compiling ./fcl-passrc/src/pscanner.pp
pscanner.pp(2512,40) Fatal: Internal error 2006010801
error generated for riscv32-linux target after commit #c83e6c34
by correcting expectloc for riscv32 for 64-bit comparisons.
Add a small test.
* x86: Updated Mov0LblCmp0Jne optimisation to work when alignment hints appear before the label
* more debug messages
* better exit codes for test
* x86: FuncMov2Func now has code to remove "mov %reg,%reg" (since it doesn't get removed in Pass 2).
* generate the generic name for a specialization of a generic interface alias in the same way as for specializations in general
* fix
gitlab 0029859: ensure that it's correctly passed down into generate_specialization whether a unit name was provided for the specialization and if so search the generic only in that unit
+ added tests
* ensure that hmodule is initialized correctly
RTTI: don't generate full RTTI for internal types
These are types created by the code generator for internal purposes, and hence
are never queried by user code
AArch64: X18 is not a volatile register
It may be unused on some platforms, but in general it's reserved for OS library
usage (usually related to TLS)
Darwin: fix mac0S 11.0 version string
Prevents LLVM warnings
systems_iphonesym -> systems_iphonesim
It's a simulator, not a symbolator
Darwin: really fix -Xg for DWARF4
+ MovSubCmp2MovSub optimization
Linux: don't discard CFI when using it for exceptions
Allow cycle to finish successfully with -dEXTDEBUG without ALLOW_WARNINGS=1
* fix FindUnitSymtable for exception symtables, resolves
gitlab 0024801 and
gitlab 0039974
* more consistent naming of exceptsymtable enumeration symbol
* stop generation of typed array constants if the size does not match, resolves
gitlab 0039980
* x86: Added new emit_reg_ref_reg routine and related methods to support BMI2 instructions
* x86: The code generator will now attempt to manipulate "x and ((1 shl y) - 1)" to use BZHI
* x86: "x and ((1 shl y) - 1)" to BZHI adapted for in_and_assign_x_y
* dead store elimnation should not remove statements which can cause an exception
* run dead store elimination multiple times if needed
* changed of do_optdeadstoreelim must be passed by reference as noted by Alexey Torgashin
dwarf-eh: don't emit header if there's no data to emit
Fix the ~ is NOR rather than NOT
Fix the edge of first_imaginary in move op
Add loongarch64 architecture support to compiler
Add loongarch64 linux support to compiler
add loongarch64 linux rtl support
* generate correct dfa for subroutines declared as safecall
llvmdbg: fixes for method debug info
Mark "self" parameter as artificial
Add methods to the scope of the class/record rather than to the file scope
Add the vmt field, strip the "($)hidden" prefix from its name, and emit its
real type
* check if a target really supports safecall before calling load_safecallresult_node
* ensure that newly created tloadparentfpnodes have a valid resultdef as they might be created in situation where the loadnode itself is no longer typechecked
* fix
gitlab 0039981: retrieve the symbol that returns the desired procdef/procvardef not maybe the Self or something else as we need that symbol to differentiate the procdefs
+ added test
+ mark the def for a capturer class with a corresponding object option
* ensure that the correct overload is picked for function reference parameters
+ added tests
* fix
gitlab 0039978: ensure that Self is captured when a method of the current class is captured into a function reference
+ added test
* fix
gitlab 0039977: allow a capturer to access any method independant of visibility as the visibility checks are supposed to have been done before the captured symbol was converted
+ added test
* only i386 uses same special fastcall calling convention
* x86: New TEST->BT peephole optimisation
* x86: New OR->BTS peephole optimisation
* x86: New AND(NOT X)->BTR peephole optimisation
llvmdbg: remove unnecessary typedef intermediates
* fix crash in debug output in TX86AsmOptimizer.DoArithCombineOpt for DEC/INC $reg
* x86: CMOV optimisations now check optimizecputype rather than cputype
* x86: LeaLea2Lea now handles cases where the second LEA instruction
has a second register in the reference.
* x86: The LEA/LEA optimisations can now work with a different
destination register and the intermediate register still in
use.
* x86: New CPU feature flags in cpuinfo units
x86: MovMovMov2XChg optimisation now makes use of the CPUX86_HAS_FAST_XCHG flag
Avoidd to use hp1 after calling RemoveInstruction, as the VMT is invalidated
* x86: Converted BTR and BTS tests to use a new utility function to check if BTx instructions are acceptable to use
* x86: New XOR->BTC peephole optimisation
* x86: Zen processors now marked with CPUX86_HAS_FAST_BT_MEM flag
* x86: Flags that relate to optimization hints rather than features have been moved to a separate set
* calculate life info for if nodes correctly if the then branch is empty, resolves
gitlab 0039992
* x86: Refactored SetCC optimisations to better
spot label clusters and alignment hints.
* x86: New RET/lbl/RET optimisation
* x86: TEST and CMP optimisations now perform jump optimisations prematurely to remove unnecessary TEST/CMPs
* propagate life info properly
* x86: Extension to Cmp1Jl2Cmp0Jle to catch inverted variant
* CollapseZeroDistJump no longer updates registers or strips dead labels, instead just setting p to p.Next
+ FstpFldFstp2Fstp optimization
* further look ahead for temp. deallocation for FstpFldFstp2Fstp and FstpFld2
+ ShlShl2Shl optimization
* x86-64: movl/movq -> movl/movl zero-extension optimisation
* x86-64: Extended the movl/movq optimisation to cover more distance
* convert n-n mod const into n div const*const, resolves
gitlab 0039615
* x86: Addition of AMD CPUs: Bobcat, Jaguar, Piledriver, Excavator, Zen2 and Zen3 (and supporting flags)
* x86: Added FMA as an FPU target distinct from AVX and AVX2 (the latter of which has a new FPUX86_HAS_AVX2 flag)
Use correct class typecast for commit ba4cee279b
Fix compilation failure of RTL with -Co option for x86_64-linux target
* New 'do not execute' flag for notes and respective internal error triggering
* x86: 'and not' optimisation now sets the NOT node to 'do not execute' as it is skipped over
* x86: BZHI optimisation now sets the subtract and shift nodes to 'do not execute' as they are skipped over.
* create muln with create instead of create_internal when converting "n - n mod const)" so pass1 works properly, resolves
gitlab 0040004
* TAddNode.Simplify now uses pruning methods
* New node pruning methods
* More complex uses of the pruning methods in TAddNode.Simplify
* x86: Fixed movzwl/movzbl bug in OptPass2Movx (resolves i40003)
* use bzhi only (if at all) for in_and_assign_x_y and not other in_*_x_y operations, resolves
gitlab 0040016
LLVM: fix variant records when alignment of first part is not the highest
Resolves
gitlab 0040015
* In TAddNode.Simplify, commutative operations now ensure integer constant operands go on the right for simplicity
* Dead code in TAddNode.Simplify has been stripped
* as long as the type passed into a TypeInfo() is not an undefined or error def the resulting value will always be constant at compile time, so it can be compared to another then no matter if typenode or not
+ added tests
Set current_filepos in Internal assembler class also if DEBUG macro is set
+ more change information fixed
AArch64 cgcpu: add missing brackets around and/or expression
* New is_cyclic function to detect if def references itself - fixes
gitlab 0040010
* continued to fix change information
* Refactor of is_cyclic to use a linked list on the stack instead of a dynamic array
LLVM: us paraloc def instead of para def for byval
We also use the paraloc instead of the para to write the def
LLVM: add Xcode 14.0 support (-ClvXcode-14.0)
* another change information update
* Adjustment to TBLockNode.pass_1 to actually strip nothing nodes
Darwin/AArch64: adjust alignment info of custom-aligned paralocs
Resolves
gitlab 0040019
Use bitpacked indices in TViHashList.
Do not set usesectionprogbits and usesectionflags to true for solaris assembler
* Fix testing of A_JCC and A_SETCC, add A_CMOVCC
* Add $PIC for i386 and x86_64 solaris assemblers
Refuse A_Jcc, A_SETcc, and A_CMOVcc without condition
* Implement -t and -x options
* Fix spurious warning of already specified -t
* If no subtarget file found, error out instead of hint/warn
* Globals needs subtarget for macro substitution
* New intrinsiccode field for TCallNode to track transmutation from TInlineNode
* tinlinenode.handle_str now uses the new intrinsiccode field for TCallNode
* A call node's original parameter ordering can now be remembered, and a method introduced to access this
* TCallNode.simplify method introduced to convert Str with a constant into a direct string assignment
* get rid os some warnings
* Delegate darwin ifdef out of program flow, towards const, for clarity
* Define char as AnsiChar
* properly transform a+const1-const2 into a+const1+(-const2), resolves
gitlab 0040041
* improve module local data accesses by avoiding a got read
m68k: updated instruction tables to match vasm release 1.9a
m68k: add some initial CPU-specifc boilerplate for an internal ELF writer
* Allow widechar sets, reduce to ansichar set
* Do not insert widechar -> ansichar conversion node in const declaration
* Allow array constructor to contain widechars in mode unicodestring.
* Do not insert a widestring <-> ansistring conversion node when checking for (un)equal empty string.
* fix
gitlab 0040061: the Self of types that aren't implicit pointers (recods, TP-style objects, primitive types (for helpers)) needs to be stored as a Pointer in the Capturer so that modifications are correctly visible
+ added tests
* fix
gitlab 0040060: ensure that Self is not added for anonymous functions that are part of a static class method
+ added test
* a callnode for an anonymous function can have its procdefinition fixed, thus avoid the need to check for overloads
* don't free the old, captured Self symbol as that does not belong to the anonymous function
* when assigning an anonymous function to a method pointer move the function to the normal function level to avoid potential problems when accessing other variables
* fix
gitlab 0040062: ensure that Self is only added to anonymous functions when dealing with method pointers
+ added test
* do not throw an internal error on typed constants with wrong element count, resolves
gitlab 0040066
* ensure that all hidden parameter symbols are removed when adding an anonymous function to a capturer (they'll be added again later on)
* also skip high parameters when pc_normal_no_hidden is given to tprocdef.getcopyas
* fix
gitlab 0040031: with support for inline specializations it no longer makes sense to make the parameter symtable of a procedure variable type readonly as there *are* defs that are added to it
+ add adjusted test
- remove no longer required readonly functionality from tparasymtable
symcreat: add hidden high parameters in create_procdef_alias
No longer happens automatically for pc_bareproc procdef copies
llvm:a fix opaque ptr IR for Objective-C protocol
Also for interfacecom functions and properties. Fixes test/tobjc9 and
test/tobjc9b with LLVM 15.0+
thlcgobj.g_undefined_ok: new method
Specify that a register's contents may be undefined because of previous
operations (e.g. shifting by more bits than the register has, whose result
depends on the target architecture), but that the code generator will
later on ensure that if this is the case, that result will be overwritten/
masked.
LLVM: override thlcgobj.g_undefined_ok
Uses the freeze instruction available in LLVM 10.0+. If we don't freeze undef/
poison values before using them in a calculation (even if that calculation is
something like "and 0", which masks the result completely), the result will
still be undef/poison and will keep propagating.
tcginnode.pass_generate_code: use tlhcgobj.g_undefined_ok
Also override the code that uses this for LLVM with a variant that does not
need it for LLVM versions that do not support the freeze instruction.
m68k: added a helper function to check if a register is an FPU register
Avoid generation of invalid 'cb(n)z sp,label' instruction
Implicit specialisation: use regular array parameters for array constructors
Fixes compilation of test/timpfuncspez5 with LLVM and debug info, as the LLVM
debug info writer internalerror's when you try to generate debug info for
an array constructor (since those types should never appear as parameter/
variable types).
Replace them with reusable regular array types, so that multiple invocations
of the same generic function with array constructors of the same type and
number of elements are collapsed into the same specialisation
macOS: set max var/constalign to 64
For all non-ppc(64) targets. Fixes test/talignrec1.
* Forbid use of string alias in system unit
* Check that system unit is actually loaded before using it to search for system symbols
(cherry picked from commit 9e5ee68887dcb8acf66caf873bc5cfc58fb25316)
* Add is_systemunit_unicode function (cchartype suymbol)
* add uachar loading for unicode rtl
m68k: more boiler plate and refactor for a future internal assembler
LLVM: remove use of getelementptr in make_simple_ref_ptr
We cannot safely infer whether it needs to be indirect or not there,
it should be done at a higher level if appropriate.
m68k: removed the unused S_IQ opsize
m68k: more work on instruction validation for the internal assembler
Add sign extension to 32-bit for unaligned OS_8 and OS_16 types (to try to solve
gitlab 0040102)
Only signed extension is needed
* avoid internal error in case of an illegal generic declaration
* undid accidentely activated define
* do not warn on lea e/rsp with negative address offset, part of
gitlab 0040113
+ tests
* i386: Bug fix where EBP was marked as preserved when it wasn't, causing faulty optimisations
* x86_64: warn only on negative offsets if rsp is involed, second part of
gitlab 0040113
+ tests
Darwin: support -Xg for DWARFv4
+ support procvar[] in tp/mac procvar mode if the procvar returns an array type
* compile float*2 as float+float if possible as proposed by Rika, resolves
gitlab 0040116
LLVM: workaround to fix make all
* mark constant symbols used in preprocessor expressions as used, resolves
gitlab 0040108
* compilation after merge fixed
+ add utility function to retrieve the char type def from a stringlike def
* use new chartype_for_stringlike function to retrieve the char type for a stringlike def instead of casting to a stringdef
* get_stringconst should handle widestring correctly: library & import names are unicodestring constants in unicode rtl
* Unicode resource strings
* initial preparations for riscv32-freertos
+ first work for esp32-c3 support
* transform a/a only into 1 if fastmath is on
* more riscv32-freertos-esp32c3 stuff added
m68k: add tables to convert from some stub opcodes + condition into real opcodes. Use them in the external assembler writer for now. Later the internal assembler will need these tables too.
m68k: do not generate LEA instructions with explicitly specified size. only long is possible anyway.
* SetString needs correctly typed argument
* x86: Fixed bad register tracking in OptPass2JMP
* x86: More accurate register tracking in CheckJumpMovTransferOpt
* x86: Registers are now allocated properly during a FuncMov2Func
optimisation
* x86: Converted bit-test optimisations to use
debug_hexstr so comments aren't truncated
(and put $ before BTx values)
* x86: New debug_hexstr instruction to help produce concise debug comments
JVM: add typesym for anonymous record typed constants
Fixes compilation of system unit with JVM compiler after b38d13577f943
* patch by Jinyang He to fix building loongarch64 with -Oodfa/-O4
* enable to check the existing of environment variables in config files
+ completed identifiers for RiscV ABIs
* set fpu type correctly for riscv32-freertos
riscv32-freertos:
* unit name fixed
* linker script fixed
* assembler supports dwarf
* don't not generate non-constant leb128 entriesm for riscv32-freertos
* set FPU type properly for riscv32-freertos
* call esptool.py properly on Darwin
+ exec_e_cant_call_linker shows now the error message
Add support for -Ploongarch64 option
* x86: Some refactoring to use aoc_ForceNewIteration instead of manually advancing p
Aslo check that live_end is assigned before refering to it
* x86: TEST/Jcc/TEST optimisations can now look beyond the next instruction under -O3
* x86: JccMovJmpMov2CMovCMov will no longer move
MOV instructions (fixes i40122)
* x86: PostPeepholeOptCmp and PostPeepholeOptTestOr
now do a final attempt of TrySwapMovCmp to
clean up Pass 2 optimisations
* also count the use of enum syms in preprocessor expressions correctly
* post/pre inc/decrement references modify obviously the base register on avr, resolves
gitlab 0040153
* completed post/pre inc/decrement addressing mode instructions in TAoptBaseCpu.RegModifiedByInstruction
* patch by ccrause: do not load .fpc* sections into avr microcontroller to save space, resolves
gitlab 0040160
* patch by ccrause: fixes another .fpc* section problem for AVR, resolves
gitlab 0040162
* x86: Fixed oversight in RegModifiedByInstruction not checking W0, W1 and WU-type flags
* fix compilation with -dEXTDEBUG
* Speed optimisations for peephole register tracking functions
* check if a linker with the postfix .bfd exists, if yes, use it, resolves
gitlab 0040175
* fix (hopefully) build without an ld.bfd variant
x86: Some oversights fixed where another iteration of pass 1 wasn't performed when it should have been
+ x86: AND/CMP -> CMP optimiziation
* fixed comment
* shortened code
* FindRegAllocBackward will now return nil if it hits a dealloc for the register first
* Allow hidden units to be found when replaying generic
* Allow System.Variants (Delphi-compatible name) to be found when inserting variants unit
* Do not crash when module pointer is nil
(cherry picked from commit e6f71b6accd4949b8dec86fdd93d27e0c109732b)
* second mul might get called with a zero operand if the other has a side effect,
handle this correctly in ti386addnode.second_mul64bit, resolves
gitlab 0040182
+ riscv32-freertos: first version of TlinkerFreeRTOS.GenerateDefaultLinkerScripts
* compilation fixed with -Oodfa
* ensure that a procvar (especially a "REFERENCE TO") begins either with FUNCTION or PROCEDURE
+ added test
* PopCount takes care only of the bit pattern, so take the uvalue to avoid an internal error, resolves
gitlab 0040190
WPO: also consider NewInstance to detect class instancing
Resolves
gitlab 0040200
LLVM: don't use type names in ctor/dtor arrays
Workaround for https://github.com/llvm/llvm-project/issues/56809
LLVM: LLVM 16 support
No changes compared to LLVM 15 that affect us
LLVM: cleaned up some comments
* also initalize default helper variables of initialization sections, resolves
gitlab 0040183
+ support FILEEXISTS(...) in preprocessor expressions, resolves
gitlab 0039527
+ tests
* tscannerfile.readpreproc sets preproc_pattern correctly for quoted strings
Optimize {$DEFINE x := y} and refactor tmacro.buftext.
Report correct error positions inside macros (at least more often).
* write types declared in the interface section with a DW_AT_external tag, should resolve
gitlab 0040210
* revert use of DW_AT_external for types as this is not covered by the dwarf standard
WPO: fix dead code detection, and handle procvars
Extend dead code detection to not only look for the main mangled name, but also
for any aliases before deciding that a routine has been dead-stripped.
Assume objects/classes can also be constructed if the address of one of their
constructors or of the TObject.NewInstance class method has been taken.
Resolves
gitlab 0040204
* patch by Rika: Shorten cutils.compareansistrings, resolves
gitlab 0040213
* patch by Rika: Use Index* for pointer lists, resolves
gitlab 0040218
* do not replace index registers with esp/rsp, resolves
gitlab 0040223
Do not always set DEBUG_AOPTCPU
* wasm32: generate module info by traversing through current_module and its
used_units list recursively. This should fix
gitlab 0040229
* use a TFPList, instead of a dynamic array in twasmnodeutils.InsertObjectInfo.
No functional changes.
* some error messages use nicer symbol names
Add tf_use_psabieh for LLVM for x86_64-iphonesim, aarch64-ios and aarch64-iphonesim targets
* patch by Rika: Fix and possible simplification of SanitiseXMLString, part of
gitlab 0039800
Use systems_darwin set for supported targets for as_clang_llvm_darwin
RP2040 support based on modification by Michael Ring (https://github.com/michael-ring/freepascal).
Specify endianess and abi when calling xtensa linker
Add -EB or -EL paramter to xtensa assembler call (Warning: this requires a patched 2.40 release\!)
* Fixed bug in "JccMovJmpMov2CMovCMov" optimisation where it didn't track registers in references getting changed
Add missing swaping in case of different endianess of stab entry inside TInternalAssembler.WriteStab
Fix for tentryfile.getreal with FPC_SOFT_FPUX80, putreal still needs the same change
[AVR] Include bootloader starting address and max size where relevant.
Restrict previous change to compilers that do not have 10-byte extended type
Use GetExceptionMask/SetExceptionMask to avoid floating point exception inside FPC_SOFT_FFPUX80 code
Also add boot information to board aliases.
* Use correct sizeof to check if entry size is large enough
Only modify softfloat_exception_mask, as this is not handled equally for all CPUs with GetEXceptionMask/SetExceptionMask
Set defdynlinker depending on selected ABI for riscv32 and riscv64
* More efficient if-statement construction in tmoddivnode.simplify
* Code that checks for divisions against -1 is now not inserted if
it's not necessary (e.g. no downsizing)
Restore start section at end of assembler block inside z80 asm reader
* Refactor processorname -> suffix name for clarity of flow
Refactor initialization of binary and processor name for clarity of flow
Refactor check for -PB and -PP for clarity of flow
* Refactor: Rename some variables for clarity
* Refactor: add utility routine to handle command-line changes
* loongarch64 architecture reinstated
Add new test code to verify that tentfile.buf limits are not overpassed
Use clang instead of as for AsBinStr for aarch64-win64 target
* clearified message is mentioned in documentation issue 39349
Add '-b pei_aarch64' option for aarch64-win64 system
Add -Awin64-as option for aarch64 compiler for win64 target
Disable -EB/-EL passing for freertos OS as the corresponding released binutils do not support this option
Try to fix linker script for aarch64-win64
* Add option to allow emitting comments in RTTI info
* Emit comments in RTTI info for classes/interfaces
* Define RTTI directive parameters
+ Implement support for parsing sets in preprocessor directives
* Implement parsing of RTTI directive
* Introduce RTTI options in symbol definition
* Apply RTTI directive status to symbol
* Allow RTTI directive also before uses clauses
* Write extended RTTI info
* Dump extended RTTI info from PPU
* Implement -t options for fpc executable
* Remove some debugging statements
* Refactor processorname -> suffix name for clarity of flow
* Refactor initialization of binary and processor name for clarity of flow
* Rename variables for clarity
* subroutine to simplify command-line handling
* Limited subtarget config file parsing to detect -V
* Specifying multiple -V should not give an error but warn, as for -T or -t
+ introduced [hl]cg.a_label_pascal_goto_target. It is similar to [hl]cg.a_label
and is called by the code generator, when the label generated is the result of
a Pascal label.
+ added wasm32-specific flag tai_label.is_pascal_goto_target
+ added the wasmfuncref directive for procvars. Not actually implemented, just
parsed.
* ppudump compilation fixed
+ handle wasm funcrefs in tgcpu.defToWasmBasic
* added support and simplified the handling of results in create_functype_common for reference types
+ also support funcref parameters in create_functype_common
+ introduced flag is_wasm_externref to tcpupointerdef for wasm32. This is to be
used for declaring WebAssembly externref reference types.
+ magically insert a void externref type in the System unit, called WasmExternRef
+ support externref in defToWasmBasic
+ handle externref parameters in create_functype_common
+ introduced is_wasm_funcref(tdef) helper
+ introduced is_wasm_externref(tdef) helper
+ introduced the is_wasm_reference_type(tdef) helper
Add new substitute_env_variables parameter for DefaultReplacements function (with default true value)
Disable substitution by environment variables in message comment related functions
* the a_ref_null instruction split into two subinstructions - a_ref_null_externref and a_ref_null_funcref
+ enable the reference types extension in llvm-mc via a command line option
* fixed the textual representation of the ref.null instruction for llvm-mc
+ implemented WebAssembly code generator support for funcref and externref data
types, using new register types R_FUNCREFREGISTER and R_EXTERNREFREGISTER
+ WebAssembly internal asm support for the ref.null instruction
+ WebAssembly internal assembler support for the ref.is_null instruction
+ disallow taking the address of WebAssembly externref type
* check for codegenerror in twasmaddrnode.pass_typecheck and exit early, to avoid crashes
+ also check for assigned(left) after calling inherited in twasmaddrnode.pass_typecheck, to avoid another crash
* disallow conversion between regular pointers and WasmExternRef
- removed redundant semicolon
+ support using nil constants for setting values of WebAssembly reference types (funcref and externref)
+ support nil comparison of WebAssembly reference types (externref and funcref)
* disallow WebAssembly reference types to be declared as var, constref or out parameters
* disallow passing WebAssembly reference types as untyped var/constref/const parameters
* fixed bug, introduced in 6ff566350cbc2ecf8615cae6cc6792939a288ec8, due to
missing parenthesis
* fixed another crash, introduced in 6ff566350cbc2ecf8615cae6cc6792939a288ec8
* fixed crash in twasmcallnode.pass_typecheck when there is no procdefinition (for generic methods)
* use tcallparanode.parasym to find the tparavarsym in twasmcallnode.pass_typecheck
+ support WebAssembly reference types as WebAssembly globals
+ support externref and funcref WebAssembly globals in the internal object writer
+ added parser support for the 'suspending' directive
* ppudump compilation fixed
+ initial attempt (not fully working, yet) at implementing WebAssembly suspending externals
* fixed compilation with -Sew
* fixed creating suspended wrappers for functions without parameters
Handle the specific NaN pattern of mips floating-point unit
+ initial implementation of WebAssembly promising exports
* fixed generating wrappers for suspending functions that return something, other than double
+ comments for tsk_wasm_suspending and tsk_wasm_promising
+ comment for the po_wasm_suspending value
+ support 'suspending last' externals as well
+ also allow declaring an external as 'suspending first'
* eo_promising renamed eo_promising_first
* assert that any exported promising function is not synthetic
+ introduced tcpuprocdef.add_promising_export
+ introduced implement_wasm_promising_wrapper
+ added last:boolean parameter to implement_wasm_promising_wrapper
+ added 'last' or 'first' to the internal promising wrapper name
Set defualt riscv32 linux abi to abi_riscv_ipl32
Set defualt riscv32 linux abi to abi_riscv_ipl32
Fix fullcycle compilation error due to -Sew option
Add 'else' branch to 'case' keyword construct
for the setting of ABI in riscv32 assembler call.
Do the same for riscv64 assembler call.
Set default abi for riscv 32/64 embedded
* tcpuprocdef.promising_export_name renamed promising_first_export_name
+ support 'promising last' exports
+ print an error message, in case 'promising' exports are used on non-WebAssembly platform
* ensure that the functions that insert the hidden parameters (function result, open array high parameters, etc.) are idempotent
* revert 430bcac389c29a5ceca7759cfca69454aa31abf9 as with the change that the functions to insert hidden parameters are idempotent this is no longer required and also wrong as uses of the deleted symbols aside from Self and the framepointer would be left dangling
* fix
gitlab 0040221: don't allow a conversion from an anonymous function to a procvar type if compare_defs_ext already rejected them
+ added tests
Added generic WCH32Vx RISC-V processor types using memory size suffixes
Modified low-level startup code for RISCV32 embedded microcontrollers to
allow user code override of reset handlers for non-power-up reset events
as well as enabling user code override handlers for all 255 possible
interrupt vectors.
Separated out the low-level startup memory init into a callable procedure
to allow users that have caught reset events to init memory again if needed.
Signed-off-by: Interferon
* tsk_wasm_suspending renamed tsk_wasm_suspending_first
+ print a proper error message if a suspending external is used on a non-WebAssembly platform
* fixed erroneously duplicated code from previous commit
+ added mutable globals to the target switches section
There is code in the register allocator to restrict register allocation to the
first 16 registers in RISC-V RVE and RVEC modes. However, there was still
code in tcpuparamanager.create_paraloc_info_intern that allowed the allocation
of up to register X17 in RVE and RVEC modes. Modified this function to
take the processor mode into account and restrict it to X0..X15 in RVE and RVEC modes.
Also put conditional code in setjump.inc assembler code to only set the first
16 registers in RVE and RVEC modes.
The entire embedded-riscv32 RTL can now compile successfuly in RVEC mode.
* Split out option parsing in one routine per letter
* Make use of copy() without count when rest of string is needed
* Fix compilation for ARM
+ comments for the new error messages
* bump CurrentPPULongVersion
+ disallow WebAssembly reference types in records, objects and classes
+ added comment for the new error message
+ disallow using sizeof() and bitsizeof() on WebAssembly reference types
- rm commented out debug writeln left over from previous commit
Omit FPC_INIT_FUNC_TABLE generation if no unit initialization is registered for current project.
* for unique type aliases keep track of the original def
* increase PPU version
* a type helper that inherits from another type helper may extend a unique type helper of the parent's extended type (thus allowing to make the type helper of the original type available for the aliased type)
+ added tests
* don't insert anonymous functions into a withsymtable
+ added test
* fix
gitlab 0040142 and
gitlab 0040324: don't alias the function name to the $result variable for anonymous functions unless an explicit result name is provided
+ added tests
* fix
gitlab 0040332: apply patch by Rika to avoid a crash when an overload can't be picked outside of a function (e.g. when using intrinsics inside constants)
+ added test
* in case there hasn't been an error generated with an invalid attribute declaration then print at least "illegal expression" error
+ add a tcallnodeflag value that prohibits the tcallnode.pass_typecheck to return a procvar in case of a call without parameters with a found symbol, but no suitable procdef
* fix
gitlab 0040095: when searching a suitable constructor for the custom attribute don't allow the return of a procvar which can happen in Mac/TP procvar modes (like Delphi)
+ added test
* fix
gitlab 0039447: when checking whether the parameters are valid for pointer arithmetic check the *correct* parameter for being valid pointer-like type (I'd say that this was a copy&paste mistake...)
+ added test
* fixed ppudump for WebAssembly after the JS Promise Integration branch merge
* Generate hidden class to be used for TVirtualInterface (wasm only)
Add -Tlinux for loongarch64 compiler
Introduce -XLL option for link using ld.lld linker
* Restore -aR, lost in refactoring
* Lowercase subtarget file, as done in compiler
git ignore msg2inc binary
Regenerate msgidx.inc and msgtxt.inc files
* change TCachedSearchRec.Attr to longint as TCachedDirectoryEntry.Attr is also a longint, resolves
gitlab 0040343
Switch from functions for the Atomic*-family to intrinsics
* Additional fields/enums for invoke helper
* Mark method for invoke helper
Create invoke helper if requested and reference it in RTTI
Handle unaligned copy in TCGSparcGen.g_concatcopy method
* Handle some options required by android, nasm and darwin assemblers
* Shorter form of copy, remark by Alexey Torgashin
* x86: Fixed bug where OptPass2Jcc CMOV optimisation sometimes
put the wrong-sized register into an operand (fixes i40307)
* x86: Revamped OptPass2Jcc CMOV code to shrink and reuse registers as much as possible
* x86: Fixed bug with BT optimisation where operand
sizes bigger than the register word size caused
incorrect code generation (fixes
gitlab 0040358)
Attempt to get ogcoff to work on CPU with opposite endianness
Add missing TPECoffExpDir variantr of MaybeSwap procedure
Cleanup TLinkerLinux.SetDefaultInfo method in t_linux unit
Add x86_64-openbsd to LLVM supported list
* x86: Fixed bug in TEST/JNE/TEST/JNE optimisation that caused bad code to be generated under -O3
* Improvement to TEST/JNE/TEST/JNE code to be more accurate where register deallocations are concerned
Update errore.msg
Someminor corrections, found when translating to german.
LLVM: only add sret attribute for first parameter on caller side
We already did this when generating the definitions, but not yet
when generating the calls
LLVM: LLVM 17.0 support
No changes in IR (that affect us) since LLVM 16.0
* fix parameter alignment on x86_64 when more than 6 parameters are involved (aka the stack is used)
+ added test
[AVR] Add command line options to selectively remove portions of the RTL startup code.
Fix syntax errors in make fullcycle
Add unit specifiers for tlsdirectory fields: they need to be PUInt from globtype unit
Applied fix for binutils 2.41 for loongarch64 suggested by Jinyang He
https://gitlab.com/MQ-mengqing/source/-/commit/32fa3e9eb1a31fa6c4262623dbe432919f66419c
with modifications reported in comments.
volatile: allow for assignments
* factor out subreg2opsize
default values: store as staticvarsyms in staticsymtable
Previously, they were stored as localvarsyms in either the localsymtable
(for procedures/functions) or as localvarsyms in the staticsymtable (for
init/fini code of units/main programs). The latter was a hack (staticsymtables
normally cannot contain localvarsyms) and caused the temp allocator to also
allocate them as a local in fini code even if the default was only in the init
code.
The new approach ensures at most one copy gets allocated per unit, it doesn't
require explicit initialisation (since staticvarsyms are in bss -> zeroed by
default), gets rid of the localvarsyms in staticsymtables, and as a bonus
solves an issue with inconsistent LLVM debug information for the localvarsym
in init/fini code (since the staticsymtable is shared between the init and
fini code, so was the local, and therefore we generated debug info stating
it was defined in the fini code but within the scope of the init code).
Resolves
gitlab 0040395
default value: fix issue with inlining
Ensure the mangled name is always the same
Resolves
gitlab 0040404
default(): fix webtbf/tw37303 after previous changes
* x86: Fixed bug where incorrect SSE/AVX peephole optimisations were performed under -O3 in some situations.
* Added missing register allocations to SSE/AVX optimisations
default(): fix in generics for non-procvars after 1be741681648
Block added in the wrong place :|
Resolves
gitlab 0040409
read user-defined compiler messages in source codepage
Add main inputfilename for V_Parallel option to allow easier debugging of parallel compilation issues
* fix
gitlab 0040381: also check for hints when parsing the parameters of a routine (including open array parameters) or the result type of a function
+ added tests
* fix
gitlab 0040390: implement support for handling parameter names (including __SELF and __HIGH(
)) that resolve directly to registers
+ added tests
Add globals to implementation _USES clause to prepare move of V_XXX constants to globals unit
Avoid double definition of V_XXX constants by moving them to globals unit
Add new V_Parallel constant
Add -vj option in options unit to set V_Parallel
Add mainsourcefile to all messages when V_Parallel verbosity option is set
Flatten out -vX options in help message to make changes easier
Add -vj option in help message
Regenerate msg*.inc files after adding -vj option description
Compile “length(string or array) = 0” as “pointer(string or array) = nil” without further check, unless really required.
Also handle length <> 0, > 0, < 0, >= 0, <= 0, assuming lengths are never negative.
Change V_Parallel so that V_All doesn't contain V_Parallel, only explicit -vj will add main source file information
default parameter values: fix crash
Fix crash when declaring default parameter values while current_procinfo
is not yet valid
resolves
gitlab 0040413
Use PID to generate unique GDB script names
Limit this to cases when -vj or -vJ option is
used to call the compiler, which adds a PID prefix
to all compiler output.
This feature is useful to debug parallel make issues.
Cast properly to avoid range error
LLVM: fix double init/fini of local managed variables accessed from nested functions
resolves
gitlab 0040392
Change loongarch64 default dynamic linker directory according to gcc
* throw an error if instructions which needs an operand size is used with one operand being a reference without size
Rename fields of tspillregsinfo record to avoid having same field names as treginfo record
Try to fix crash in loongarch64 compiler
loongarch64 compiler has a specific routine,
called fixupref that generates some instructions that are
stored into a tasmlist given as an input parameter.
This function returns a boolean,
if the return value is false, the populated list gets
sometimes discarded.
This can lead to a later crash, because the unused
and freed instructions might have been stored
in live and live_end fields of the reginfo record
used inside rgobj unit.
The fix checks if any of the to be discarded instructions
has been stored inside reginfo records,
and resets the field in that case.
The fix might need to be more general,
because other parts of the compiler,
like all optimization code, also remove
instructions...
Fixing trying to consume ID for anonymous switch field
* 3-operand LEA instructions are now expanded if the latency could cause slowdown
* New "fast 3-component LEA hint" and "Icelake" CPU options
+ introduced classes for WebAssembly structured form of instructions
+ added code for converting wasm asmlists to structured lists (i.e. lists, using the new wasm structured instructions classes)
* fixed bug in wasm_convert_to_structured_asmlist
* fixed more bugs in the wasm structured asmlist construction
* set typ of wasm structured instructions to ait_wasm_structured_instruction
+ for debug purposes print wasm structured instructions in the llvm-mc assembler output
* shorten the string for ait_wasm_structured_instruction in taitypestr to fit in string[24]
* constructors made public to avoid warnings
+ added else to case statement, avoid the warning, produce an internal error in this unexpected case
+ added else to case statement to avoid warning
+ added compiler internal error when encountering certain unexpected wasm instructions (indicating improper nesting)
+ more consistency checks for unexpected instructions when converting to wasm structured instruction form
+ also debug print structured try..catch and try..delegate blocks
+ also check for unexpected delegate instructions when converting to wasm structured form
+ fix for the conversion of try..catch blocks to structured form
Add Exception backtrace when compiled with -dDUMP_EXCEPTION_BACKTRACE
* correctly name nested enum type debug symbols, resolves
gitlab 0040462
Attempt to fix tcalext3 big-endian powerpc64 failure
+ introduced map_structured_asmlist
+ introduced twasmstruc_stack
+ added a block stack parameter to TAsmMapFunc
+ added code for creating labels, associated with blocks and converting branch with consts to the corresponding block's label
+ in case of unresolved labels, call resolve_labels_complex, which will eventually implement the stackifier algorithm. Currently, it converts the asmlist to structured.
+ always call resolve_labels_complex, if DEBUG_WASM_GOTO is defined.
+ define DEBUG_WASM_GOTO in ppcwasm32.lpi (but not in the makefiles)
+ added ait_wasm_structured_instruction to the SkipLineInfo set
* moved the code that converts branch numbers to labels in the cpupi unit and call it from resolve_labels_complex
* fixed hang in map_structured_asmlist_inner
* fixed crash in map_structured_asmlist_inner, when the TAsmList parameter is nil
+ convert wasm structured list to flat list
+ added method tai_wasmstruc_if.ConvertToBrIf
+ added support for params and results in tai_wasmstruc_if.ConvertToBrIf
* ARM: Fixed issue where some offsets of ADR assembly instructions
were incorrectly encoded by the internal assembler
+ added and implemented tcpuprocinfo.AllocWasmLocal
* Local var templist renamed localslist. No functional changes.
* moved the preparation of the locals asm list in tcpuprocinfo.postprocess_code to a local subroutine
* moved the insertion of the wasm locals asmlist to a local subroutine
* insert the wasm locals asm list after resolve_labels_complex, since it will (in the future) be able to allocate more locals, in order to resolve the branches and goto
* set the last=true property of the last tai_local in the locals list in the
beginning of insert_localslist, instead of in the end of prepare_locals
+ support mapping of structured instructions also in map_structured_asmlist_inner
* convert if structured instructions to br_if + labels
+ added amfrtDeleteAi, support deleting instructions in map_structured_asmlist_inner
* convert loop..end_loop blocks to flat list + branch instruction
* strip block instructions
+ add the extra allocated locals before inserting the locals list in wasm32 tcpuprocinfo.postprocess_code
* a64: Fixed bug where BIC instructions were treated as having 2 operands rather than 3
* a64: Corrected supported shifter/extender mnemonics for arithmetic/logical instructions
* fix
gitlab 0040451: load the assembly symbol into a separate operand so that an offset already contained in oper isn't discarded + added test
* fix
gitlab 0040410: allow specialization of a procdef also inside exception handlers + added test
* the unit name has already been uppercased for the search, so no need to uppercase it again for the message output
* a64: Renamed OptPostCMP/And to PostPeepholeOptCMP/AND for internal consistency
+ added label resolution via state machine
* fixes to the mangling of the entry and exit code during the state machine label resolution
* fixed branch ordering in resolve_labels_via_state_machine
+ allow jumps to goto targets
* support local.get/set/tee with a const parameter in the wasm internal assembler writer
* temporary workaround for the is_pascal_goto_target check not working properly in a_jmp_always
* fixed a div by zero error, when compiling a wasi-hosted compiler
* fixed the label resolution for asmlists with WebAssembly native exceptions
* arm/a64: New AND/CMP -> TST or ANDS optimisation
* refactor: wasm_convert_to_flat_asmlist and wasm_convert_to_structured_asmlist now accept a single var parameter
* fixed and enabled the is_pascal_goto_target check
* refactored thlcgwasm.a_jmp_always. No functional changes.
* arm/a64: Added new TST post-peephole optimisation to replace previous AND/CMP/B(c) optimisation
+ introduced thlcgobj.a_jmp_always_pascal_goto - same as .a_jmp_always, but generated by a pascal goto statement
* refactored the taicpu_wasm_structured_instruction descendants to use a wstyp enum variable, instead of using the 'is' operator to determine the class type
+ check whether all br instructions, generated by goto point to a pascal goto label
Fix possible overflow in riscv32 compiler
* New "TryRemoveRegAlloc" optimisation utility
* x86: Fixed bug in "LeaLea2Lea 2" optimisation where final offset was calculated incorrectly
Change AVOID_OVERFLOW to avoid warning about inequality being always true
* arm/a64: New "OptPass2TST" routine to catch "TST; B.c; AND -> ANDS; B.c" optimisation
* x86: Fixed inefficiency in the long-range MOV optimisations
* x86: Factored out the MovMov2MovMov 2 optimisation to
catch an inefficiency in the "Deep MOV" optimisations
* Enable function references and anonymous functions in Delphi mode
* Label and align optimisation is now only done in the post-peephole
stage rather than passes 1 and 2.
Change internal linker in cross-endian message.
Change message level from error to warning,
in order to allow to work on full support of
cross-endian internal assemblers and linkers.
* SkipInstr now includes ait_align
* Search config file in same directory as actual compiler binary
+ added methods for writing ints with specific endianess in TObjData
* some fixes for the x86 assembler writer, when running on a big-endian hosted platform
* UpdateUsedRegsAndOptimize improved to clear aligns that don't have
any live labels after them, and to better handle non-jump labels.
+ introduced methods for writing endian-specific integers to TObjSection
* big endian fix in TOmfObjData.writeReloc
* use NtoLE instead of LEtoN in OMF DoRelocationFixup when converting from native to little endian. No functional changes, just better readability.
* write pretty symbol name of a generic is not found during specialization
* x86: CMOV block optimisation overhauled
LLVM: fix currency parameters passed on the stack on x86-64
Resolves
gitlab 0040496
* a64: Node parser now attempts to directly create BIC, ORN and EON instructions
* Fixed internal error number clash (2022102110)
* Avoid access violation, use internalerror instead. See also issue
gitlab 0040502
* Refer to bugreport for internal error 20231102
Check that tai returned by GetNextInstruction is really a taicpu object before using an explicit typecast
Use faster check for type of tai object
Fix handling of ST_LOADMESSAGES token
* fix
gitlab 0040500: do a for-in on a string variable using low(strvar) to high(strvar) so that zero based strings are handled correctly
+ added test
* fix
gitlab 0040504: always provide the global enum symbol for anonymous enum types (e.g. as part of a set)
+ added test
* x86: Additional TEST/CMP optimisations to optimise CMOV blocks
that aren't optimal due to register pressure
* x86: PostPeepholeOptMov attempts to convert mov $0,%reg to
xor %reg,%reg and mov $-1,%reg to or $-1,%reg under
-Os even if the flags are in use by looking ahead.
* Allow to disable 8.3 filename search
Fix for trunk arm STM optimize bug
* check for *-1 multiplications after folding, resolves
gitlab 0040448
* a64: New CSEL block optimisations ported over from x86 CMOV block optimisations
+ added TWasmObjInput class. To be used in the WASM internal linker. Not doing anything, yet.
+ implemented TWasmObjInput.CanReadObjData: checks for WASM header and version
+ started implementing TWasmObjInput.ReadObjData
* Properly zero-terminate ansistring when calling unicode2ascii
+ added TInternalLinkerWasi class (not fully implemented, yet)
+ added TWasmExeOutput class (not implemented, yet)
m68k: initial compiler changes for Human68k (Sharp X68000) support
tabs to spaces cosmetics. no functional change
* patch by lagprogramming: Improvement of function SetCompileModeSwitch, resolves
gitlab 0040525
Add missing token buffer index update for ST_LOADMESSAGES handling
Improve token buffer size checks.
* For settings comparison: call CompareByte only on copy_size.
* For mesgnb: verify that there is enough memory space
in rest of tokenbuf to hold the number of messages.
+ Add a check that tbi is not greater than tokenbufsize.
human68k: this system has internal sysinit
human68k: ppudump typo/build fix
human68k: regenerated Makefiles
human68k: fix xecutable generation
m68k: basic DOS syscall generation for human68k
Call FindUtil for ld or nlmconv utils at linking stage, not before
* arm: Fixed "RegInInstruction" and "RegModifiedByInstruction" not handling the flags properly
AVR optimization LdsMov2Lds
* arm: "OpCmp2OpS" moved to Pass 2 so it doesn't conflict with AND; CMP -> TST optimisation
* arm/a64: "OptPass2AND" and "OptPass2CMP" adapted to remove vestigial CMP and TST instructions
nested procvars: support assignments when switch not active
Support assigning one nested procvar to another even when the nestedprocvars
modeswitch is not active. This can happen when the type was declared in a
different unit that was compiled with this modeswitch, or in internally
generated wrapper code (which uses "pure" objfpc mode)
* a64: SkipAligns calls removed.
* x86: SkipAligns calls removed.
* SkipAligns method removed
* SkipLabels now handles alignment fields correctly
* x86: Safety check, since after calling DoJumpOptimizations, the input may no longer be the same tai
* GetFinalDestination now calls SkipLabels on an alignment field
* x86: Fixed inefficiencies revealed in "TEST/JNE/TEST/JNE"
optimisations after SkipAligns cull.
A variant "TEST/JNE/TEST/JE/@Lbl" optimisation now exists to
accommodate for an intermediate jump optimisation that prevents
the original optimisation from working if performed first.
Move test to end of possible conversion and add check_valid_var boolean variable
Fix usage of GNU assembler for i386-nativent target
m68k: do not generate argument popping for a noreturn call
regenerated msg*.inc files for the compiler after human68k merge
m68k: have the targets in alphabetical order in the help text
Add human68k OS to list of supported OSes for m68k GNU assembler
Improve GNU linker call for m68k-human68k target
+ Add '-b xfile' option
+ Add '-m human68kxfile' option
+ Add $GCSECTIONS and set GCSectionStr for GNU linker
trealconstnode.printnodedata: fix currency values getting written to stdout
* fix output position of deprecated hint for certain cases where it was wrong, resolves
gitlab 0040534
human68k: set default stack size to 16KiB
human68k: more work on getting tinyheap right. still doesn't seem to work, sadly, so still disabled
LLVM: only round currency values when storing them back to memory
Resolves
gitlab 0040550
LLVM: recognise Xcode-15 as LLVM codegen target
LLVM: use llvm.dbg.declare instead of llvm.dbg.addr for variable declarations
Even though it's supposedly deprecated, clang also still uses it and without
the declaration ranges of local variables are sometimes cut off
* Node dumps now output the convention if it's not pocall_default
* do str(...) optimization only in level 3+ mode
m68k: fix the assembler reader to bail out earlier on a failed parsing of a constant expression
+ added ld_int_wasi constant. Register the WASI internal linker.
* enable the WASM internal linker, in case the compiler is compiled with the ENABLE_WASM_INTERNAL_LINKER define
* override and implement TInternalLinkerWasi.InitSysInitUnitName
* set CObjData in the TWasmExeOutput constructor
* override GetCodeSize, GetDataSize and GetBssSize in TInternalLinkerWasi to avoid crash
* write a WebAssembly header in TWasmExeOutput.writeData
* implementation of TInternalLinkerWasi.DefaultLinkScript. Create a script that reads all the object files.
+ added functions for reading the different types of Wasm object sections
+ introduced decode_wasm_basic_type function
+ Wasm internal linker, object reader: implemented parsing of the type section
+ input error message in case the type section size is unexpected/wrong
+ import section duplicate check
+ added const sets for the WebAssembly reference, numeric and vector types
+ WebAssembly object reader: implemented parsing of the import section
+ function section duplicate check
+ read the functions count from the functions section
+ parse the rest of the function section
+ parse the data count section
+ introduced ReadUleb32 to avoid code repetition of the >high(uint32) checks
* use ReadUleb32 in more places
* the ReadUleb, ReadUleb32 and ReadName methods moved to be local functions inside TWasmObjInput.ReadObjData.ReadSection
- removed the TObjectReader parameter from ReadUleb, ReadUleb32 and ReadName
+ added section bounds checking to the read function, used inside TWasmObjInput.ReadObjData.ReadSection
- removed the repeated section bounds check in the section parsing code,
because now all reads go through the read function, which does section bounds
checking on every read
+ added code section duplicate check in wasm object reader
+ read the code entries count from the code section
+ started parsing of custom sections - known custom sections are dispatched to
a specialized parsing function for each of them, while unknown custom sections
(currently the ones, not produced by FPC) produce an error
+ parse and check the version of the 'linking' section
+ parse the linking custom section by splitting it into subsections and call subfunctions (dummy for now) for each subsection
* the 'linking' section is a section, not a subsection. Fix error messages.
* set FReader and InputFileName in the beginning of TWasmObjInput.ReadObjData
+ parse the WASM_SEGMENT_INFO subsection
+ check for duplicated WASM_SEGMENT_INFO subsections
+ added DataSegments dynarray of record, that will store data segment info
+ check for duplicated data sections
+ read the data count from the data section. Set size of the DataSegments
array, if the data count section hasn't been encountered. Compare the count
with the value from the data count section, in case the data count section
has been encountered, and issue an error, if they differ.
* check that the data count section preceeds the data section and report an error otherwise
+ parse the data section in the wasm object reader
+ verify the segment count when parsing the WASM_SEGMENT_INFO subsection
* moved local vars to avoid bug
* moved another local var to avoid bug
* fill the data in the DataSegments array when parsing the WASM_SEGMENT_INFO subsection
+ read the section content in the wasm object reader
+ check for memory index other than 0 in the wasm object reader and report an error, since that is not supported
+ check and report an error if a passive data segment is encountered by the wasm object reader
* attempt to avoid warning, treated as error, causing CI failure
+ symbol table subsection duplicate check
+ implemented parsing of the symbol table in the wasm object reader
+ wasm object reader: store the symbol table in a dynamic array, so it can be processed later
+ check bounds for SymIndex of SYMTAB_DATA symbols
+ create data symbols in the wasm object reader
+ support local binding when reading data symbols in the internal wasm object reader
+ wasm obj reader: store the parsed import data from the import section in local arrays and structures
+ store in the FuncTypes array the func types, parsed in the function section
+ wasm object reader: range check the symbol indices of SYMTAB_FUNCTION entries
+ partially implemented the creation of symbols for SYMTAB_FUNCTION entries
+ include mod name in symbols
* The "Val" intrinsic is now simplified for string constants akin to a
pure function.
* Fixed bug where a call node's intrinsic code
wasn't copied over during "DoGetCopy"
* Fixed bug where the original index of a call
para wasn't copied over during "DoGetCopy"
+ wasm object reader: implemented parsing of the global section
+ fully implemented reading the code section
+ check the code entries count in the wasm object reader
+ wasm object reader: create code sections and symbols
+ parse the export table in the wasm internal object reader
+ add oso_keep flag to the code sections that contain an export
+ create exe sections in the wasi internal linker script
+ auto add oso_data and oso_sparse_data when creating a .bss segment on the wasm target
* set MaxMemPos in the wasm internal linker
+ started implementing the reading of relocation sections in the wasm object reader
+ implemented parsing of the relocation section
+ check for supported relocation types, report an error if an unsupported type is found
+ keep track of section indexes. Save the code and data section indexes.
* disallow (for now) relocations for sections other than the code and data sections
+ store the parsed relocation table in an array
+ find the code and data segment of each relocation
+ create relocation objects for R_WASM_FUNCTION_INDEX_LEB relocations in the wasm object reader
+ create relocation objects for R_WASM_TABLE_INDEX_SLEB relocations in the wasm object reader
+ create relocation objects for R_WASM_TABLE_INDEX_I32 relocations in the wasm object reader
+ create relocation objects for R_WASM_MEMORY_ADDR_LEB relocations in the wasm object reader
+ create relocation objects for R_WASM_MEMORY_ADDR_SLEB relocations in the wasm object reader
+ create relocation objects for R_WASM_MEMORY_ADDR_I32 relocations in the wasm object reader
+ create relocation objects for R_WASM_TYPE_INDEX_LEB relocations in the wasm object reader
+ create relocation objects for R_WASM_FUNCTION_OFFSET_I32 relocations in the wasm object reader
* also keep track of captured def (necessary when functions are captured)
* correctly handle managed function results when converting a global or nested function to a function reference
+ added test
* the adjusted nested function needs to access the parent function for the capturer
* only walk the node tree if there are indeed captured symbols to convert
* ensure that nested functions that are assigned to function pointers are considered as captured as well
* keep track which nested function definition the new method has been converted from
* allow a nested function that calls itself can be converted to a function reference
+ added test
LLVM: enforce line information for invoke instructions
Like with call instructions, when generating debug information LLVM requires
line information for invoke instructions that may be inline
+ Extracted the func list maintenance functionality from the WebAssembly object
writer to a new TWasmFuncTypeTable class. This will allow for it to be reused
in the WebAssembly exe writer as well.
* TWasmFuncTypeTable.AddFuncType renamed .AddOrGetFuncType
Try to compute correct page size for wlib call
- removed TWasmObjData.AddFuncType, instead call directly [F]FuncTypes.AddOrGetFuncType
+ initialize TWasmObjData.FFuncTypes in TWasmObjData's constructor
+ added a TWasmFuncTypeTable instance to TWasmExeOutput
* SymbolTable.ObjSym type changed from TObjSymbol to TWasmObjSymbol
+ WebAssembly object reader: create symbols for imports that have the
WASM_SYM_EXPLICIT_NAME flag set. Save the import module and name info inside
a new field TWasmObjSymbol.LinkingData.
+ implemented TWasmExeOutput.GenerateLibraryImports
+ process the module imports and write them to the map file in TWasmExeOutput.AfterUnusedSectionRemoval
+ store the functype in TWasmObjSymbolLinkingData
+ added TWasmFuncType.ToString implementation
+ also write the functype of imported functions in the linker map file
+ WebAssembly internal linker, exe writer: keep track of exe import functions. Add and fill TWasmObjSymbolLinkingData.ExeFunctionIndex
+ added a section array to the wasm exe writer
* converted some helper methods from TWasmObjOutput to global functions, so they can be reused in the exe writer
+ added and implemented TWasmExeOutput.WriteWasmSection
+ initialize TWasmExeOutput.FWasmSections
* WriteWasmBasicType and WriteWasmResultType converted to global functions to allow reuse in the exe writer
* writing of the type wasm object section extracted to a method TWasmFuncTypeTable.WriteTo, so it can be reused in the exe writer
+ generate and write the Type section in the WebAssembly internal exe writer
+ generate the import section in the wasm exe writer
+ WebAssembly exe writer: write the code section
* set TWasmObjSection.MainFuncSymbol in the wasm object reader
* extracted the import preparation to a separate method TWasmExeOutput.PrepareImports
+ write the type indexes correctly
+ added check for the ExeFunctionIndex inside WriteCodeSegments
+ fill the memory section in the wasm exe writer
+ partial implementation of RELOC_FUNCTION_INDEX_LEB relocations in the wasm internal linker
+ write the import function indexes in the linker map file
+ wasm internal linker: write the functions, defined in the current module in the linker map file
* wasm internal linker: use the main symbol (without WASM_SYM_EXPLICIT_NAME,
i.e. not an alias) to define code section names in the wasm object reader.
For example, the section for the INITHEAP function is now called:
.text.n_SYSTEM_$$_INITHEAP
instead of
.text.n__FPC_InitHeap
(which is based on an explicit alias for the function - '_FPC_InitHeap')
+ report an error in case a wasm object file has a code section, without a main symbol
* only set MainFuncSymbol of code sections to the main (non-alias) symbol
+ wasm internal linker: fill ExeFunctionIndex of alias code symbols as well
* produce an internal error, instead of a warning in case of RELOC_FUNCTION_INDEX_LEB pointing to a function with missing ExeFunctionIndex
* refactor: invert if condition and else statement (reducing the nesting level), because then terminates the function. No functional changes.
+ implemented RELOC_TYPE_INDEX_LEB relocations in the wasm internal linker
* wasm internal linker: start the data section at offset 0, as WebAssembly is a Harvard architecture.
+ webassembly internal linker: create separate exe sections for .rodata and .bss
+ WASI internal linker: implemented GetCodeSize, GetDataSize and GetBssSize.
+ write the data section in the wasm internal linker exe writer
+ implemented R_WASM_MEMORY_ADDR_I32 relocations in the wasm internal linker
+ implement R_WASM_TABLE_INDEX_I32 relocations in the wasm internal linker
+ create the Table and Elem sections in the wasm exe writer
+ implemented R_WASM_MEMORY_ADDR_LEB relocations in the wasm internal linker
+ implemented R_WASM_MEMORY_ADDR_SLEB and R_WASM_TABLE_INDEX_SLEB relocations in the wasm internal linker
* wasm internal linker: produce an error if an R_WASM_SECTION_OFFSET_I32 or an
R_WASM_TAG_INDEX_LEB relocations is encountered - these aren't implemented,
and are not required for 'hello, world', so will be done later.
+ wasm internal object reader: process SYMTAB_GLOBAL import entries
+ wasm internal linker: internally define the '__stack_pointer' global symbol
+ also define non-imported SYMTAB_GLOBAL symbols in the wasm internal object reader
+ create relocations for R_WASM_GLOBAL_INDEX_LEB entires in the wasm object reader
* define the __stack_pointer symbol in a different way, so it doesn't crash during linking
* use SizeInt instead of PtrInt for the stack area size (this both matches the declaration in TypInfo as well as enough on 16-bit targets like i8086)
+ wasm internal obj reader: add globals to a '.wasm_globals' object section
* set the size of AT_WASM_GLOBAL symbols to 1
+ wasm internal linker: put all wasm global symbols in separate sections,
called .wasm_globals.n_XXX. This allows section-based smartlinking to work on
global symbols.
* more clean variable initialization
+ implemented R_WASM_GLOBAL_INDEX_LEB relocations in the wasm internal linker
+ generate the global section in the wasm internal linker exe writer
+ write export section in the wasm internal linker exe writer, only the memory is exported for now
+ wasm internal linker: write the exported functions to the export section in the exe writer
* fixed bug in the application of RELOC_GLOBAL_INDEX_LEB fixups in the wasm internal exe writer
+ allocate stack and set the initial value for the stack pointer in the wasm internal exe writer
* start the data at offset 1024 instead of 0, just like the LLVM linker
* wasm internal linker: start the .text section at mempos 0
* wasm internal exe writer: set mempos for code sections to the offset within
the code section. This does not affect the .wasm binary generation, only the
linker map file.
+ added check for whether R_WASM_TABLE_INDEX_I32 relocations always point to a function symbol in the wasm internal object reader
Fix wrong explicit typecast of srsym variable (caught by -CR option)
Add emulation_opt settings for all four mips CPUs
+ fill the correct minimal number of memory pages required in the wasm internal linker
+ increased the default stack size of the WASI platform from 64 KB to 8 MB (like in i386-linux)
+ read debug sections in the wasm internal object reader
* ignore relocation sections for custom sections for now (will be done later), so that we can proceed with the debug info generation in a later phase
+ wasm object reader: allow other sections to be created before the first code section
+ add the debug sections in the WASI internal linker script file
Add string constant values to stringconstn nodes in parse tree output
LLVM: fix missing line debug info for some invokes in specialised functions
Required when the code can be inlined. Fixes compilation with debug info of
system.messaging.pp
Extended RTTI: optimise fetching VMT index
Extended RTTI: fix use of wrong def for the methods table
Fixes LLVM compilation
* increase PPU version due to Extended RTTI related changes
* for some reason my ppu.pas had a version of 18, instead of 20... so now the correct version m(
Add struct field names to subscriptn nodes in parse tree output
+ write debug sections in the wasm internal exe writer
+ wasm internal object reader: pass a TWasmCustomDebugSectionType parameter to ReadDebugSection
+ wasm internal object reader: also read the '.debug_frame' and '.debug_str' sections
+ wasm internal object reader: record section indices for debug sections. Check for duplicated debug sections.
+ wasm internal object reader: support relocations for debug sections
+ support R_WASM_SECTION_OFFSET_I32 relocations in the wasm internal object reader
* wasm internal object reader: validation of the RelocIndex range moved to a single place - in ReadRelocationSection
* wasm internal object reader: removed the warnings in case of missing symbol (this will now create an internal error, instead)
* refactor: changed the type RelocationTable.RelocType to avoid type casts. No functional changes.
* refactor: changed the type of SymbolTable.SymKind to TWasmSymbolType, to avoid type casts. No functional changes.
+ wasm internal object reader: validate that relocations that should point to a SYMTAB_FUNCTION entry, actually point to such entry
+ wasm internal object reader: added range check to the reader of the SymKind field
+ wasm internal object reader: check that relocations that should point to a SYMTAB_DATA symbol, actually point to such symbol
+ wasm internal object reader: check that R_WASM_GLOBAL_INDEX_LEB point to a SYMTAB_GLOBAL symbol
* wasm internal linker: perform R_WASM_SECTION_OFFSET_I32 relocations
* wasm internal linker: set mempos of debug sections to 0
- wasm internal object reader: removed redundant check for R_WASM_TABLE_INDEX_I32 pointing to a SYMTAB_FUNCTION entry (we now do this check earlier)
+ wasm internal linker: implemented R_WASM_FUNCTION_OFFSET_I32 relocations
+ WASI internal linker: add all object sections, starting with '.bss' to the .bss section
+ WASI internal linker: also add .debug_frame and .debug_str sections to the output binary
+ WASI internal linker: simplify linker script generation for the .text, .rodata, .data and .bss sections via the use of ScriptAddGenericSections
* wasm internal linker: fixed the relocation of imported function symbol aliases
* wasm internal linker: skip the element section when reading object files. This fixes linking with object modules, produced by the external assembler.
+ wasm internal object reader: parse the tag section
+ wasm internal object reader: read tag imports
+ wasm internal object reader: store the tags from the tag section in the TagTypes array
+ wasm internal object reader: bounds check the tag type index against the types table
+ wasm internal object reader: read tags from the export section
+ wasm internal object reader: range check event symbols against the tag index space (imports + tag section)
+ wasm internal object reader: create symbols for SYMTAB_EVENT entries in the symbol table
* wasm internal object reader: validate that R_WASM_TAG_INDEX_LEB relocations point to a SYMTAB_EVENT symbol
* wasm internal object reader: convert R_WASM_TAG_INDEX_LEB relocations to relocation objects
* wasm internal linker: treat exception symbols as AB_COMMON
+ WASI internal linker: added the .wasm_tags exe section to the linker script
* wasm internal object reader: handle tag symbol flags properly (support weak and local symbols)
* wasm internal linker: set mempos of the .wasm_tags (and .wasm_globals) section to 0
+ wasm internal linker: create the tag section (if not empty)
+ wasm internal linker: implemented RELOC_TAG_INDEX_LEB relocations
* wasm internal linker: produce an internal error on unknown relocations
+ enable the WASI internal linker
* fixed internal linker crash if no tags are defined (i.e. no WASM native exceptions used)
LLVM: remove flags used to support older LLVM versions
* search using the real package name instead of the uppercased one so that an as-is cased package will be found as well
* range checking is already performed in pass_typecheck
* ensure that the legacy method table has the correct alignment on platforms that require it (e.g. SPARC64)
* Fix missing escape for dollar sign
+ generate DWARF debug info for WebAssembly locals
do not display the changing assembler note, if the internal and the external assemblers are the same, or there's no internal assembler defined
tabs to spaces cosmetics, no functional change
m68k: add more cases, where TST instructions can beoptimized away, because the previous instruction already sets all the required flags
m68k: refactored the optimizer to avoid direct asml management where possible, and use standard functions instead
* fixed bug that caused 'c in ['a'..'z']' to fail on the WebAssembly target, when code is compiled with {$packset 1}
Avoid range check error in AddNormalStringDef
* Vectors of string constants are now simplified into ordinal constants
Issue internal error in def type is errordef
- removed the ENABLE_WASM_INTERNAL_LINKER define from the .lpi file
- removed the DEBUG_WASM_GOTO define from the .lpi file
* Fixed issue where Val shortcutting would not compile under 32-bit systems
* several issues with the in_val_x optimization fixed
* print the whole symbol name for hint messages
* fixed bug in the handling of WebAssembly goto
+ support for .debug_loc and .debuc_loclist sections
+ added a zero/unitialized/unknown value to TWasmBasicType: wbt_Unknown
+ introduced TWasmValueStack for tracking the state of the WebAssembly stack. Not used, yet, but will be in the future.
Add MaybeSwap for coffsectionrec records (needed for cross-endian compilation)
Also swap word/dword in case of cross-endian compilation
* fix compilation on 32 bit hosts
* last commit was not complete, fixed
Use writeUInt32LE/writeUInt16LE method to write multi-byte integer in importlib method in t_win unit (as all supported CPUs are little endian)
+ added TWasmControlStack and frame. Not used, yet. Will be used in the future
for WebAssembly stack tracking and validation.
* inverted the indices of TWasmValueStack, so that item 0 is top of stack
* fix
gitlab 0040593: don't check for a static method when assigning a methodpointer to a function reference
+ added test
- the setter for tloadnode.procdef is not used, so remove it so that that tloadnode.setprocdef can be extended
* fix
gitlab 0040594: when assigning a nested function to a function reference don't check for the nested procvars parameter, because nested functions can be treated like anonymous functions here
+ added test
* disable OptPass2Test and OptPass2CMP for now as it seems to result in buggy code
* Added field to identify blocknodes that wrap entire subroutines
Fix writing of low qword of floatx80 real type into 10-byte array on big endian systems
* Fix writing of 'comp' type depending on FPC_COMP_IS_INT64 macro.
* Fix writing of floatx80 on systems with gaps due to alignment requirements.
* Add internal_endian field to tppudumpfile class
* Check that this new field is indeed set, once only, by
header flags.
* Use this flag to extract high and low parts of floatx80
record for soft floatx80 support.
Use reverse_byte to write constant sets in cross-endian configuration
Add writeInt8/writeUInt8 methods to fix some cross-endian generation issues
Use writeint8/writeuint8 methods to avoid cross-endian issues
Support cross-endian compilation for telfobjdata.writereloc method
* Fixed issue where OptPass2CMP and OptPass2TEST didn't drop out on labels etc.
* Fix writereloc for cross-endian compilation
* Fixed issue where TryCmpCMovOpts produced bad
code if the last MOV got moved.
* New Boolean "SetAndTest" utility function
* x86: New "STC/CLC; MOV" peephole optimisation
* inserting $result into the symtables should never trigger a duplicate symbol error, resolves
gitlab 0040608
Swap real constant in internal assembler
* x86: New "Jcc; CLC/STC; .Lbl" optimisation
* Fixed internal error 2022041701 number clash (LLVM changed to 2022041730)
* x86: Separated out Jcc; STC/CLC optimisation and added additional peephole optimisations
* x86: Additional STC/CLC; J(N)C deterministic jump optimisation
* x86: STC/CLC optimisations can now handle multiple Jcc instructions
* x86: New "aoc_DoPass2JccOpts" option to catch branch and
STC/CLC optimisations that only manifest in Pass 2
Avoid 'false' warning: Local variable "gap_index" does not seem to be initialized on cycle with -O3 option
* DRY Refactoring: introduce discardppu
* Refactory: remove current_module use from top-level parsing
* Move implementation part to separate routine so we can split tasks later
* Move interface parsing part to separate routine so we can split tasks later
* Split parsing from post-processing, code generation and linking
* Move program/library header parsing to separate routines
* Remove commented variables
* split module creation from parsing start
+ more CPU and FPU flags added
* TWasmControlFrame changed to a record
+ implemented methods in TWasmControlStack: Push, Pop, GetItems, SetItems
+ implemented TWasmValueStack.GetCount
+ implemented TWasmControlStack.GetCount
+ implemented TWasmValidationStacks.PopVal
+ introduced TWasmBasicTypeList
+ introduced TWasmValidationStacks.PopVal(expect)
+ introduced TWasmValidationStacks.PushVals
+ introduced TWasmValidationStacks.PopVals
+ introduced TWasmValidationStacks.PushCtrl
+ introduced TWasmValidationStacks.PopCtrl
+ introduced TWasmValidationStacks.label_types
+ introduced TWasmValidationStacks.Unreachable
* replace/restore_scanner use var in state to make sure the correct scanner is freed
* Make current_scanner a function/procedure to better control lifetime
* use set_current_scanner, add mainscanner
* Remove use of current_module
save/restore state when loading other modules.
+ introduce x86-64 microarchitecture levels for cpu and fpu flags
* Remove freeold from set_current_scanner
* Make tglobalstat a class
* Remove loaded_from in tmodule. The same unit can be loaded from different places
* Split load_ppu for clarity
* Check whether call to deref(impl) is needed during re-resolve (indexes may be -1 if not yet built)
* Introduce task (Single main-level task at the moment, no change in behaviour).
* fixed some issues with the x86-64 instruction versions
* use more of the constants
* fix
gitlab 0040618: apply adjusted patch by Евгений Савин (@jack128a) so that a non-load case expression is loaded into a temp first when converting a single range branch into an if-clause
+ added test
* fix typos in comment, no code changes
* decide more sophisticately if a temp. var is needed for fixing
gitlab 0040618
* extend LeaCallLeaRet2Jmp optimization to work on windows
+ also add x86-64 as cpu type (gcc compatibility)
+ implemented TWasmValidationStacks.Validate for many (but not all, yet) instructions
* x86: Replaced CPU features array with "cpu_x86_64_v1_flags" where possible
* x86: Fixed CPU feature flags for AMD Jaguar and Piledriver
* comment fixed, hint by Maxim Ganetsky
* Introduce state variables, used to construct list of used units
* Return first waiting in usedunitsloaded
* generate init_final table from actual uses clauses
+ implemented support for the local.get, local.set and local.tee instructions in TWasmValidationStacks.Validate
* protect against comparisons of nested types of generics and specializations
* use iscurrentunit only when there isn't a suitable def that the moduleid of the symtables can be compared to
* fix
gitlab 0040621: when checking for visibility of members then always use the genericdefs for specializations for correct scoping
+ added test
* clean up of arrayconstructor_to_set, the stringdef case didn't work for years and is not tested, so it probably is not supposed to be there at all
* complain about turned off support of c style operators only in the parser,
so error recovery is better
* x86-64: Typo fixed in FPU type string array
Avoid wrong typecast by adding check that p1 is an instuction before casting it to taicpu
* Framework for more complex block node simplification
Follow sdas documentation for .ascii limitations by using only printable chars and .byte for others
* New block node optimisation that attempts to
flatten nested blocks (makes labels and later
optimisation more efficient).
+ when calling FPC_THROWFPUEXCEPTION in a sub routine, pi_do_call must be set, fixed for aarch64
+ function needs_check_for_fpu_exceptions to unify fpu exception handling
* Handle finish state separately
* Introduce constwresourcestring - in unicode mode, resource strings are unicode strings, and must be streamed differently
+ set pi_do_call on xtensa as well if we check for fpu exceptions
* cosmetics
* Only perform the block flattening if "forinline" is true or under -O2 and above
+ lazarus project for a loongarch64 compiler
+ set pi_do_call on loongarch64 as well if we check for fpu exceptions
* fix
gitlab 0040634: correctly check visibility for child classes in case of a mixture of specializations and non-specializations
+ added test
* x86: Minor efficiency gains in OptPass1CMP
+ set pi_do_call on RiscV as well if we check for fpu exceptions
* x86: Fixed "Cmp1Jl2Cmp0Jle" and "CmpJe2NegJo" optimisations
being applied incorrectly if another jump follows
* Fix compilation with DEBUG_NODE_XML
* x86: Fixed error in "LeaLea2Lea 1" optimisation
not properly accounting for the first LEA
instruction having a repeated register
+ set pi_do_call on ARM as well if we check for fpu exceptions
* move the checks for strict private and protected into their own nested functions
* use check_strict_private and check_strict_protected in their respective non-strict checks to avoid code duplication
- remove no longer required check as that is now handled by check_strict_private (not to mention that the check had been placed incorrectly anyway...)
* fix
gitlab 0040634 the 2nd: a (strict) protected symbol in a parent class of the owner is supposed to be visible
+ added test
Restrict use of A_MOVE to ufromsize and utosize = OS_INT. (contributed by Jinyang He)
Fix issue
gitlab 0040648
* Fix latex error due to unescaped dollar
* generate specializations only of no error happened so far to prevent further (internal)errors, resolves
gitlab 0040646
Avoid warning about unintialized 'ba' variable
* improve pretty printing of symbols
WPO: handle classes defined in localsymtables
Can happen since the support for anonymous methods
Set ba variable upfront to avoid warning treated as error
+ thlcgobj.location_force_mem now supports LOC_JUMP as well, resolves
gitlab 0040650
* Add Logging of tasks under define
* Properly handle finish state
* allow type = type ... ; syntax only for previously declared types, avoids also internal error for
gitlab 0040566
* fix
gitlab 0040655: apply changes to packrecords, packenum and setalloc using the recordpending*() functions so that they are applied correctly in case of them being used directly after a {$POP}{$PUSH} sequence
+ added test
* Fixed signature of insert_init_final_table
* patch by Rika: Fold repetitive scandir.pas cases, resolves
gitlab 0040660
* don't throw an internalerror in case of an illegal assignment to an open array, resolves
gitlab 0040662
* Force VMT at first position in system.tobject
* ensure that "type SomeName = type reference" is still allowed when function references are disabled
+ added test
Also reset check_valid_var after calling var_para_allowed
Be sure not to add a symbol with empty name as an alias for function return variable
* x86: "StcClcSet(c)2Mov" optimisation now checks to see if the destination register is in use
* fixed fpu_x86_64_v4_flags
+ support a_call_indirect in TWasmValidationStacks.Validate
+ added a second TWasmFuncType parameter to the CALL WebAssembly instruction. It
is not part of the WebAssembly syntax and binary encoding, but it helps
WebAssembly stack tracking and validation.
+ support the CALL instruction in TWasmValidationStacks.Validate
+ introduced TAsmData.RefAsmSymbolByClass - similar to RefAsmSymbol, but allows
to create a subclass of TAsmSymbol even in the case of external symbol.
+ introduced TAsmData.WeakRefAsmSymbolByClass
+ introduced TWasmGlobalAsmSymbol subclass of TAsmSymbol. Use it for all
AT_WASM_GLOBAL symbols. This allows in the future to add extra data to the
TWasmGlobalAsmSymbol, such as the WebAssembly global type, which will aid in
WebAssembly validation and stack tracking.
+ added the WasmBasicType to TWasmGlobalAsmSymbol. This will help WebAssembly
validation and stack tracking.
* Create and correctly typed variable for fieldsym instead of using typecasts
+ support the global.get and global.set instructions in TWasmValidationStacks.Validate
+ support if,block,loop,else,end_if,end_block,end_loop in TWasmValidationStacks.Validate
+ support the BR and BR_IF instructions in TWasmValidationStacks.Validate
* Allow use of attributes on fields and properties in records and classes
+ perform WebAssembly validation, if the compiler is compiled with the
DEBUG_WASM_VALIDATION defined
Take care about endianess in arm eabi attribute section
Take care about endianess in arm instruction binary code generator
Add ogmacho unit loading unless NOOGMACHO macro is defined
* fixed bug in thlcgwasm.a_op_reg_reg_reg_checkoverflow that used to generate
code that fails WebAssembly validation
+ support the native exception instructions in TWasmValidationStacks.Validate
* stack checking is actually 'S'
* arm/a64: Fixed bug where shifter operand was not preserved in AND/CMP -> TST optimisation
* Add codeaddress to extended RTTI for static methods
* Attributes must be assigned only to elements before the first colon
* Flags specific to TVecNode have been moved to their own field
* Clarity over blocknode and VMT flags. nf_usercode_entry doesn't need to be cascaded in "firstpass" as TBlockNode.Simplify already does this
* Flags specific to TAddNode have been moved to their own field
* Flags specific to TModDivNode have been moved to their own field
* Flags specific to TAsmNode have been moved to their own field
* Flags specific to TAssignmentNode have been moved to their own field
* Flags specific to TArrayConstructorNode have been moved to their own field
* Flags specific to TDerefNode have been moved to their own field
* Flags specific to TInlineNode have been moved to their own field
* Reduced the number of expensive calls to "GetUserCode" in DFA
* Atributes for class/record methods
* increase ppu long version as the format changed
* nf_pass1_done, nf_error, nf_processing and nf_do_not_execute
have been moved to a new "transientflags" node field that
isn't stored in PPU files
* patch by Rika: Don’t pretend optinfo^.index can be aword(−1), resolves
gitlab 0040405
* arm/a64: Bug fix where instructions optimised into "mov r0,r0"
could leave registers undefined in some circumstances
* Indentation and casing changes
* patch by Sergey Larin: Compile dynarr := nil (and, preferably, SetLength(dynarr, 0)) as fpc_dynarray_clear, resolves
gitlab 0040309
* a64: Several secondary peephole optimizations that clean up CSEL instructions
* fix compilation with 3.2.2 rtl
* fix building of llvm compiler after node flag refactoring
Fix post_load_or_compile tppumodule method for SHORT_ON_FILE_HANDLES code by adding from_module parameter
Fixes compilation of text mode IDE for go32v2 target.
Fix compilation with -dEXTDEBUG
Fix compilation with -dDEBUG_DEVIRT
* Initialize firstwaiting, after remark by Pierre
* optimize also -(x+1) and -(1+x) into not(x)
* Handle rename of module during parsing, rebuild hash list. Fixes broken test tb0406.pas
* Fix tgeneric91, need to postpone some additional generic procedures
* x86: CMOVcc/Jcc pairs are now changed to MOV/Jcc if the register is not used if the jump doesn't branch
* x86: Improvement to CMOVcc/Jcc optimisation that attempts to remove temporary registers storing constants
* x86: Additional optimisation in OptPass2MOV to help with sub-optimal MOV/CMP/MOV triplets (and a minor refactor).
* Only consume semicolon after uses clause when units have been connected. Fixes remaining failing tests
* set packenum and setalloc to defined values when changing mode, resolves
gitlab 0040056
* transform -1-x into not(x)
* optimize additions of empty sets away if possible, part of
gitlab 0040384
* x86: New Op/TEST optimisation that rearranges register usage for the most efficient execution
Be sure not to consume semicolon after _USES twice
* Added missing "override" directive for XML node dump routine on TDerefNode
* Adjustment to "(v>=x) and (v<=y)" so it also optimises its inverse: "(vy)"
* Added support for 64-bit min/max intrinsics
* a64: Fixed bug where unsigned min/max inlines used a signed comparison
* x86: Min/max intrinsic support
* x86: Added new OptPass1CMOVcc peephole optimisation routine to dust up min/max code
* i8086: Local variables unused in "second_AndOrXorShiftRot_assign" on i8086 are now not defined on this platform
* overflow check abs(...) for x86
* Min/max intrinsics now simplify deterministic results
* more overflow checking for abs(...)
* overflow checking for ti386inlinenode.second_abs_long
FFix compilation of compiler with -dTest_Double_checksum
* use destination location instead of a temp when constructing sets, resolves
gitlab 0040384
+ optimize s:=s+[e] into include(s,e)
* a64: New B -> RET peephole optimisation
* write correct type name in error message
Ensure register to be eliminated is de-allocated before applying optimization LdsMov2Lds.
* AArch64: avoid false overflow error in case of -2^63+0
* AArch64: overflow checking for abs
* tabs adapted: also abs(longint) must overflow check on 64 bit platforms
* avoid to generate bts/r with memory operand
+ thlcgx86.a_bit_set_reg_reg
* thlcgobj.a_load_regconst_subsetref_intern uses a_bit_set_reg_reg if applicable
Fix generation of i8086 CPU code, as BTR/BTS instructions require at least 386 CPU
* proper fix for 9056ab80257b71fb8bcdf90be2f71e2fbbf912b9
Add $EMUL also for sparc CPU GNU linker call on solaris OS
Add -32/-64 for sparc GNU assembler calls
* use bit_set_reg_reg also to clear single bits in thlcgobj.a_load_regconst_subsetref_intern
* Fix access violation: module can be reset while loading dependent units. Fixes issue
gitlab 0040705
* avoid CMPs with constants outside the range of signed 32 bit values
* fix simplication of max(double,double) with both values being constants
* fix i386 building after fb3c4ff75be75c367f4f4d505563475ef7accdb5
* compilation with -dEXTDEBUG fixed
+ 8086: overflow checking for abs()
+ arm: internal abs()
+ arm: overflow checking for abs(...)
+ generic implementation of abs()
* overflow checking for generic abs()
* fix overflow checking on arm for 64 bit signed numbers
* arm uses generic abs()
* all CPUs use now internal abs() so overflow checking is possible
+ added overflow checking to generic abs()
* i386 uses generic x86 abs(long/int64) code now
* compilation on 64 bit targets fixed
+ abs(long/int64): overflow checking for xtensa implemented
* don't remove align directives before case jump tables (they have the type alt_addr)
+ comment to explain last commit
Fixed missing section for Raspberry Pi Pico
* fix min/max intrinsics on x86_64 for non constant/reference/register locations, resolves
gitlab 0040721
* sparc: overflow support for 64 bit operations
+ avr: overflow checking for abs, together with the other recent abs-related commits, resolves
gitlab 0040694
* another fix for min/max intrinsics on x86_64 for non constant/reference/register locations, resolves
gitlab 0040724
Increase default stack size to 8Mb for i386 and sparc solaris systems
Use correct check for unsigned size in a_op64_{const/reg}_reg_reg_checkoverflow methods
* arm / a64: Extended the AND; CMP -> ANDS family of optimisations to catch BIC as well as AND
* a64: ARMv8.7 through ARMv8.9 have been added as AArch64 CPU types, along with support for the CSSC extension.
* a64: Added DOTPROD and PAUTH support flags to relevant instruction sets (v8.4+ and v8.3+ respectively)
* a64: Added "ABS" and "CTZ" mnemonics (CSSC instructions)
* fix internalerror 200502052 with certain min/max optimizations on x86-64, resolves
gitlab 0040730
+ introduced cgbase.topcg2str and topcmp2str for converting TOpCg and TOpCmp to strings (useful for debug logging, etc)
* second_abs: don't supply a separate 64 bit code path for high level cpu targets
* ensure that left and right have a result type set in tx86addnode.pass_1, resolves
gitlab 0040727
* fix
gitlab 0040708: when creating the sub-arraydefs for comma separated arrays, ensure that the new sub array also has the generic related information set up correctly
+ added test
* check that the corresponding genericdef of the adjusted def is indeed valid
* extend read_anon_type() so that it can take a genericdef as well
* fix
gitlab 0040721: correctly set up the generic defs when parsing fields, especially important when dealing with anonymous fields
+ added tests
* Fix
gitlab 0040716: only add helpers if the type doesn't belong to the current object/class/record hierarchy
+ added test
* fix
gitlab 0040725: pass along whole array constructor to the Insert() so that it's converted with the correct checks
+ added test
+ propagate pointer constants
+ also fold nil nodes when used as pointer constants
* run constant propagation multiple times if needed and if slow optimizations are turned on
+ propagate also widechar/pointer constants
+ fold also constant pointer operations on nil nodes
+ fold also divisons involving pointer constants (those nodes are internally generated only)
- AND and DeepMovOpt optimisations upgraded.
- OR and extension optimisations upgraded.
- Const and ref merge optimisations upgraded.
Fix compilation of i8086/n8086add.pas unit after introduction of get_int_value function
* x86-64: Bug fix where RIP-relative references were made absolute in minmax optimisations by mistake.
* optimize x < length(arr) and x >= length(arr) as proposed in
gitlab 0040292
- 32-to-64-bit zero extension optimisations upgraded.
* x86: New reference support methods to detect modification
- Mov2Nop 5a and Mov2Nop 5b optimisations upgraded.
* x86: CheckMovMov2MovMov2 now sets "Force New Iteration" if it optimises
- MovLea2Add optimisation upgraded.
- MovOp2Op optimisation upgraded.
* optimize x >= length(...) also if the operands are swapped
* x86: Bug fix in OptPass1MOV long-range optimisations where
the wrong register was checked to see if had changed.
* do not limit the number of interfaces per class, resolves
gitlab 0040268
* workaround unsupported -march=...+pauth for some assembler/clang versions
* avoid range check error in TVMTBuilder.intf_optimize_vtbls by early bailing out if a class has no interfaces
* allow swapping of operands for three operand instructions if they are commutative
* i386: Fixed issue where the peephole optimizer entered an infinite loop when building for CPUs older than Pentium II
* disable (type ...), it did never work and there are not test, resolves
gitlab 0040562
* ensure that Insert() of a single element into a dynamic array is typechecked in a way that the user is notified of errors
+ added test
* revert the changes from b0d61558e38f7e9ceb3918dbbaab13bc49496320, as 61397d40ae0c43083844e850d87c60ba74b34d28 fixes it more correctly
* (hopefully) more consistent message when the compiler is stopped during showing the help screen, resolves
gitlab 0039455
* accidently committed debug statement removed
* more debug statments removed
* Calling "internalstatements" now sets the "bnf_strippable" flag on the result
* do_optconstpropagate and do_optdeadstoreelim now set their
"changed" parameter properly and is now an out type.
* Optimisations on calls to said functions
* x86: The ADD/SUB peephole optimisations that combine adjacent operations are now much more careful about the flags
* x86: Arithmetic combination optimisations are now much more careful about the flags being in use
* genlinearlist and genlinearcmplist for case blocks now allocate the flags properly
Force usage of ld.lld for x86_64-openbsd system, because ld.bfd generates invalid executable which SIGSEGV at exit
Do not set USEINLINE macro if DISABLE_INLINE macro is set
* x86: Improved "Test2Bt" peephole optimisation
* Block nodes are now marked as strippable when created from "begin" statements
* Bug fix where copied block nodes didn't inherit the original's flags
* Inc/Dec nodes converted to Add/Sub now remove
the "nf_modify" flag from the destination so
constant propagation works more efficiently.
* Correct location of new error message
* Replace object with record where possible
* Blocks of statements are now pruned (within reason) if a raise, exit, break, continue or goto node is found
* Fix creating thunk class when inherited interfaces are used
* hlgcodegen needed when creating module info (fixes AV)
* remove do_compile, clearer flow when loading ppu/pas files
* Wasm: generator for invoke helper now handles overloaded methods in interfaces
* Emit better error when not able to load auto units
+ store pic references in registers if possible
+ do do_consttovar optimization on i386 as well
* allow sp_generic_dummysym for procsyms even if there are no generic overloads
* fix
gitlab 0040764: declare procsyms of a class/object also as sp_generic_dummysym if a symbol in a parent class has it set so that the parser will treat it as a potential generic
+ added test
m68k-palmos: do not try to write section attributes, they're not really useful, and lead to assembler warnings
+ enable cs_opt_consts on arm as well
+ cs_opt_consts for sparc
* Added new node utility function to search for nodes of a specific type in a node tree
* Node-stripping optimisation in "TBlockNode.simplify" now uses "has_child_of_type" to determine stop point
* "no_exit_statement_in_block" replaced with "not has_child_of_type(..., [exitn])"
* "checkcontinue" replaced with "has_child_of_type(..., [continuen])"
* proper alignment information for constant addresses stored in registers
Make use of CPUX86_HINT_BSX_DEST_UNCHANGED_ON_ZF_1 in Bsf*/Bsr*.
+ cs_opt_consts for sparc64
Simplify constexp.pas and fix certain edge cases.
High(uint64) - 2 - High(uint64) now gives correct −2.
* arm / a64: Factored out common conditional checks in "OptPass1UXTB",
"OptPass1SXTB", "OptPass1UXTH" and "OptPass1SXTH" to
improve performance.
* arm / a64: New optimisation for removing the number of necessary S/UXTB/H instructions
Do not set default target to system_sparc64_solaris on solaris OS for sparc64 compiler as this target is not yet supported
* throw an error if varargs is used without appropriate calling conventions, resolves
gitlab 0040342
* unified g_concatcopy_move
+ CPUX86_HINT_FAST_SHORT_REP_MOVS
* use FPC_MOVE instead of rep movs if possible, partially fixes
gitlab 0040785
Extend riscv32-freertos functionality for esp32c3
Fix exclusion of ogelf unit using $ifndef NOOGELF
Add -WP option to help for ppcrossrv32
Add insert_init_final_table method
* reorganize Tcgx86.g_concatcopy
Group linker scripts and search paths
Add support for esp-idf v4.4
* handle complexer references in tcg8086.a_loadaddr_ref_cgpara properly
Move .data with fpc specific information to outside normal memory range.
Do not pass esp32c3.rom.newlib-time.ld to the linker, it causes the ROM version of _isatty_r to be linked instead of the newlib library version.
* factor out tcgx86.getcopymode
* x86: Minor change to lineinfo in "MovAdd2Lea" so debugging is more logical
* oc_blue properly named as noted by Don Siders
* Stripped down and refactored TAsmNode XML node dumps
for better platform-specific implementations.
+ CPUX86_HINT_BSX_DEST_UNCHANGED_ON_ZF_1
m68k: also allow TST from before Sxx instructions with explicit .b size to be optimized away
m68k: try to fold two consecutive AND instructions into one. This usually happens when a zero extension is followed by another AND.
m68k-palmos: further fixes to assembly section. also actually use aout, as we have aout binutils for palmos
Initial support for esp32-c6-s2-s3. Support for idf versions 5.0.6 and 5.2.1
+ check for tf_init_final_units_by_calls in trv32nodeutils.insert_init_final_table
+ do do_consttovar on RiscV
* do no generated debug comment in assembler output of RiscV if not requested
* a64: win64 implementation of jump table now
uses 64-bit absolute references.
* x86: Reimplemented TAsmNode XML dumping using new framework
* arm / a64: TAsmNode debugging info is now output for ARM and AArch64
Make idfpath and idf_version macros available as replacement vars in fpc.cfg
Add -Ff to firstpass options
* patch by Marģers: patch to enable ENTER asm instruction
+ test
* patch by Marģers
- Rename 3DNow instruction (fixed long lasting typo in mnemonic). PMULHRWA --> PMULHRW
- Add vpclmullqlqdq, vpclmulhqlqdq, vpclmullqhqdq, vpclmulhqhqdq.
- Fix "typo" for SHA1MSG2
* patch by Marģers to bump version
* correct change information for some instructions where the change
information cannot be modelled in x86ins.dat
* forgotten part of last commit
+ set CPUX86_HINT_BSX_DEST_UNCHANGED_ON_ZF_1 for suitable CPUs
+ more change information
* missing AVX-2 change information fixed
* fix
gitlab 0040563: apply slightly adjusted patch by byte bites to use fixed range of 1..Length(str) for for-in loops iterating over ShortStrings
+ added test
* load 2 on x86 stack by fld1/fadd, if pic code is generated. It is more efficient as two memory accesses are saved.
* fold the MIPS tabitype into tabi as the former wasn't really used or hooked up anyway; this way the ABI can be set using -Ca
* also optimize loading of -1.0
* use fld1/fchs regardless of pic
* allow the COMDAT selection to be 0 in which case we'll simply assume that we don't have a COMDAT section (but we'll nevertheless look up a potentially associative section)
* the COMDAT record contains the section number which is off-by-one to the section index
* move setup of secrec outside of the if-statement as it's the same for both cases
* exact-match COMDAT sections are already supported since tdynamicarray.equal() has been implemented a couple of yours ago, so allow them
* small fix of change information
Remove compiler/msgtxt.inc and compiler/msgidx.inc from tracked file list
Add missing information about -T option for embedded and iphonesim target OS for aarch64 compiler help using -h option
Respect alphabetical order in -T listing for aarch64 compiler
+ more change information
Avoid unnecessary call when length(s) is zero, which avoids range check error
* don't throw an internal error if a procedure is passed to a const formal parameter, resolves
gitlab 0040817
* bail out early in tcgaarch64.make_simple_ref if possible
* Properly reset state when (re)compiling, by Artem Izmaylov. Fixes issue
gitlab 0040825
* (lsighly, added safety check) patch by Евгений Савин, resolves
gitlab 0040784
+ initial compiler support for WebAssembly resources. Requires WebAssembly
support in the fpcres utility, which is not implemented, yet.
* changed the resource object extension for the WASI platform to .or (similar to Linux)
+ WASI internal linker: add the 'fpc.resources' and 'fpc.reshandles' sections as well
+ wasi internal linker: also write the fpc.resources section to the file
+ wasm internal linker optimization: write only the non-empty data sections to
the resulting .wasm file (the 'fpc.resources' section specifically can be
empty, if the binary doesn't use resources)
+ wasm internal linker: count the 'fpc.resources' section towards the binary
data size
+ wasm internal linker: count the 'fpc.reshandles' section towards the bss size
of the binary
* split the sections strings into groups and add comments about the importance
of the section order and grouping. No functional changes.
* wasi internal linker: fixed crashes introduced by previous commit in
GetDataSize and GetBssSize
* fixed another crash in the wasi internal linker, caused by missing resource section
* change information updates
* more change information updates
* Properly release procdefs. Patch by Evgenij Savin, fixes issue
gitlab 0040844
+ add missing instructions
* x86-64: Workaround to permit CPU types in command line with dashes in names (e.g. X86-64-V3)
* ensure register size is set properly by AndSxt2And
+ introduced WebAssembly helper is_atomic_op
* fail with an internal compiler error in case an atomic WebAssembly instruction
is generated, while WebAssembly multithreading is disabled
* TARMAsmOptimizer.USxtOp2Op sets register size if needed
const array - reducing unnecessary data copying
Immediately set the capacity
Immediately set the capacity
* set operand size properly for STX*
Partial revert "Immediately set the capacity"
(capacity assignments of type TFPHashObjectList)
+ started working on a WebAssembly inline assembler reader. Not ready, yet, just
includes a basic tokenizer for now.
* fixed some WebAssembly instruction names in the wasm_op2str array
* Patch by Evgenii Savin to avoid IE 2010021502 when calling generic from other generic. Fixes issue
gitlab 0040770
+ WebAssembly inline assembler instruction parsing work in progress
+ added else clause to silence warning, treated as error in CI
Use IndexQWord_SSE41 directly if -Cp RTL compiled with supports SSE 4.1.
* Do not free used units during reset, they can be in use during load cycle. Fixes issue
gitlab 0040852
+ parse the instructions with integer parameter i32.const and i64.const in twasmreader.HandlePlainInstruction
* changed twasmreader.HandlePlainInstruction to return an instruction
* Need IFDEF, compiler stops "with unreachable code"
+ support the f32.const and f64.const instructions in twasmreader.HandlePlainInstruction
+ recognize the memory access instructions with an optional memarg operand (not
parsed, yet) in twasmreader.HandlePlainInstruction
+ handle the local and global variable instructions with a constant integer
parameter in twasmreader.HandlePlainInstruction
+ insert plain instructions and parse nested instructions in twasmreader.HandleFoldedInstruction
+ call ConcatInstruction for plain instructions in twasmreader.HandleInstruction
* started implementing twasmreader.HandleBlockInstruction
+ actually enable the parsing of WebAssembly inline asm instructions
+ set result.ops in twasmreader.HandlePlainInstruction
+ respect the nostackframe directive in WebAssembly inline asm routines
* don't do anything in postprocess_code for WebAssembly inline asm routines
* don't create block..end_block around WebAssembly inline asm routines
* make warning on unsupported esp-idf version a warning string so it can be translated
* Do not generate RTTI for generic methods (delphi compatible)
* Inherit extended RTTI settings from parent object
* handle adress registers properly in tcg64f68k.a_op64_reg_ref
* write dependent rtti for non-published in case of extended RTTI
* WebAssembly temp gen: introduced localsfirsttemp and localslasttemp, use these
for the locals temps indices, instead of firsttemp and lasttemp, which refer
to the temps on the linear stack
+ support OPR_FLOATCONSTANT in TInstruction.ConcatInstruction
+ allow referencing '$__stack_pointer' in WebAssembly inline asm as argument to
the global.get and global.set instructions. This will be used in the future to
implement the thread start routine in inline asm.
* Do not try to export symbol if an error occurred, avoid internal error. Fixes issue
gitlab 0040858
+ support the call instruction in the WebAssembly inline asm
* fixed the WebAssembly inline asm call instruction with the internal assembler writer
* fixed WebAssembly inline asm parsing bug for the global.get/global.set ID instruction
- removed debug printing from the WebAssembly inline assembler reader
+ support the atomic instructions in the WebAssembly inline asm reader
+ allow referencing TLS_SIZE_SYM, TLS_ALIGN_SYM and TLS_BASE_SYM from WebAssembly inline asm
* Some minor rewordings as per 39349
* x86: Fixed an issue where invalid typecast errors would be raised in the peephole optimizer under -CriotR
* Do not include class and array properties in RTTI
+ riscv32: trv32shlshrnode.second_64bit
+ apply OptPass1OP also to SRL/SLL
* fix commit
+ S*LI x,x,0 to nop optimization
compiles cube.pas example
* better zero extension for Risc-V32
* apply OptPass1OP to more instructions
+ Risc-V 32: optimize QWord(1) shl ...
DynArrays works
because of InitHeap3, malloc3 and free3 functions from the psy-q-sdk
+ Risc-V 32: apply OptPass1OP also on ADD
* Risc-V: use OptPass1OP more
Remap .data with fpc specific information to outside normal memory range.
* factor out TRVCpuAsmOptimizer.OptPass1Add
+ show a message and automatically switch to external linking if WebAssembly multithreading is enabled
* WebAssembly: allow specifying the initial and max memory size via the $M
directive
+ Risc-V 32: tcpuparamanager.get_saved_registers_fpu
* WebAssembly threads: use the stack size, specified for the main thread (via
the $M directive, or the '-Cs' compiler option) as the default stack size for
other spawned threads
+ Risc-V 32: tcpuparamanager.get_saved_registers_int
+ Risc-V: apply OptPass1OP to more operations
+ WASI: enable the generic stack checking
+ Risc-V 64: tcpuparamanager.get_saved_registers_int and tcpuparamanager.get_saved_registers_fpu
* Risc-V 32 has also a GC variant
+ enable WebAssembly threads with the internal linker (which still doesn't work
with threads) if FPC is compiled with the FPC_WASM_THREADS_INTERNAL_LINKER
define
+ enable FPC_WASM_THREADS_INTERNAL_LINKER (not stable, yet) in ppcwasm32.lpi
* WebAssembly threads internal linker: fix validation of R_WASM_GLOBAL_INDEX_LEB relocations in modules that support threads
* WebAssembly threads internal linker: declare the __tls_base, __tls_size and
__tls_align symbols in the internal linker script if threads are enabled
* WebAssembly threads internal linker: declare the symbol __wasm_init_tls in the
.text section (function will be generated later by the linker)
* WebAssembly threads internal linker: add the .tbss section to the linker
script in case threads are enabled
+ WebAssembly threads internal linker: create the __wasm_init_tls symbol's
special WebAssembly properties, such as FuncType
+ WebAssembly threads internal linker: debug print threadvar relocations,
instead of stopping with an internal error
* WebAssembly threads internal linker: mark the __tls_base, __tls_size and __tls_align symbols as WebAssembly globals
* WebAssembly threads internal linker: import WASM_SYM_TLS symbols as AT_TLS, instead of AT_DATA
* improve Risv-V optimizer
* WebAssembly threads internal linker: set MemPos for data sections correctly
when threads are enabled (take into account that the first data section with
threads enabled is .tbss, instead of .rodata)
+ WebAssembly threads internal linker: create a global symbol for all AT_TLS data symbols
* WebAssembly threads internal linker: set objsection properly for global
symbols, created for AT_TLS entries
* WebAssembly threads internal linker: create double relocation entries for
AT_TLS entries: one points to the AT_TLS entry (the data segment), the other
points to the WebAssembly global, holding that address. This causes the
smartlinking optimization to keep both the AT_TLS entry in the data segment,
as well as the WebAssembly global.
* WebAssembly threads internal linker: ignore RELOC_GLOBAL_INDEX_LEB
relocations, pointing to AT_TLS entries, because the actual relocation is done
by another relocation, overlaid on top of this one, pointing to a WebAssembly
global. The reason we use two relocations, is to cause the smartlinker to keep
both the AT_TLS symbol, thus reserving data space in linear memory for the
threadvar, as well as the WebAssembly global variable, used for holding the
address of the threadvar.
+ WebAssembly threads internal linker: introduced TWasmExeOutput.GenerateCode_InitTls (not ready, yet, just writes some dummy data)
* WebAssembly threads internal linker: set the global type of threadvar globals to wbt_i32
* WebAssembly threads internal linker: set MainFuncSymbol of the section of threadvar globals
* WebAssembly threads internal linker: starting working on TWasmExeOutput.SetThreadVarGlobalsInitValues
* WebAssembly threads: don't do anything in TWasmExeOutput.SetThreadVarGlobalsInitValues
and TWasmExeOutput.GenerateCode_InitTls if threads are disabled
* WebAssembly threads internal linker: introduced TWasmObjSymbol.TlsDataSym
* WebAssembly threads internal linker: set initial values for threadvar globals
* WebAssembly threads internal linker: implemented the actual code generation in TWasmExeOutput.GenerateCode_InitTls
* WebAssembly threads internal linker: set threadvar globals as mutable
* WebAssembly threads internal linker: set initial values for __tls_size, __tls_align and __tls_base
* WebAssembly threads internal linker: use imported and shared memory if multithreading is enabled
* WebAssembly threads internal linker: create a startup function for
initializing shared memory (dummy for now)
+ WebAssembly threads internal linker: partial implementation of TWasmExeOutput.GenerateCode_InitSharedMemory
* WebAssembly threads internal linker: generate passive data segments, when multithreading is on
* WebAssembly internal linker: moved the DataSections const array from local to
the method writeData to local to the class. No functional changes.
* WebAssembly threads internal linker: implement memory initialization in TWasmExeOutput.GenerateCode_InitSharedMemory
* WebAssembly threads internal linker: generate data.drop instructions in
TWasmExeOutput.GenerateCode_InitSharedMemory. This drops the passive memory
segments, after the memory has been initialized.
* WebAssembly threads internal linker: use WriteUleb instead of WriteUleb5 in
TWasmExeOutput.GenerateCode_InitTls and TWasmExeOutput.GenerateCode_InitSharedMemory.
This generates equivalent, but shorter code.
* WebAssembly threads internal linker: micro optimization in
TWasmExeOutput.GenerateCode_InitTls - skip generating instructions that add
zero
* WebAssembly threads internal linker: use signed LEB when needed in TWasmExeOutput.GenerateCode_InitTls and TWasmExeOutput.GenerateCode_InitSharedMemory
+ enable the WebAssembly internal linker with multithreading
* WebAssembly internal linker: add the .tbss section size to the result of GetBssSize
* WebAssembly internal linker: reduced exe section alignment to 16 bytes
+ Risc-V: instructions of B extension
+ Risc-V: make use of zext.h if available
+ WebAssembly internal linker: take into account the min heap size (specified
with the $M directive), when determining FMinMemoryPages
* WebAssembly internal linker: the PageSize constant, which was repeated twice,
moved to the class level and renamed WasmPageSize. No functional changes.
* Risc-V: make use of sext.h instruction if available
Fix compilation with -dDEBUG_PPU
Rename conditional: INTFPPU => DEBUG_GENERATE_INTERFACE_PPU
* corrected alignment for Risc-V on Linux
* FCVT.W.D returns only a 32 bit int
* get rid of WebAssembly constant DefaultMaxMemoryForThreads, because it was
repeated twice. Instead, set maxheapsize correctly with the default value in
init_parser.
* increased the default max memory for WebAssembly threads to 256 MiB
* WebAssembly threads default maxheapsize constant changed to more readable form - 256*1024*1024 instead of 268435456
* generic second_addordinal can handle swapped nodes
* WebAssembly internal linker: allow specifying the max memory size also for
binaries that don't use threads and shared memory. Unlike the shared memory
case, in this case the max memory limit is optional.
+ introduced method tscannerfile.readval64, similar to readval, but returns an int64
+ WebAssembly: allow specifying heapsize and maxheapsize larger than 2GiB
(WebAssembly has a 32-bit address space, so there's still a 4GiB limit)
* ignore the '-gl' parameter on WebAssembly, since it's impossible to implement
this feature on this target. WebAssembly is a Harvard architecture and allows
no way for inspecting code addresses in stack traces from within the program
itself. Maybe a future extension to the WebAssembly spec would allow that, but
currently, it's not possible. The '-gl' option is ignored (producing only a
warning, instead of a fatal error), because not having line info should not be
fatal for most programs. It also reduces the number of test failures, since
many tests compile with '-gl', but don't actually require the line info, it's
just there for debugging purposes.
* throw an error in iso/extended pascal mode if enum types are passed to writeln, resolves
gitlab 0040896
* fix bug in thlcgwasm.a_op_reg_reg_reg_checkoverflow when either src1 or src2
is the same as dst
* WebAssembly: fixed overflow checking for unsigned subtraction
* WebAssembly: changed the generated code in a_op_reg_reg_reg_checkoverflow to
avoid using a label
+ WebAssembly: check for exceptions after call of fpc_rangeerror in branchful
exceptions mode. This fixes catching of ERangeError exceptions when using
SysUtils and runtime errors are converted to exceptions.
- disallow enabling regvars for WebAssembly, because it's not supported, yet
* WebAssembly: fixed crash when attempting to generate a functype directive for
a generic function
* estimate complexity of ordconst node better on RiscV
+ AArch64: apply OptPass1FData also to FCSEL
* armv7 should a synonyme for arm7a
+ apply OptPass1FData on FRINT*
Remove the rest of the VER3_0 conditionals.
Exclude AW flags for sec_fpc data for embedded and freertos targets.
+ WebAssembly external asm writer: workaround for the 'missing functype' error,
produced by LLVM-MC versions 13 and above
+ pass '--no-type-check' to llvm-mc-13, because its type checking is broken
+ add explicit support for LLVM-MC versions 15..18
* WebAssembly code generator: don't emit a return instruction at the end of the
function, because it's redundant
+ disable the WebAssembly type checker for all LLVM-MC versions since version 13
+ emit a size directive for the internal dynarray const label. This fixes
WebAssembly dynarray consts with the llvm-mc external asm.
- don't generate .size directives for function symbols on WebAssembly, to avoid
warnings from the external assembler
+ indicate which LLVM-MC versions are broken in the compiler help screen
- WebAssembly internal object writer is no longer experimental
* WebAssembly wabt assembler id as_wasm32_wabt renamed as_wasm32_wasa
* WebAssembly WABT assembler ID changed to WASA
* as_wasm_wabt_info renamed as_wasm_wasa_info
* TWabtTextAssembler class renamed TWasaTextAssembler
* unit agwat renamed agwasa
* renamed the wabt assembler to wasa in the compiler help screen as well
+ added an optional nil pointer checking for WebAssembly (similar to
PowerPC-AIX), that can be activated via the -CN option
+ added -CN to the help screen of the WebAssembly compiler as well
+ added several missing targets to the help screen for the -P compiler option
* WebAssembly internal object writer: generate the symbol table after the
section numbers have been calculated. This is preparation for exporting
symbols from debug sections, which will be implemented in the future. No
functional changes.
+ WebAssembly object writer: record the custom section index for debug sections
in a new field TWasmObjSection.CustomSectionIdx
+ WebAssembly internal assembler and linker: support exporting symbols from
debug sections, via a FPC-specific extension. Unfortunately, this is not
supported by the LLVM external assembler and linker.
* fix warning (second attempt :) )
* Added missing i386-win32 target selection
* More efficient condition checks for "tnodeutils.has_init_list"
"tnodeutils.has_init_list" is now static
* generate debuginfo for WebAssembly threadvars like for normal vars, when
WebAssembly threads are turned off
+ WebAssembly DWARF debug info: generate DW_AT_frame_base entries for functions
+ WebAssembly internal linker: support data relocations to threadvars, resolve
them as relative values to the beginning of the TLS section. Will be used for
generating debug info for threadvars.
+ support writing R_WASM_GLOBAL_INDEX_I32 relocations in the WebAssembly internal object writer
+ generate proper reference to the TLS_BASE_SYM global in the WebAssembly debug info for threadvars
+ WebAssembly internal linker: support the R_WASM_GLOBAL_INDEX_I32 relocation,
used for threadvar debug info, among another possible uses.
+ more relocation types added to the enum TWasmRelocationType
* create a TWasmGlobalAsmSymbol instead of TAsmSymbol when generating debug info
for thread vars. This fixes a memory corruption error, when later the compiler
tries to access the extra fields in TWasmGlobalAsmSymbol for the '__tls_base'
symbol.
* fixed blocksize when generating debug info for WebAssembly threadvars
* fix the final entry size in the .debug_aranges table on platforms where the
ALU size differs from the address size (such as WebAssembly 32-bit)
* set procalign and loopalign to 0 for WebAssembly - code alignment is unnecessary, as this is a VM.
* WebAssembly internal object writer: fixed helper function SlebSize()
+ WebAssembly internal object writer: added safety check for catching bugs,
caused by instruction size changes between Pass1 and Pass2
* fix generation of addend for R_WASM_FUNCTION_OFFSET_I32 relocations. This
improves code address accuracy for WebAssembly debug line info information.
* WebAssembly: generate the final bashB opcode of a function via the
end_function instruction, instead of adding it magically in the object writer.
This makes the WebAssembly debug line info more accurate, covering the
end_function instruction as well.
Set DynamicLinker for FreeBSD systems
* use also an FNV hash to shorten interface wrapper names
* use proper value for Fnv64 initialization
* PPU version increased
+ AVR: dummy thlcgcpu.g_intf_wrapper implementation
+ avrsim6 controller type
- WebAssembly: removed tai_local.name, because we don't use it
* WebAssembly: refactored tai_local, so that it is a single directive,
containing multiple locals, instead of creating multiple tai_local directives,
each containing a single local. No functional changes.
* TWasmObjData.DeclareLocal renamed DeclareLocals. No functional changes.
+ WebAssembly: insert a tai_local directive also for assembler functions
* WebAssembly internal assembler writer: generate the function locals header
when assembling the tai_local directive, instead of injecting them manually in
TWasmObjOutput.WriteFunctionCode. This makes function code offsets correct
and avoids the need to manually adjust relocation fixups by adding the locals
header size. It also fixes relative relocations, used in DWARF debug line
info.
+ introduced LINE_RANGE constant in the DWARF debug info generation unit
WebAssembly debug info: use different LINE_BASE and LINE_RANGE on WebAssembly to
improve compatibility with WasmTime's debugger support
* WebAssembly internal linker: don't remove unused code sections if smartlinking
is turned off. This is needed for debugging, because FPC doesn't support debug
info with smartlinking on most platforms, and that includes WebAssembly.
* WebAssembly internal linker: also don't remove unused data sections if
smartlinking is turned off.
* WebAssembly debug info: make wasmtime happy by not emitting line info end
sequences for procedures that lack any debug lines emitted previously
* make UpdateFnv64 closer to the original algorithm as proposed by Gareth
Handle cross-endian case inside TCoffObjData.writereloc method
* revert check for boolean type when handling LOC_FLAG in tcgassignmentnode.pass_generate_code. This makes pas boolean the default,
resolves
gitlab 0040908
+ WebAssembly internal linker: create a name custom section to help debugging
- WebAssembly code generator: removed the g_fingerprint hack, that added 4
useless i64 constants on the stack with random numbers and then drop them. It
was used for primitive debugging, since previously it wasn't possible to
identify the function name. Now we can produce DWARF debug info, as well as a
"names" custom section to give each function a name and most WebAssembly
environments support at least one of the two mechanisms. Therefore the
g_fingerprint hack is no longer necessary.
Handle floatx80 records with gaps also in InternalAssembler
* handle except blocks as normal code block with regard to specialization of generics, resolves
gitlab 0040890
+ added extra values to TWasmNameSubsectionType from the extended name section
proposal and the gc proposal
+ introduced private type TCustomSectionNameMapEntry to class TWasmExeOutput
+ introduced private type TCustomSectionNameMap to class TWasmExeOutput
+ introduced method TWasmExeOutput.AddToNameMap
+ introduced method TWasmExeOutput.AddToGlobalNameMap
+ introduced local method WriteNameMap for writing name maps in the WebAssembly name custom section
+ WebAssembly interal linker: add global names to the name custom section
* WebAssembly internal linker: add the data segment names to the name section
* properly unlink unused type symbols from their defs to avoid
internal errors when generating debug info, resolves
gitlab 0040886
+ add tag names to the WebAssembly name section
* WebAssembly internal linker: refactor writing the name custom section - group
generating subsection data with the actual writing of the subsection data
* WebAssembly internal linker: only generate the tag name subsection if there
are any tags in the module
- removed obsolete define FPC_WASM_THREADS_INTERNAL_LINKER from ppcwasm32.lpi
+ add optimizer units (empty for now) for the WebAssembly target
+ include unit aoptcpu in wasm32/cputarg.pas
* RiscV64: better code generation to clear upper 32 bit of a register
Fix 2nd compilation in Textmode IDE
if not ps1 setup FPU defines
resolveReadAfterWrite moved to aasmcpu.pas
* RiscV: fix AndiAndi2Andi optimization
+ RiscV: AndiAddwi02Andi optimization
if taicpu(p).opcode in [....] beautiy fix
thx god You seen it! (reverse)
hlcgcpu.pas: uses unit systems + t_ps1.pas: correct Message3
check if next instruction exists
* fix RiscV32 compilation
* RiscV64: don't use addiw for OS_32 to OS_32 type conversions obviously
case statiment insteed of ifs
set_source_info behind defines
Fix display of 80bit floats in cross-endian case
psy-q-sdk lib duplicate named *.o files excluded from link
* FSRM works only with movsb
* fix alphabetical sorting of targets in comment
* MIPS code generator: don't put floating point results in FPU registers for
function results, if the SoftFPU is enabled
* MIPS code gen: don't use FPU registers for function parameters in case SoftFPU
is enabled
+ added fpu_libgcc to MIPS
+ define cpufpemu for MIPS in order to enable (optionally) FPU emulation
+ enable SoftFPU by default for the PS1 target
* MIPS: don't generate FPU code for abs(real), sqr(real) and sqrt(real) in case
FPU emulation is enabled
* MIPS: don't generate FPU code for int to real conversion when FPU emulation is enabled
+ RiscV: Addi0Op2Op optimization
Add -msoft-float or -mhard-float option to GNU assembler calls
* RiscV: extend Addi0Op2Op
* Addi0Op2Op has to consider both operands
switch all optimizations off
link all the sdk bindings .o files
removed InitSysInitUnitName
optimizecputype back to cpu_mips1
+ first batch of instructions added for Addi0Op2Op
Fixing bug where in const init no typecheck for symbol was performed
* improve RiscV assembler optimizer
Rename function to reset_all_default_types
* reduced the default stack size for PS1 to 256KB
+ PS1: initialize StackLength and StackBottom
+ PS1: allow creating a linker map file with the -Xm option
+ PS1: show linking message
+ RiscV: FOp.sFsgnj.s02FOp.s optimization
* generalize FOpFsgnj02FOp optimization
* PS1 target name in help screen changed to PlayStation 1
* apply OptPass1FOP to more opcodes
* do not generate lea with 16 bit references on x86-64, resolves
gitlab 0040936
* accidentally committed with a set debug define
* partial fix
gitlab 0040934: don't remove the DEF file if cs_link_deffile is set (thus if the user explicitly wants the file)
* partial fix
gitlab 0040934: enable def file generation if only -D is provided as argument (as the help suggests and which also makes sense if -Dd is not set as then a default description is used)
* add procsyms from exports also to deffile if user explicitly asked for one
* ensure that Default() symbols that use management operators are properly initalized/finalized
+ added test
Adding for-in loop iteration over slices
* extend use of OptPass1FOP
* load 64 bit constants through a register into memory to avoid store-forwarding stalls, resolves
gitlab 0040945
* apply OptPass1FOP to FCVT.*.*
* Generate correct type name for procedural type arguments in thunk class
* patch by lag programming: Code cleanup at function TAOptBase.RegInInstruction, resolves
gitlab 0040952
* ignore the -gl parameter (and print a warning) on the embedded targets
Force shortcut boolean evaluation when rewriting length(Windows widestring) = 0.
* fix
gitlab 0040259: global managed records with Initialize operator need to be initialized no matter if they are referenced in the current unit or not.
+ added test
* MIPS64: make use of DMTC1 instruction
+ enable strength reduction for -O3, probably an oversight for years that it was not included in -O3
* do not set the addr taken flag for nodes to passed to const/var/out parameters, if
the code of the callee is known and within the callee no address of the parameters
is taken
+ print all sub nodes of call nodes
* properly process all child nodes of call nodes in foreachnode, resolves
gitlab 0040957
+ add printing of all fields of tcallnode in TCallNode.XMLPrintNodeData as well
* mark symbols used in conditional compiling expressions using sizeof, resolves
gitlab 0040955
+ more fixes to mark symbols used by preprocessor expressions properly
+ made MarkSymbolAsUsed more fail safe
+ tests
Remove unneeded, and possibly wrong typecast to fix cycle with -CR option
* patch by lag programming to replace bitcnt by popcnt, resolves
gitlab 0040962
* set ra_addr_taken for addr. param only if really needed
+ fix
gitlab 0040963: print suitable messages for local unit, include, library and object paths if -vt is given
+ added test
* get rid of the hack that tlabelnode inherits from tunarynode and stores a statement in left, resolves
gitlab 0040964
* compilation fixed
* cosmetics: trailing spaces removed
Use TFPList.FreeAndNilDisposing in four more places.
Align htypechk.pas:is_better_candidate to the left edge of the screen.
* properly reject function calls as target of absolute, resolves
gitlab 0040977
* better error message on invalid expressions for absolute
Fixing a bug where an empty postfix for enum was allowed
Implementing `TImplementedInterface.getcopy` to allow copying of interfaced objectcs
It's probably not fully correct(see comment about procdef copy) but
seems good enough ¯\_(ツ)_/¯
* do not eat the semicolon after an absolute expression to a symbol, noted in
gitlab 0040978
Adding support for indexed properties in extended RTTI
+ added a missing 'br 1' instruction in the code, generated by
GenerateCode_InitSharedMemory. This should fix the loading error in browsers,
when using multithreading.
* generate fmrx instruction only if the cpu has the vfp extension, resolves
gitlab 0040985
Postponing building of VMT until inheritance chain is specialized
This commit does 3 changes:
1. Introduce new option `oo_inherits_not_specialized` indicating if
somewhere in the inheritance chain of an object there is a non
specialized generic parameter
2. Avoid building the VMT for an object which has a generic parameter in
the inheritance chain (fixes
gitlab 0040983)
3. When no vmt is build `insert_struct_hidden_paras` usually called as
part of `build_vmt` will be called seperately to add missing
parameters
Use “set of (op_unary, op_binary)” to check for supported operator overloads.
* avoid code duplication :)
Remove conditionals that rely on not defined(FPC_HAS_CPSTRING).
Remove unused cutils functions.
* fix
gitlab 0040993: "inherit" the default RTTI options of a non-System unit from TObject as that picks up whatever had been declared in the System unit
* Attributes for methods. Fixes issue 41001
* fix
gitlab 0039407: multi variable initialization is not allowed in any mode, so don't say it's only not allowed in Delphi mode
* pass all const record parameters on aarch64-win64 as references due to the habit of passing records as pointers by using the const modifier in the Windows unit
* fix encoding of ash_savereg and ash_savereg_x
* on aarch64-win64 do the assignment of the exception frame pointer only after the SEH prologue has been done as there is no SEH directive for assigning a register to FP
* on aarch64-win64 we need to restore the stack by first increasing the stackpointer and then restoring FP to match the code from the prologue
* patch by Rika to fix position reporting in macro redefintions, resolves
gitlab 0040082
* don't generate pdata and xdata if there is neither a relevant prologue nor a handler
* when removing the STP FP,LR and MOV FP,SP instructions, also remove the corresponding SEH directives if available
clearing the bss section on startup
this allows smart linking
* Fixed bug in "node_complexity" where a TLabelNode was put through an invalid typecast.
* don't restore SP if we hadn't stored it originally
* also restore SP on aarch64-win64 if registers had been stored
* fix encoding for save_freg_x
* Avoid calling copy operator when moving data from temporary objects
When a function returns a managed record, a new temporary object is
created for the result, which is then copied to the real destination.
For managed records with a deep copy implementation, this can create
immense overhead. So instead this introduces a move, which basically
consists of
```pascal
procedure Move(var src, dst);
begin
Finalize(dst); // Finalize existing data
Move(src,dst,sizeof(dst)); // Shallow copy
Initialize(src); // Clear source
```
* nld.pas: use MOVE when assigning the function result from the
temporary return object
* rtl/inc/systemh.pas: Adding new macro to mark new RTTI version with MOVE
operation
* rtl/inc/compproc.inc, rtl/inc/rtti.inc: Adding new move mechanism when
indicated by the compiler.
+ RiscV64: apply OptPass1OP also to addiw
Adding static properties to extended RTTI
* don't mess with boolean and/or operations in mixed short/full evaluated expressions, resolves
gitlab 0041012
Specialized fpc_copy_with_move_semantics for destructive copies.
+ more RiscV extensions
* make use of F and D extension flags
Update errore.msg
typo fix and correct position of 11068
Update errord*.msg
new messages and other changes in errore.msg have been translated or ported to the German message files.
* RiscV: more reliable use_fma
* correctly calculate the number of labels of a c boolean in case statemnts, resolves
gitlab 0041025
* adjust comments to better match the situation with aarch64-win64 added to the mix
* ensure that the section with the case-labels is 8-Byte aligned
* on aarch64-win64 the case-labels are a list of 8-Byte aligned 8—Byte values, so adjust the alignment to avoid 2 32-bit loads
* use a static data label for the case-label table on aarch64-win64 to avoid the linker discarding it
* revert for loops also if the upper limit is non-constant
* Add missing methods to thunk class for parent interfaces without RTTI
* Allow to parse internal symbol names generated for generics.
* properly take care of tempinitcode when calculating def./use. sums of tempcreate nodes
* avoid that types of limits of reverted loops are widened
* less strict condition when a loop decrement can be moved to the end of a loop to increase code quality
* better code for ... downto 1 for-loops
Allow to use ld64.lld if -XLL option is used
* don't see illegal calling conventions for procedure variables, resolves
gitlab 0041041
* draft of improving Addi0Op2Op
cmpxchg16b instruction uses no size suffix in ATT syntax
+ zen5 architecture for completeness
* inline nodes can specify whether their result needs to be used
+ add support for Delphi-compatible atomic intrinsics
* set types of start value calculation correctly when doing strength reduction, resolves
gitlab 0041054
* fix
gitlab 0041062: correctly handle atomic intrinsics inside generics
+ added test
* ensure that any Boolean type can be used for the Succeeded parameter and that there are no unitialized warnings
+ added test
* apply Addi0Op2Op to more operations
* skeleton to unify the RiscV paramgr
* first routines unified
* more RiscV paramgr unification
* Correctly handle missing extensions for dotted include file names. Fixes issue
gitlab 0041064
* more RiscV paramgr unification
* continued unification of RiscV paramgr
* major parts of the RiscV paramgr unified, improves code generation and less failures in RiscV32 regression tests
* partly revert 8cd6606970c8fedda95a3411d684dbd57379b46d, resolves
gitlab 0041052
(cherry picked from commit 854d4e6f4a5b53040160f8921d0089167f6b00be)
* formatting
+ test for issue
gitlab 0041066 which was already resolved previously
* fpu type must be fpu_soft if the cpu is rv32ima
* RiscV: emit an error if fpu_fd is used on a cpu without f and d extensions
* RiscV: floating point registers are saved only for hard float ABIs
+ RiscV: vector registers
Do not add abi-call0 to linker options for esp8266
+ write .option pic directive if needed
* make use of LA pseudo-instruction
+ apply OptPass1OP to LA as well
* fix
gitlab 0041072: proc_to_procvar_equal_internal() might be passed a procvar in case of "procvar := @
", reject that as incompatible
+ added test
* RiscV: unify push_addr_param
* fix
gitlab 0041074: adjust conversion level of class/interface to pointer and class to interface conversions so that sub class to class conversions take precedence
+ added tests
* fix
gitlab 0041063: don't add classrefdefs or objectdefs to the WPOInfo if they are declared locally (e.g. capturer instances)
+ added test
* RiscV: push_addr_param unified
* fix
gitlab 0041007: only unlink typesyms from their typedefs when releasing an unused implicit specialization if the typesym was created for the implicit specialization
+ added test
Remove one of two CPULLVM define macro
def_system_macro -> undef_system_macro (fix oversight as if then block is equal to else block)
* keep track of the current specialization state of the current module
* keep track of the current generic def in the specialization state
+ add utility function to check whether a generic belongs to the currently parsed generic even if it's further up in the specialization stack
* when parsing generic parameter types allow the use of generics that are part of the current specialization stack (this can be the case if a generic is used inside itself as a type parameter for a specialization)
+ added tests
* fix
gitlab 0040653: don't allow the use of a class during its declaration as parent for a nested class (Delphi compatible)
+ added test
* apply OptPass1OP to SLT/SLTU as well
* reset oo_is_forward object option for external classes after parsing the parent classes
* RiscV: write also nopic directive
* use dispose() instead of freemem() for consistency with the allocation of pmessagestaterecord
* ensure that flushpendingswitchesstate had been called before the start of replaying tokens
* apply message state to the pending state so that they are applied at the correct moment
* when restoring the state after parsing the last token of the token buffer append the message state to the pending state so that they are reapplied at the correct time
* tai_eabi_attribute -> tai_attribute so it can be used by other architectures
* write basic attributes for riscvXX-linux
+ add method to TMessage to check whether a message is valid
* don't use tmessage.setverbosity() to check whether the message is valid as it should only be applied when the switches are flushed, so use the new tmessage.valid() instead
* ensure that current_settings.pmessage is reset when doing a replay and when loading the current message state from the token stream
* also (re)store the pending state when replaying a token stream
* reset the message state only inside flushpendingswitchesstate(), not during $POP itself
* store the current verbosity as part of the settings so that they're stored as part of a generic token stream as well
* ensure that only the newest message state is applied
* don't use $MINSTACKSIZE and $MAXSTACKSIZE on non-Windows instead of disabling the warning
WPO: don't crash on TP-style objects with only abstract virtual methods
* fix trvinlinenode.second_fma
Extended RTTI: generate RTTI for Objective-C fields like for generic pointers
Resolves
gitlab 0041034
+ as-macos for using as from Retro68
* fix
gitlab 0040876: correctly check for generic constant parameters without concrete value
+ added test
* better checking of valid addr_no
* write sections/section names correctly for as-macos
* MacOS Classic uses apparently very similiar mechanisms for the TOC as powerpc-aix
* .toc sections do not need a .csect on powerpc-macosclassic
* write " as octal number as well in assembler output, it is more compatible
* fix
gitlab 0038122 in a more correct way than previously done: instead of adjusting the methodpointer node when it's a deref node adjust what value is stored in a temp if a call node is encountered: store the pointer value, not the pointed to value to avoid the reference getting lost
+ added test (note: the test fails at least on x86_64-win64 due to some different reason :/ )
* RiscV64: optimize 32 bit shift instructions as well
* cleanup merge artefacts
* if an outer capturer is required then that outer capturer must not be optimized into a register (fixes compilation with -Ooregvar enabled (e.g. in -O3))
* use HAS_MINMAX_INTRINSICS define
+ random bits for quad support on RiscV
* apply OptPass1FOP to FMIN/FMAX as well
+ min/max optimization support for RiscV
+ OptPass1FSGNJ optimization
* Better fix for atomic operations on wasm
Avoid wrong typecast by checking explictly that hp1 is indeed an instruction
+ add missing cpu64bit defines for consistency
cpuNbitalu is not the correct type for fpc_atomic_cmp_xchg_alu on webassembly
+ RiscV: make use of the fneg.* instruction
Every compile gets actual current directory (fix for Textmode IDE)
Fix compilation of riscv32 compiler
* fix compiling binaries on JVM: the entries list contains pinitfinalentry values, not tused_unit
* missing Copyright year update
+ RiscV: make use of the fl* rd,symbol,rd pseudoinstruction
+ RiscV: make use of the fmv.w.x/fmv.d.x instruction to load 0.0
* factor out TRVCpuAsmOptimizer.OptPass1Sub
* remove accidently committed debug statement
* RiscV: check for cpu capabilities before using fmv for loading zero
Check that index value is not below lower bound in TMessage.Valid method
* reformat statement for better readability
* don't cast the succeeded node succn to a tcallparanode (it's usually a tloadnode or something similar instead)
* change some getglobaldatalabel into getlocaldatalabel to simplify code if pic is used
* factor out TRVCpuAsmOptimizer.OptPass1SLTx
* fix
gitlab 0040979: don't recurse further into the nested hierarchy for code generation if the function is generic
+ added test
LoongArch: Always emit la.got for global symbol
+ RiscV: write arch attribute
Browser information for generic records
* factor out TRVCpuAsmOptimizer.OptPass1SLTI
+ WebAssembly internal linker: rewrite the fpc_wasm_invoke_helper function in the linker, so that it becomes functional
+ RiscV: support ZMMUL extension
* fixed WebAssembly code generator internal error when passing real constants as
constref parameters. Also fixes test webtbs/tw41011
* properly write RV32E/RV64E architecture tags
* WebAssembly codegen: fixed access to absolute variables, pointing to just a constant address, e.g. var a: longint absolute 5;
* WebAssembly: also handle dup=true in thlcgwasm.prepare_stack_for_ref for absolute address refs
+ added ref2string debug helper function to the WebAssembly code generator
* WebAssembly codegen: enable -CN nil pointer checks in more places: a_cmp_const_ref_stack, a_cmp_ref_reg_stack and a_cmp_reg_ref_stack
* override tcpuparamanager.has_strict_proc_signature and return true for WebAssembly
* check for 64 bit registers in TX86AsmOptimizer.RegReadByInstruction as well for sanity reasons
* SubLea2Lea has to check both times for equal super registers, resolves the second part of
gitlab 0041126
Symbol browser fix object tree for 64bit procesors
Symbol browser information collection improvements
Symbol browser consolidate units
* Allow to process .fmx files just as .lfm/.dfm files
Change CompareChar uses inside compiler/RTL to CompareByte.
+ a_bit_scan_reg_reg gets a flag if src cannot be zero: this simplifies the generated code
+ function node_not_zero and make use of it
Make use of not_zero in x86 bitscans.
* extend node_not_zero and make more use of it
+ extend node_not_zero to take range types into account
+ aarch64: if no FPC_DIVBYZERO call is needed, div nodes do not generate calls
* apply OptPass1Data to UDIV/SDIV as well
* node_not_zero can be apply to int->int conversion only if no data is cut off
+ apply OptPass1Data to variable shifting/rotating operations as well
* WebAssembly: optimized the number of nested blocks inside the invoke helper
* WebAssembly: impose a limit on the br_table instruction length, when generating the invoke helper
* WebAssembly: micro optimization in the invoke helper - omit the last 'return' instruction
Symbol browser information collection improvements part 2
Disable high(taitype)<=31 check for LLVM compiler
* allow absolutes on open arrays (use of this is doubtful though), resolves
gitlab 0041147
* Fields used in local records in for-loops are now promoted
into registers via temprefs if register pressure permits.
* make use of not_zero in tbasecgarm.a_bit_scan_reg_reg
* WebAssembly internal linker: invoke helper code generation moved earlier,
before the relocation fixups are applied. This should make the DWARF debug
line info correct again. Also, the offsets in the linker map file should be
correct now, as well.
+ WebAssembly internal linker: add the contents of the type section to the map file
+ WebAssembly internal linker: write the indirect function table to the linker map file
* x86_64: Extension to MovMov2Mov optimisations to allow more MOVL to MOVQ zero-extensions
+ x86: proper flag (de)alloc in a_bit_scan
* RiscV: fixing spilling_get_operation_tpye for LI
* improve complexity calculation for tempref nodes
+ WebAssembly internal linker: write the contents of the memory section to the linker map file
+ WebAssembly internal linker: write the export section to the linker map file
+ WebAssembly internal linker: write the import section in the linker map file
* WebAssembly internal linker: write the memory section before the export section, so it appears in a more logical order in the map file
+ WebAssembly internal linker: write the global section in the linker map file
* fixed warning after previous commit
* WebAssembly internal linker: refactored the writing of the memory section and
the memory import section: introduced a TWasmMemoryType record, and structures
for holding the memory entries in the import and memory sections, instead of
writing them in an ad hoc manner. The memory information in the linker map
file is now also a little more detailed.
* RiscV: play safe in taicpu.spilling_get_operation_type
m68k: new CPU capability - the TST instruction supports address registers (68020+ and CF)
m68k: do not try to optimize CMP #0,Ax to TST Ax, if the CPU doesn't support it
m68k: refactor - use the new CPUM68K_HAS_TSTAREG capability where applicable
* RiscV: fix AddiAddi2Addi optimization
* RiscV64: make use of zext.w instruction if available
* RiscV: handle more instructions in taicpu.spilling_get_operation_type
* fix typo
* properly pass zba, zbb, zbs to march
Fix ld.lld options for i386-freebsd target
Disable limitation of nonlocal setting for LLVM compiler
* RiscV64: make use of sext.h instruction
* x86: Fixed bug in "MovMovMov2MovMovMov" optimisation where a register wasn't properly tracked
* WebAssembly: fixed type conversion from pointer to qword (fixes bug
gitlab 0041092)
* WebAssembly goto support: skip unused labels in resolve_labels_via_state_machine. Fixes
gitlab 0041093
+ RiscV32: use sext.b if available
* most of tcgcallparanode.secondcallparan's code was moved into two new methods:
secondcallparan_do_secondpass and secondcallparan_after_secondpass. These are
protected methods, meant to be called in secondcallparan's descendants, to
provide alternative parameter handling algorithms (needed for WebAssembly). No
functional changes.
* On WebAssembly, when calling a function, first generate code for evaluating
all the parameters, and only after that, push them on the stack. This avoids
problems with our 'goto' support.
* fixed WebAssembly goto in case statement crash with internal error 2021011801
+ WebAssembly: added support for using saturating (non-trapping) float-to-int conversion instructions via the new target switch SATURATINGFLOATINGTOINT
* the FPC_WASM_SATURATING_FLOAT_TO_INT_CONVERSIONS define shortened to FPC_WASM_SATURATING_FLOAT_TO_INT
* increased the max string length of ttargetswitchinfo.define in order to fit the new define
* fix compilation of ppudump
+ define EOL_ONE_CHAR for the WASI platform
* x86: Fixed bug where flags register wasn't tracked during
long-range "AddMov2LeaAdd" and "SubMov2LeaSub" optimisations
* x86: Refactoring register update code in "OptPass2ADD" and "OptPass2SUB"
* x86: "OptPass2ADD" and "OptPass2SUB" now force another iteration if "OptPass2MOV" returned True
* x86: Fixed bug where "aoc_ForceNewIteration" wouldn't update the registers properly in some circumstances
* x86: Fixed oversight in LeaLea2LeaLea optimisations where bad code is
generated if the intermediate register appears in the first reference
* system_wasm32_wasi renamed system_wasm32_wasip1
* the name string of the WASI target changed from 'The WebAssembly System Interface (WASI)' to 'The WebAssembly System Interface Preview 1 (WASI 0.1)'
* system_wasm32_wasi_info renamed system_wasm32_wasip1_info
+ add WASI as extra define for the wasip1 target
* ifdef on wasip1 when setting the source OS info to wasip1
* wasi renamed wasip1 in the compiler help screen
+ compiler support for a new target: wasip1threads
* fixed compilation of ppudump
* WASI renamed WASIp1 in ppudump
* increased string size of tsysteminfo.shortname in order to fit 'wasip1threads'
+ register the wasip1threads target in the compiler
* Invoke helper also needs generic ids
+ added system_wasm32_wasip1threads to systems_wasm
* factor out TRVCpuAsmOptimizer.OptPass1Andi
+ added system_wasm32_wasip1threads to systems_internal_sysinit
+ also handle system_wasm32_wasip1threads in the compiler anywhere system_wasm32_wasip1 is handled
+ added tf_no_pic_supported to the WASI platforms
* avoid that not explicitly as vectors marked arrays end up in registers where they are handled not properly
* factor out TRVCpuAsmOptimizer.OptPass1SLTIU
* another ; after then removed, hopefully finally resolves
gitlab 0041171
Change branch and jump destinations to byte based distances.
* better error reporting
* indentation
Check rjmp destination range.
* wasip1threads needs 14 characters
* Enlarge target os/full variable for wasip1threads
Add/actualize CPUX86_HAS_SSSE3.
* factor out TRVCpuAsmOptimizer.OptPass1SxxI
+ write more information ttypeconvnodes
* Fixed internal error 200411013 when typecasting and dereferencing nil into an array
+ RiscV: SltiuAndi2Sltiu optimization
Enable -Aas-clang for unix and embedded targets for aarch64 compiler
* fix SltiuAndi2Sltiu optimization
* make TRVCpuAsmOptimizer.OptPass1SLTIU look further ahead
+ SltiAndi2Slti optimization
* Define for mormot memory manager. Speeds up by 66%
+ added new target to the compiler: wasm32-wasip2. Not working, yet.
* removed tf_under_development from the wasip1 and wasip1threads targets, since they're now relatively stable (unlike wasip2)
+ added wasip2 to the compiler help screen (marked as experimental)
* enclose {$define DEBUG_AOPTCPU} in {$ifdef EXTDEBUG}
* Remove MMM after discussion on core
* some RiscV optimizer improvements and fixes
- disable Slti0B2B as well
* Create proper unicode string for single char if in unicode rtl
* Change pchar to dynamic array of ansichar
* Replace labeltable with dynamic array
* Use new instead of getmem
* Use dynamic array instead of pointer for character map
* Use dyn array for bitset
* Allow to write tbytedynarray
* user dyn array for Superregister
* Dyn array for interference bitmap
* Use dynamic arrays instead of getmem for spill temp
* Use dynamic arrays for compiler messages
* use dynamic arrays instead of getmem for resource strings
* Use dyn array for input buffer
* source linebuf as dyn array
* Use dyn array of byte for CRC buffer
* Use dyn array of boolean for isHandled
* Convert shstrtab to dyn array of ansichar
* Convert strtab to dyn array of ansichar
* Convert symversions to dyn array of word
convert lfnstrs to array of ansichar
* Dyn array for ReadArchive variables
* Use new and dispose for asmmodeinfos
* Dyn ansichar array for fcoffstrs
* Dyn array for FSecTbl and FSymTbl
* Fix range check error (len=0)
* Change buffer to dyn array
* allow type casted pointer constants being used as arrays which address can be takes, resolves
gitlab 0041177
* Use dyn array of char for macro contents
* Change pointer-to-array of deref to dynamic array
+ RiscV: FcmpAndi2Fcmp optimization
* Make compilerwidestring a class using dyn array, rework tstringconstnode: value_str -> valueas, valuews
* Undo changes to lpi files, committed by accident
* Do not enable new debug define
Fix range check error inside tsuperregisterworklist.addnodup method
Avoid range error in tbitset.clear method
* Call free instead of destroy
* Do not set strval for unicode strings in tc_emit_stringdef
* Print unit name, flush output in status messages
* simple clean ups after dyn. array conversion
tai_aggregatetypedconst.add_to_string: fix off-by-one errors
LLVM: fix compilation after rgobj dynarray changes
+ RiscV: handle rol(w) in the assembler optimizer
* Correct allocation size for IsHandled, index is 1-based
Fix emit_ansistr_const: its input is not guaranteed to be #0-terminated
Also cleaned up all memory leaks where pchars were allocated, but never freed.
Before the change to dynamic arrays, these pchars were kept in the tai_string,
but now they got copied. Changed the tai_string constructor to support adding
a terminating #0, so we don't need to create intermediates just for that.
tai_string: remove useless #0 terminators
The string data in the array alrady includes any necessary #0 terminators
and the length of the array contains the length of the data, so there is
no need to add an additional #0 terminator
+ RiscV: handle ror(i)(w) in the assembler optimizer
Avoid range check error in TObjData.writebytes overloads using dynamic arrays
+ RiscV: ROL/ROR code generation support
+ RiscV: flags for crypotography extensions
+ RiscV has internal rol/r support
* fix rol/ror instruction usage and spilling on RiscV
* more aggressive cse on thread vars
* patch by Pierre to fix spilling and jump handling of pseudo-instructions
Handle ADR LDM and STM arm instructions
in taicpu.spilling_get_operation_type method
* x86: Fixed bug and refactored optimisations where SHR instructions were
merged incorrectly when a condition appears between them
* x86_64: Bug fix in "PrePeepholeOptSxx" where shifts greater than or equal to 32 weren't handled correctly
* use for threadvars on RiscV always the size optimization code path as loading addresses is expensive
* Fixed oversight in TStringConstNode that stopped it building under DEBUG_NODE_XML
* align stack to 16 bytes on RiscV32 as required by the ABI
* align stack to 16 bytes on riscv32-embedded as well
Regenerate all Makefile's after: Change resource string extension variable RSTEXT to '.rsj'
* constref does not mean that a variable is written, resolves
gitlab 0041206
* Avoid access violation. Use internal error instead
* Use linear mechanism to check whether function types were emitted
Return NaN from sin/cos(±∞/NaN).
* don't do MovOpMov2MovOp optimization reducing bit width of the operation if symbols are involved, resolves
gitlab 0040269
* Dwarf: write enum symbol constants with the size of the enum, as proposed in
gitlab 0041021
* Dwarf 3+: write always a type for enums
* Determine publishable property type only when specializing a generic
* x86_64: More support for transferring directly between MM and int registers
* x86: New peephole optimisation for improving newly inserted (V)MOVD/(V)MOVQ instructions
* x86_64: "a_loadmm_intreg_reg" and "a_loadmm_reg_intreg" now use VMOVD/Q if AVX is selected
Avoid out of range access to instab array
* throw an error if a second forward type declaration is found at the place of this second
declaration, resolves
gitlab 0041150
* unify internalerror
* Aarch64: handle ASRV in taicpu.spilling_get_operation_type
Check that sizeof(tppuheader) was indeed read in ReadHeader method
Use same order in writeppu and getppucrc to get same output in debug files
Check index of CRC tables for Test_double_checksum_write code
Add information about different CPU or OS in CheckHeader local function of tppumodule.openppu method
Give integer value of not found ppufile.header.common.target in CheckHeader
Add all CRC values into .INT and .IMP files
Fix usage of DEBUG_GENERATE_INTERFACE_PPU together with Test_Double_checksum conditional
* Reduce object size, use ansistring. Results in faster compilation, less memory usage
* arm/a64: Be more careful about hp1 and p_second being null in "TryConstMerge"
* Reduce memory usage of tspecializationcontext
Other improvements and fixes for PPU debug code
Prepare for long GFNI instructions.
Add x86 instruction sets SHA512, SM3, GFNI. Pseudo-ops for VCMP*, VPCMP*.
Fix error in substitution character for commit d79db82ca2
Avoid calling compareword with maxi=0, as this generates an dynamic index range error when comiled with -CriotR option
Fix previous commit 105382b8 by setting Temp to zero if maxi is zero
* Stopped Internal Error 2013032603 from triggering if a non-numeric ordinal type is passed into "Str"
* Str returns a nicer error (and corrects the position) if a non-ordinal type is passed into it
* Specify that an integer expression was expected for inline constant simplification routines
* Replaced Illegal Expression error with Internal Error for
"getaddsub_for_incdec" since it should never logically reach this point
* Replaced impossible-to-reach errors in case blocks with internal errors in "texprvalue.evaluate"
Instruction flags for SM3, SM4
Add x86 instructions of SM4, VP2INTERSECT.
* avoid to call a_loadmm_reg_intreg for mm registers larger than the int registers, resolves
gitlab 0041252
Ensure that real constant put into rodata also get a end symbol to generate .size directive (required at least by llvm-mc-16 for wasm32 compiler)
Avoid adding size if tf_needs_symbol_size is not in target_info.flags
Discard ait_symbol_end if tai_symbol_end(hp).sym.is_used is false
* store lower set bound in a setdef
Fix failure in ppudump after 5462dd38
+ Handle new SetLow PPU field of TSetDef
Introduced 16 bit broadcast functionality.
Distinct destination and source registers.
Add x86 instruction sets FP16, BF16, 4VNNIW, 4FMAPS. Small updates.
Error message about distinct destination and source registers.
* Small refactor for easier debugging
* Flush output in case of redir
* Propagate delphi mode when scanning generated code for wasm (specially generic specialization)
* x86: Fixed oversight in OptPass2Movx where a "movzwl/movzbl"
duplet didn't consider a different destination register
Modify is_inlimit function to use setlow instead of setbase field
Use setlow field of tsetdef class to generate new set typedef in set add node
* x86: Fixed bug where XMM7 wasn't used by the register allocator
+ comments to explain difference between setbase and setlow
* avoid warning on unintialized variable
Remove llvm-mc-10 support in agllvmmc unit
Remove option -Allvm-mc-10 for wasm32 compiler
* x86: "MovMov2Mov 1" now removes the first instruction if the intermediate register is not in use afterwards.
Allow more than 255 registers.
Support for ymmreg_sae, ymmreg_er.
Support ModRM 11:rrr:000. Only for TILEZERO.
Instruction match tests supported register numbers. Thx to VMPSADBW.
Add x86 instruction set AVX102.
Add x86 instruction set AVX102 for targets i386 and i8086.
Generalize asm error message for distinct registers.
Add new warning about variable with excessive align specification
Accept aign larger than varalignmax but issue a warning
Add new message about local variable with excessive alignment
Add tsym parameter to ttgobj.getlocal method.
* tgobj.pas: Change virtula method getlocal to
add tsym paramter to allow for bettter warning when
required alignment is more than localalignmax.
* hlcgobj.pas: Adapt thlcgobj.getlocal method to new ttgobj.getlocal
* ncgflw.pas: Add exceptvarsym as new parameter to getlocal methos
* jvm/tgcpu.pas: Adapt to added parameter for overloaded virtual method
* wasm32/tgcpu.pas: Same.
* llvm/tgllvm.pas: Same.
Downgrade warning to note for scanner_w_local_alignment_large_than_max (fixes cycle for i386-linux taeget)
Do not set alignment above varalignmax, as this breaks msdos/win16 targets
Also downgrade alignment warning about variables to a note
* Remove underscores from tex code
* x86: New post-peephole optimisation that converts 32-bit registers
in a LEA reference to 64-bit if the destination is 32-bit
* x86: Refactored and optimised "PostPeepholeOptLea"
* throw proper error if no suitable NewInstance method is found, resolves
gitlab 0041274
LLVM: always added related high parameters to parentfpstruct
Sometimes the high parameter is only first accessed during the first
pass, while we already need to know everything that will go into the
parentfpstruct during the typechecking pass.
resolves
gitlab 0041282
LLVM: don't do anything for -OoUSELOADMODIFYSTORE
LLVM itself can do this itself already, and the FPC transformations
apparently don't respect the types so they generate invalid LLVM IR
* x86: New MOV/AND peephole optimisation and more efficient optimisation searching in "OptPass1MOV"
Add new messages about win16 memory models
Check memory model for i8086-win16 system use large memory model by default
x86: Fixed syntax error when DEBUG_REGISTERLIFE is enabled
* Improved register allocator and fixed bug where a call to "is_same_reg_move" would leave behind dangling pointers
* x86: MOV/AND optimisations now check for the flags being in use
* allow absolute on array of const parameters, resolves
gitlab 0041292
Add counter for tissurrogatepair2 test
* x86: Minor refactoring of "VmovdqxVmovdqxVmovdqxVmovdqx2VmovdqyVmovdqy" optimisations to avoid requirement of AVX2
* x86: AND %reg,%reg removal is now more thorough under -O3.
* x86_64: Deep MOV optimisation extended to attempt to replace registers after
MOV %reg1d,%reg2d; AND %reg1d,%reg1d pair.
* Fixed bug where a TCallParaNode's "originalindex" defaulted to the wrong value when loading from PPU
* Added missing "ait_tempalloc" to 7a4dbdc5 commit
* x86_64: Moved "MovlMovq2MovlMovl 1" optimisation to pass 2 (fixes
gitlab 0041317)
* Removed random call to "printnode" at internal error 2011010418
* don't crash on external generic subroutines, resolves
gitlab 0041330
* Delphi-style multiline strings
* Enable multiline strings by default for objfpc/delphi
* initialize all variables
* formatting
* triple-quoted string needs to be ended by triple-quoted string.
Fix error in test inside AddChar local procedures
* Additional fix for cornercase backtick
* Correctly initialize/finalize had_multiline_string, fixes issue
gitlab 0041359
* fix
gitlab 0041254: move setting up the relationship between current_structdef and its type symbol for records from parse_record_members() to record_dec() so that its also applied for non-advanced records (other code still ensures that the record type itself can't be used inappropriately)
+ added test
* we don't want N-commas for the name of a generic, but N-1 (as the comment suggests)
Add more tinyAVR 2 controllers.
Update German translations of error message files.
* users can use the internalproc directive in their code, so throw a proper error if the supplied number is not known, resolves
gitlab 0041310
* strange oversight fixed that tcgassignmentnode.pass_generate_code doesn't handle a certain
combination of locations, resolves
gitlab 0041366
* allow generic parameters to be used as array limits, resolves
gitlab 0041358
at90usb8u2 and atmega8u2 should use rjmp/rcall because of small flash size.
* make thread var count size CPU dependent
+ implement while i>0 do ... dec(i); to if i>0 then repeat ... dec(i) until i=0; as proposed by Rika in m
gitlab 001122
* fix and simplify twhilerepeatnode.internalsimplify
* Debug: Register read/write information is now clearer under "DEBUG_INSTRUCTIONREGISTERDEPENDENCIES"
+ implement while (simple expr.) do ... to if (simple expr.) then repeat ... until not(simple expr.); optimization as proposed by Rika
* fix tx64tryfinallynode.dogetcopy
* x86-64: Fixed bug where the wrong operand was checked for the "Mov2Nop 8" peephole optimisation (fixes i41367)
* x86-64: Efficiency boost for "MovlMovq2MovlMovl 1" / "Mov2Nop 8" optimisation
Add missing firstpass as suggested by rasberryrabbit, and fix formatting issues
* Refactored the internal "TryMovArith2Lea" in OptPass2MOV to be more self-contained
* Under -O3, "MovlMovq2MovlMovl" is now deferred to produce better optimisations overall
* x86: "NotFirstIteration" is now configured for Pass 2 of the peephole optimizer
Support “in” in node_complexity.
* x86: Fixed optimisation where OptPass2Movx didn't search ahead properly for shift/rotate instructions
* x86: Corrected placement of ECX deallocation for shift/rotate instructions
* x86-64: Improved shift/rotate code generation, taking advantage of byte-sized registers being available for all
* i386: New peephole optimisation to help shrink MOV instructions used to write to %cl for shift/rotate
* Fixed inefficiency in register allocator where resized registers weren't considered
Add atxmega, AVR-Dx and AVR-Ex controllers.
Copy x86_64-win64 specific code of tx64tryfinallynode.pass_generate_code over to taarch64tryfinallynode.pass_generate_code
* Improved shift-to-rotate node optimisation to reduce code size and permit the use of a variable index
Remove nonexistent controller.
compiler: tmodulestate comments and removed unused ms_error
compiler: re-added ms_moduleerror, small optimization
compiler: added module state ms_compiled_waitcrc and delay writing ppu until all used unit crcs are computed
compiler: wait for crc: clean up waitingforunit, processqueue: stop endless loop
* Added new "SetAndPassThrough" support function to set an integer variable in a condition
* x86: New "GetRMReadIndex" function to detect where
input registers can be replaced with references for the
"MovOp2Op" optimisation, which is now wider reaching
Introduce CPU_BC_HAS_SIZE_LIMIT to limit acceptable range when looking for unconditional jump label, to remain eligible for exchange with conditional jump
Update esp32c3 for esp-idf v5.5
* x86: New "Not/And -> Andn/Not" peephole optimisation
* x86: Added new post-peephole optimisations to convert BMI2 shift/rotate instructions to their smaller traditional versions if possible
* x86: Convert isolated "(1 shl y) - 1" to BZHI, not just "x and ((1 shl y) - 1)"
* compilation with -dextdebug fixed
Fix error about unset result in TDebugInfoLLVM.getabstractprocdeftypes method
optloop.pas: move global variables to a context object.
* spelling
* check against current_settings.cputype
Fix LLVM cycle with -O4 option.
symsym.pas: add tabsoloutevarsym.reftyp method
which returns the typ of the absolute refered variable.
procdeutils.pas: add acceptable_typ function
to avoid cycle failure for LLVM with -O4 option
due to internal error in get_capturer function.
m68k: fix indentation, no functional change
m68k: add support for OP_ROL/OP_ROR to a_op_reg_reg. this fixes m68k builds after 0af3f2a9
m68k: allow the optimizer to fold of two differently sized ANDs, but use the larger size in the resulting instruction
m68k: fix typos in 6a82ca8a - caused by blind refactor before committing
m68k: on CF, sign_extend the clone register not the original dst for rotate/shift ops
Set unititialized local boolean variables to false to avoid random behavior
scanner: actually use the result of readquotedstring as cpattern. this fixes the fileexists() preprocessor directive, broken since 2c1fa9e9
scanner: please do not try to byte swap a byte. not even on big endian.
msg: fixed typos in the description of improperly indented multi-line strings error
* generating a linear sub list makes no sense for RiscV
Test local fix for powerpc out of reach conditional jump
+ define FPC_ABI_WIN64 for systems that use the Win64 ABI (currently it's only x86_64-win64, but there are also x86_64-nativent and x86_64-uefi as potential targets)
* fix AndiSb2Sb optimization
compiler: when stuck with waiting queue, write items, issue
gitlab 0041386
* fixed a few issues with last merge
compiler: when queue is stuck, write state of waiting for, issue
gitlab 0041386
* handle more inline operations in node_complexity
* reduce register usage in tcgmoddivnode.pass_generate_code
* emit_div/mod_reg_reg_reg takes now three operands
Reenable conditional jump optimization for powerpc CPUs using CPU_BC_HAS_SIZE_LIMIT code
m68k: do not allow the members of the register pair in division/remainder instructions be the same register
ncgmat: fix location for constant divisions-by-power-of-two after a291347d
Make Zicsr and Zifencei explicitly part of subarch name since it is not included in the base ISA 20191213
* avr: optimized code generation for ... xor constant
* WebAssembly internal linker: fixed bug, when reading very large (in absolute
value) signed negative LEB128 numbers (encoded as 10 bytes). It is very
unlikely for this to have presented a problem in practice on the 32-bit
WebAssembly platforms, since reading signed LEB numbers is only used for
reading the initial value of WebAssembly globals in external modules, and the
affected values are unlikely, but it is still bug, which is why I'm fixing it.
* added 'legacy' to comment before the WebAssembly exceptions instructions, because they've been declared 'legacy' now
* WebAssembly: a_try instruction renamed a_legacy_try
* WebAssembly: a_catch instruction renamed a_legacy_catch
* WebAssembly: a_catch_all instruction renamed a_legacy_catch_all
* WebAssembly: a_delegate instruction renamed a_legacy_delegate
* WebAssembly: a_throw instruction renamed a_legacy_throw
* WebAssembly: a_rethrow instruction renamed a_legacy_rethrow
* WebAssembly: a_end_try instruction renamed a_end_legacy_try
+ added instructions for the new WebAssembly exception handling with exnref
* ts_wasm_native_exceptions renamed ts_wasm_native_legacy_exceptions
* updated comment and URL for the WebAssembly legacy exceptions proposal
* removed the JSEXCEPTIONS WebAssembly exceptions mode. It was never completed
and was made obsolete by the other exceptions modes, so it's unlikely it will
ever be implemented.
* fixed compilation of ppudump
+ added target switch ts_wasm_native_exnref_exceptions for the future implementation of WebAssembly 'exceptions with exnref' support
+ also create the FPC_EXCEPTION_TAG_SYM for exnref exceptions (the exception tag is the same, like in the legacy exceptions proposal)
+ avr: LddMov2Ldd optimization
* twasmraisenode.pass_1_native_exceptions renamed .pass_1_native_legacy_exceptions
* twasmtryexceptnode.pass_generate_code_native_exceptions renamed .pass_generate_code_native_legacy_exceptions
* twasmtryfinallynode.pass_generate_code_native_exceptions renamed .pass_generate_code_native_legacy_exceptions
* twasmonnode.pass_generate_code_native_exceptions renamed .pass_generate_code_native_legacy_exceptions
+ support the end_try_table instruction in the internal WebAssembly assembler writer
+ support the throw instruction in the internal WebAssembly assembler writer
+ support the throw_ref instruction in the internal WebAssembly assembler writer
Add debugging of changed nodes inside opttail unit with DEBUG_OPTTAIL
Add DEBUG_OPTTAIL to list of defined conditionals if DEBUG_ALL_OPT is set
Add separate function printfileinfo
+ RiscV: CPU type rv32imaf added
* ttgobj.isstartoftemp now returns false in case it finds that the temp has been
freed. This prevents a compiler crash in tcgassignmentnode.maybechangetemp
when compiling packages/fcl-json/tests/testjson with -O2 on WebAssembly.
* fixed WebAssembly signed overflow check for the subtraction operation
+ RiscV: CPU type rv32imafc added
* fixed WebAssembly overflow checking for 64-bit multiplication
+ support all subset locations in twasmaddnode.second_generic_compare. This improves support for bitpacked records and arrays in WebAssembly.
* bitpacked record/array fixes for platforms with 64-bit ALU and 32-bit address space (WebAssembly, JVM)
* fix tstoreddef.is_fpuregable for RiscV
* forgotten part of commit
* RiscV64: default CPU type now rv64imafdc
* RiscV: get rid of ambiguous abi type abi_riscv_hf
* RiscV: rewrote CPU and FPU type checking in options.pas
Fix compilation of loongarch64 compiler, by removing reference to a riscv ABI abi_riscv_hf that was removed
Fix tentryfile.getrealsize soft fpux80 code
* Allow to specify message when calling internal error
* Provide more info when certain internal errors occur
* fixed compilation of loongarch compiler
* proper declaration of ABIs
* RiscV: ABI naming compliant with official docs
* compilation (hopefully) fixed
* internal object writer: the 'section too large' check should be disabled for platforms with 64-bit address size, not for 64-bit ALU size
+ WebAssembly internal linker: added check for relocations increasing section
data's size. The check is behind ifdef EXTDEBUG_WASM, because it slows down
compilation.
+ override TObjRelocation.ToString, to help with debugging
+ override TWasmObjRelocation.ToString, to dump the extra fields in the descendant
+ override TObjSection.ToString to help with debugging
+ override TObjSymbol.ToString to aid in debugging
* small fixes for RiscV ABI regarding floating point registers
* fix CPU checks in tstoreddef.is_fpuregable
Fix unaligned memory read inside x80 fpu type getrealsize method
+ { optimze @
=/<>@
* get rid of superfluous code
* better reuse the initial resulttype when optimizing constant =/<>
+ implemented code generation for WebAssembly exnref exceptions by copying the
code generation from the legacy exceptions. This is to make stuff compile in
the exnref exceptions mode. After that, the code will be adapted to use the
new try_table instruction.
* twasmexceptionstatehandler_nativeexceptions renamed twasmexceptionstatehandler_nativelegacyexceptions. No functional changes.
+ added twasmexceptionstatehandler_nativeexnrefexceptions - currently a copy of twasmexceptionstatehandler_nativelegacyexceptions. Will be updated for exnref exceptions later.
* the FPC_WASM_NATIVE_EXCEPTIONS define renamed FPC_WASM_LEGACY_EXCEPTIONS
+ support try_table/end_try_table in tcpuprocinfo.postprocess_code.resolve_labels_pass1
* proper llvm-mc name for the end_try_table instruction
+ added a try_table_catch_clauses assembler list field to WebAssembly's taicpu, to hold the catch clause list parameter to the try_table instruction
* in taicpu.op_XXX call create(op) instead of inherited create(op), because we want to call our overriden constructor
+ support writing the catch clauses in the LLVM-MC assembler output for the try_table instruction
* use the new WebAssembly exception handling instruction try_table for try..finally blocks
* Aarch64: don't emit illegal shifter operands, resolves
gitlab 0041424
+ support writing the try_table instruction in the internal assembler writer
+ handle a_end_try_table in the labels resolution in resolve_labels_pass1
* make the newly added internal error numbers unique
+ support try_table in resolve_labels_pass2
+ introduced taicpu.op_catch
* use taicpu.op_catch to construct the try_table instruction more easily. No functional changes.
+ use the new try_table instruction for try..except code generation in exnref exceptions mode
* use a_throw instead of a_legacy_throw in exnref exceptions mode
+ use the new try_table instruction in exnref exceptions mode for 'on' except nodes
* use a_throw instead of a_legacy_throw in twasminlinenode.second_throw_fpcexception, unless legacy exceptions mode is selected
* bug fixes to the try..finally exnref exceptions code generation
* fix in exnref exceptions generation code for 'on' nodes
* aitws_try_delegate renamed aitws_legacy_try_delegate
* aitws_try_catch renamed aitws_legacy_try_catch
* tai_wasmstruc_try renamed tai_wasmstruc_legacy_try
* tai_wasmstruc_try_delegate renamed tai_wasmstruc_legacy_try_delegate
* tai_wasmstruc_try_catch renamed tai_wasmstruc_legacy_try_catch
+ implemented tai_wasmstruc_try_table - structured version ot the try_table instruction, used in goto label resolution
+ support a_catch,a_catch_ref,a_catch_all and a_catch_all_ref in tcpuprocinfo.ConvertBranchTargetNumbersToLabels
+ introduced taiwstype.aitws_try_table
+ support try_table blocks in resolve_labels_of_asmlist_with_try_blocks_recursive
+ handle try_table in resolve_labels_via_state_machine
* fixed tai_wasmstruc_try_table.create_from to stop on a_end_try_table, instead of a_end_block
* fixed check in resolve_labels_via_state_machine
* fixed try_table bug in resolve_labels_via_state_machine
* Changed the WebAssembly exception mode switches:
-CTwasmexceptions becomes -CTlegacyexceptions
-CTexnrefexceptions becomes -CTwasmexceptions
In other words, -CTwasmexceptions now selects the newer exnref exceptions
proposal, while the previous exceptions mode (which retains compatibility with
earlier browser versions) is still available as -CTlegacyexceptions.
* changed the default WebAssembly exceptions mode from 'no exceptions' to
'branchful exceptions'. Rationale: modern Free Pascal code relies on working
exceptions support, so it's better to offer a slower, but more compatible
option by default.
* fix ABIs used by RiscV64
* more bitpacked fixes for 64-bit ALU, 32-bit address space
* WebAssembly: stop with internal error in case the code generator is requested to a binary operation with two different sized registers
* 64-bit ALU, 32-bit address space fixes in thlcgobj.a_load_reg_subsetref
* 64-bit ALU, 32-bit address space fixes in tcgvecnode.update_reference_reg_packed
* converted tcgvecnode.update_reference_reg_packed to use the high level code generator when the ALU and address sizes are different, like on WebAssembly
* another 64-bit ALU, 32-bit address fix in tcgvecnode.update_reference_reg_packed
* fix bug in thlcgwasm.a_load_reg_reg when fromsize is a 32-bit pointer and tosize is 64-bit
Change do_internalerror into do_internalerrorex to avoid warning when TEST_CRC_ERROR macro is set
List all VMT entry with same name as method generating no overload error
* do not copy the full while loop body when converting while loops into if/repeat loops to avoid
the hazzle of copying labels, resolves
gitlab 0041440
* fixed bug with LOC_SUBSETREG/LOC_CSUBSETREG/LOC_SUBSETREF/LOC_CSUBSETREF in thlcgwasm.a_cmp_ref_loc_stack
* fix for 64-bit ALU/32-bit address space targets in thlcgobj.get_bit_reg_ref_sref
+ introduced optimize_op_const method to the high level code generator, similar to the low level code generator
+ use optimize_op_const in thlcgwasm.a_op_const_reg_reg
+ use optimize_op_const in thlcgwasm.a_op_const_ref
+ optimization in thlcgwasm.a_load_reg_reg: don't emit any instructions when moving the same size from a register to itself
* optimization in thlcgwasm.resize_stack_int_val to avoid some redundant conversions
+ use optimize_op_const in thlcgwasm.a_op_const_stack as well
* disable DEBUG_NORMALIZE
Fix for bug report 41443:
Also register procsym of procedure definition if assigned
Add explicit error for unregistered definition or symbol,
for which registering should have been done.
Add tw41443.pp and unit files uw41443*.pp to check bug fix.
* extend add_generic_dummysym so that an explicit name can be provided in case the symbol does not yet have one set
* when declaring a generic type ensure that the newly added dummy symbol correctly resolves to potential symbols from another unit
+ added tests
+ add an explicit function to compare two return types of a function or operator (in contrast to compare_defs it also treats two undefined defs as different if they aren't the exactly same)
* use new compare_rettype() to compare the return types of functions to decide whether they can be added as overloads so that operator overloads that have (different) generic types as return values are treated as different
+ added tests
* revert 95ad8f16 as Delphi does in fact *not* compile such code, but *does* compile {$REGION 'Foobar} (mind the missing ' at the end!)
* adjusted test
gitlab 0039395 which now fails
+ added test for correct behavior
* RiscV32: load 64 bit parameters more efficently
+ tcg64frv.a_load64_reg_ref
[AVR] Add device information in .note.gnu.avr.deviceinfo section.
Remove extra dot from ..ARM.attributes section name.
+ RiscV 32: first implementation of overflow checking
* Delphi allows comparisons (>, >=, < and <=, but not = or <>) for different pointer types if POINTERMATH is enabled either for the involved code or for both involved pointer types
+ added tests
* also store and restore the optoken when specializing to avoid potential issues when checking for compatible operator overloads
+ added test
* when checking for the + overload then *both* sides need to be dynamic arrays
+ added test
* handle Delphi's $DEFINITIONINFO and $YD like $REFERENCEINFO as the unsupported $Y switch
+ added test
* started to fix RiscV 64
* when searching for an assignment operator to a typed pointer type then also search for an assignment operator to an untyped pointer if nothing suitable was found
+ added test
* RiscV 32: range check also signed divisions
Fix typo, as suggested in issue 41465
* RiscV 32: overflow checking for unary minus
* fix
gitlab 0041458: when registering the procdef ensure that it's owner is set to the same symtable as the procsym's owner
+ added test
- remove internal error 20231102 and the associated define SKIP_INTERNAL20231102 as I've now found an example that would trigger the internal error, but shouldn't fail
+ added test
* improvement and fixes to RiscV 32 overflow checking code
* compilation of all target cpus fixed
Add new utility function vgppcx64
This works like gppc386 but for 'valgrind' instead of 'gdb'.
Use sysutils.ExecuteProcess to avoid truncation to 255 chars inside Dos.Exec
valgrind args must be passed before compiler executable
Avoid leaking localnamespacelist field of TPPUModule class
* use the pretty symbol name when generating the name for a "class of" type
* also pass in the symbol parsed on the right side of "as" and "is" to generate_inline_specialization() which means that gensym can now be considered non-Nil
* always forward the symbol to generate_specialization_phase1() in handle_specialize_inline_specialization()
* adjust generate_specialization() so that it always takes a symbol name and its symtable
* compilation with -Oodfa fixed
* unified RiscV32 and RiscV64 overflow checking code
Read verbosity field added in commit 558a7ef1edf
* overleft formatting issue
Dispose of removed task in ttask_handler.processqueue
Avoid memory leak on macrosymtablestack
Avoid memory leak in genconstsymtree
Add VALGRIND_FPC environment variable
+ add method to reset a procdef after its been converted to another kind of procdef
* ensure that the nested procdef's internal fields are properly reset when its adjusted
+ added test
* Aarch64: allow differently size arangement specifiers, resolves
gitlab 0041468
Try to fix conditional out of range problem.
+ Add TAOptObj.GetInstructionDistance method.
* Use it inside TAOptObj.OptimizeConditionalJump method
to disable optimization if label is too far away
from conditional jump instruction.
Currently only active for powerpc and powerpc64 CPUs.
+ RiscV: first set of Zfa instructions
+ completed Zfa instructions
* properly handle pointer consts in texprvalue.destroy, resolves
gitlab 0041487
* patch by rasberryrabbit to solve another internal error reported in
gitlab 0041487
* stabs is getting removed from gdb, so make dwarf the default debugging format for most
linux targets excepts ones not really supported anymore. resolves
gitlab 0041474
* fix trvinlinenode.second_fma
* avoid illegal type case for in_ro*_*
* patch by rasberryrabbit: Preventing release register for lealea2lealea optimization. This patch doesn't skip lealea2lealea optimization, resolves
gitlab 0041466
Add explicitalignment field to record symtable and getlocal method
Fix duplicate error number failure of msg2inc
Add support for FreeBSD/PowerPC64
Update logic for address check
Add missing brackets in logic for address check.
Check that Ausable does not contain the same register twice
Add -XlS option for wasm32
Add braces for TOC/GOT logic.
Avoid double RS_R15 which was generating wrong value for usable_reg_count
Add some explanation about different register ranges
+ missing mips targets added
* couple of fixes and improvements
* factor out trvrealconstnode.is_real_constant
+ RiscV: support for real constants in assembler
* missing part of fpc_x86_pause support
+ support for fpc_aarch64_yield and fpc_arm_yield
+ intrinsics unit for aarch64 and arm
* ensure ccpuinnr.inc is found
* RiscV: check if the currently selected instruction set supports pause
First try to find compiler in same directory for vppc64
* RiscV: factor out some common stuff into cpuinfo.inc
Update code to fix test compilation errors.
* RiscV: write top_realconst properly
* initialize global and static symtables using the real module name (it will be uppercased for the name anyway)
* fix 41526: use the pretty type name for the RTTI name
+ added test
* fix
gitlab 0041506: check against the correct symtable type (namely static instead of record)
+ added tests
* also allow Delphi-style specializations when parsing nested types
* allow specializations when parsing nested types
* when specializing a generic also push symtables of structured owners
* when checking whether the last parameter is an array of const then first check whether there is a parameter at all
* fix 41504: to support calling varargs functions with no declared arguments at all allow currpara and def_to to be Nil while iterating through the parameters
+ added test
Fix tcgloongarch64.fixref method
Add second out parameter tmpreg2, to handle possible need for a second register allocation.
Be sure to only allocate a second temporary register only when needed.
* ARM: CPUARM_HAS_MP_INSTRUCTIONS
Support explicit casts for floating point types in mode Delphi, issue
gitlab 0041533
Disallow published array properties in mode Delphi
* fix
gitlab 0041504: don't create synthetic methods for an objectdef that's a unique alias as that will use the original VMT and thus lead to duplicate assembly labels
+ added test
* encode yield as hex code so the assembler will accept it regardless of the selected CPU type
* Add unit name to unit init table
Update FreeBSD/PowerPC64 context mappings.
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set nil after free
compiler: fixed compile on linux
Fix error in register allocation inside fixref method
compiler: set nil after free
* Revamped local record optimisation to use an all-encompassing scoring system
+ handle also optimizer switches by $push/$pop
+ support of proper unordered floating point comparisons
* RiscV: do only proper unordered comparisons if no fast math is done
* Correct check on published array properties
compiler: loadunits: fixed isLoaded
* make ccpuinnr.inc available for 32 bit PowerPC as well
Fix powerpc64 compiler after in_ppc_yield introduction
Do not ignore .inc and .pas files in compiler/ppcgen directory
Add compiler/ppcgen/ccpuinnr.inc which should not be ignored...
+ add a few power architectures so we can check for yield support
Compiler message typo fixes.
* use a yield mnemonic on power7+
* use yield on PowerPC64 only
Update freebsd/powerpc64 startup files
Fix taicpu.op_reg_reg_sym_ofs and taicpu.op_reg_bool_reg_const methods with wrong indexes (thanks to Curtis Hamilton)
* throw an error if sizeof in the scanner is applied to a type having no defined size
* Allow to ask pretty format when giving full hierarchy name
Fix LLVM compiler compilation after change of fullownerhierarchyname parameters in commit d57974dde70
* po_has_mangledname is set anyway at the end of tprocdef.setmangledname(), so don't set it twice unnecessarily for the JVM target
* when generating the mangled parameter names, if the vardef is not defined then trigger an internal error
* don't check for local forwards being resolved for specialization procdefs
* if a generic parameter is local to the current procdef then use the local symtable for the specialization
+ added test
* hidden symbols must be global on the object level, so generate them as global on platforms that do not support hidden symbols
* don't use pointer after free
* ensure the test tests the right thing and not the error message on missing -Sg
* indexed interface properties are allowed
* fixed previous messy commit: indexed interface properties are allowed in delphi mode (still not in objfpc mode)
* avoid range check error for compile time val evaluation
* set names of record defs (and objects) correctly after copying them, resolves
gitlab 0041565
* make SYSTEM_HAS_FEATURE_MONITOR a compiler based feature so programs can depend on it
* fix test
* darwin targets should have also monitor support
Skip note "variable has align directive larger than system maximum alignment" for systems with maxalignvar=1
Do not disable monitor feature for Android OS, but disable it for win16 OS
Fix powerpc64 a_load_subsetreg_reg when tosize definition is smaller in bit number than sreg sub-register
Fix go32v2 target by adding tf_supports_hidden_symbols flag and do nothing for hidden symbols
morphos: enable support for hidden symbols as recent binutils is available
* reverted changes after copyright year update gone wrong
* forgotten file committed
Symbol browser information collection improvements part 3.
+ Show type and variable for absolute variables.
+ Properties show read and write function (or field).
+ Self referencing symbol detection. Avoid infinite loops.
Recreate "arraydefs" to be able to get variable size information for some variables.
compiler: consistent indent, missing semicolon
compiler: fixed loadppu to reload ppu when a circular dependency changed, see bug41457
Avoid to have defined two memory models at the same time for cpu i8086.
* patch by Anton Kavalenka: Use colored compiler messages on FreeBSD ansi-capable terminals, resolves
gitlab 0041582
Declare MaybeSwap in ogcoff interface part to allow use in t_win unit in PostProcessExecutable
compiler: ctask: schedule modules to write ppus asap
+ optimize nil - val into - val
Add -Tfreebsd to help for powerpc64 compiler after MR 1211
Check all existing riscv ABI
powerpc: fix 32bit PowerPC build after FreeBSD/PPC64 merge
Fix compiltion of powerpc compiler
Remove use of _CALL_ELF which is not correct inside compiler
This solve cross-endian compilation for powerpc64-linux target
Set StackSize to 8Mb for all x86_64 BSD variants
Avoid range check error inside ppudump.
Change the type of all fields set by a call
to getasizeint or getaint to int64 to avoid range check errors
* convert pointer(0) into a niln
* allow nil for constants of procedure variables
Set little endian as default endianess for powerpc64-freebsd only on little endiannative powerpc64-freebsd machine
Set little endian as default endianess for powerpc64-freebsd
Simplify code setting default endianess for powerpc64_freebsd target
compiler: fixed ctask scheduler using dependent units
* remove unclear test (ni regression in any test) in taddnode.pass_typecheck_internal to resolve
gitlab 0041595
compiler: load_usedunits must stop on ms_compiling_wait* too
- don't pre-allocate 32 Byte of stack for the finalization proc, that's a remnant from x86_64-win64 for the shadow space
* adjust stored flow control flags like is done on x86_64-win64 for proper label generation in specific situations
* align exception handling on aarch64-win64 more with the one on x86_64-win64 by not creating a *copy* of the finalization code, but by *extracting* it
* introduce and use support_rodata define in the compiler
* handle rodata correctly in the binary elf writer
Consider also enumeration defs to fix wrong typecasting in commit 35d9f304
* sanitize pass1 flag reseting, resolves infinite inline recursion, resolves
gitlab 0041616
Allocate TCMOVTracking on the stack.
+ factor out a cdynset unit
* move pattern variables into tscannerfile
* make inlinelevel a member field of tcallnode
* storing pattern is not needed anymore as it is part of tscannerfile now
* currentmodulestate needs same size as ModuleStateStr. Fixes issue
gitlab 0041618
compiler: started alternative scheduler, also scheduling ppu files
* current_commentstyle converted from a global variable to a field inside the tscannerfile class
- removed the 'full' parameter from the save_global_state and restore_global_state functions
- removed the 'savefull' parameter from tglobalstate.create
- removed parameter 'full' from method tglobalstate.save
compiler: unified variable names, debug indirect_crc
- removed parameter 'full' from method tglobalstate.restore
compiler: fixed ctask ppu scheduler waitforcrc, verbose show linenumbers: show mem used after ppu write
* parameter of tscannerfile.illegal_char renamed from 'c' to 'ch'
* the global variable 'c' moved inside tscannerfile
* the global variable 'token' moved inside tscannerfile
compiler: ctask scheduler loads ppu files, fixed cycle check, fixed -Ur
compiler: fixed ctask reload result
* fixed compilation of the JVM compiler after the previous commit
compiler: fixed fppu result
* fixed compilation of the i8086 compiler
* fixed compilation of the RISCV compiler
* the global variable 'idtoken' moved inside tscannerfile
* fixed i8086 compilation
* fixed RISCV compilation
- removed old_token from tscannerstate, because that is now part of tscannerfile
- removed old_c from tscannerstate, because that is now part of tscannerfile
- removed old_orgpattern from tscannerstate, because that is now part of tscannerfile
- removed old_idtoken from tscannerstate, because that is now part of tscannerfile
* fixed compilation with -dPREPROCWRITE
compiler: faster cyrcle check, ctask cycle check now uses cancontinue, better debug scheduler
* fix
gitlab 0041625: fix compilation of the i386 compiler after f5cec4db
compiler: fixed ctask hash, do_reload cycle and comment style
Don't add in list duplicate dependent units.
compiler: ctask uses scc - strongly connected components to find cycles and mark finished modules, fixed reload of unitimportsyms, wait for whole scc before writeppu or finish loading ppu
Set application extension regardless (target MSDOS, cpu i8086).
* Bug fix in "OptPass1STCCLC" where a change in destination label wasn't tracked properly. Fixes
gitlab 0041611.
compiler: fixed delay specialization when ppu symbols not yet resolved
compiler: fixed uninitialized result
compiler: clean up ifdefs
compiler: fixed debug_ctask
compiler: replaced unit_index with moduleid
compiler: ctask queue order has no effect, no need to reorder
compiler: buildderef support reload, from rasberryrabbit
compiler: using an array to map moduleid to tmodule
compiler: tglobalstate: restore references to globalsymtable and globalmacrosymtable
compiler: tglobalstate: do not save state for ppus
compiler: tglobalstate: do not save state for ppus
compiler: fixed save/restore state by recompiling outside in ctask
compiler: crc includes inlininginfo
compiler: crc generics implementation
compiler: simplified recompile calls
compiler: ctask replaced hash and support module name clash
compiler: fixed module cycle test
compiler: fixed invalid cycle test
compiler: fixed loading rtl units after parsing program
compiler: clear state after reloadig a module
compiler: fixed compile fpcp
compiler: fixed finishing loading auto loaded units
compiler: allow recompiling a pas unit with -Ur, added ifndef EnableUrCRC for checking crc of -Ur units
compiler: simplified canreload, more information about -Ur crc fails, ctask: clear whole state
compiler: reduced unneeded tasks, clear program used_units before freeing modules, remove obsolete events
compiler: continueloadppu: restore and save settings
* x86: Fixed bug that caused access violations on -Os due to unaligned SSE constants
compiler: do not clear current_settings during task switches
Make document generations for the compiler work again
compiler: fixed -Ur recompile
compiler: ppu modules now save/restore full state except for symstacks
compiler: call parsing_done only once
Rewind more carefully used and dependent units.
Add description for gppc386 and vppcx64 utilities
compiler: do not save pmessage state for ppu modules
compiler: fixed calling parsing_done for non ppu modules, simplified setting ms_processed
compiler: flush pending messages before compiling first module, reset messages before loading used units, so they dont store callers pmessage
compiler: call end_of_parsing after do_extractsymbolinfo
compiler: ifdef for hard fail if Ur ppu is recompiled
(inactive) Revisions in this set eab079c7bd9d93bc3f02309e9ada641a7c43c60d,f82cc96cb939da4edee6680f28b0331ddc490b20,971d7baa8a050489fe3f45db09669076d2c61b4b,49edb0b60641bd52de8dddb80b687197c35b6f1e,314d3579fc29303cbeed06286e951ae31a2ed556,7822a90e209cc3f1cf74c0eedd100b2ae0f4b523,5e05630713d4bd9fb63ed493dcea80aa83027135,8e58bbea61d4288547dd5ef7aedc06b7651e0673,04a56e2900f80fd62e34223b3b5bc72e74c77b7d,01628263bb22eac246034a75f0e7a24b50ce5951,56447ec169ae8dc87931a296ae799bb306cd293c
* fixed cbool "and" with full boolean evaluation, and cbool "xor"
(mantis
0035272)
Check that inserttypeconv really change node type to ttypeconvnode before setting convtype field (should fix taddbool.pp bytebool failure on powerpc)
* patch by Cyrax: Quote path - which is passed to Windres or alike program, resolves
0036526
* AVR: fix TAoptBaseCpu.RegModifiedByInstruction, resolves
0039623
* avr3 and avr31 should also have a movw instruction
Increase reference count of jump label, fixes
0039784
* fix the internal error of
0040639; however as the test code in question will only compile correctly with the next commit no test is added yet
* set proper expectloc for dyn. array comparisons, resolves
0040947
* properly calculate the size of enumeration types having negative elements and a max. value exceeding the upper bound of
the elsewhere matching signed type, resolves
0041019
Fix for bug report 41460.
Solve internal error 2008030101 for constant pointer difference in {$T-} mode
* properly update copyright year
Revisions in bigsets in this set 500e29e5e2c9b1ae310bd2193c493a221e55972c,433050a2c41069ba5dd519058e47166aba1adfc5,65ef6f1f3726680eaecc2ae24a2da30ee249c54a,271ba59cf1c1780d8c0b120dff107c42bcfe1e02,53e5a4a03a6f802a5ee2217d326eb4f5af87bc5c,b407b67ca1afef62a10c9bcd06539b480250d580,21593942a16d2788103501ee1e2921fef90cedba,4da4c96349d205cf99a8aff0618315904f451935,ad2ac98858f5c422ddf016b4941a503090b73792,2f28c5596ff22f288c64a297c30b7d33a7efe284,783bbb66f9324152ba2f2914c8a2a9a1884c37e4,bb1b1bc70558bed46b5b10b03777312fb204dbbc,6b3739f26cfd6f3f4f11e7a101178d2e7130ad72,3d536547eb124b203dbd3668a56c6fb0ee4eaad2