Opened 2 years ago

Closed 2 years ago

Last modified 2 years ago

#4348 closed defect (fixed)

Invalid geometry out of ST_AsMVTGeom

Reported by: Algunenano Owned by: Algunenano
Priority: medium Milestone: PostGIS 2.5.3
Component: postgis Version: 2.5.x
Keywords: Cc:

Description

I get and invalid geometry our of this ST_AsMVTGeom call. This goes against the spec and it's breaking renderers (MapboxGL and OpenLayers?):

SELECT 'MVTBUG', ST_IsValid(ST_AsMVTGeom(
    ST_GeomFromTWKB('\x060021039d11b8cea10efe8af503fc022fba04b9013c1a161b371148e10103458101a30155e101cd01e501102113226719d701462f59327aa50142b1013f5d5d1e154b22073f263f2a0516620765ac0109404e255753016bc102e20106fb01211fb501660a650d0f4718e30176b301cc01be01cb01c501980147d40116484c17563462900136700740729801044c41fe0135d80276e2019e023e86028401b0012e9e013a408c02c7018c0108c0016ea40107d601635a3c98010868319e0238a402c001840107e601584c1316378502a5023712275795010b5547930199020b8d01930175850219d1016d8b024a870103e902830169184f7485013e8d012a7b3d3b4506af018101018101810145016185013304fd01b703553f8d01d502004726111b8d015b1b472cb1012fb701bb0137d30232791d8b05b601ad05b901fe04fd03f102077f3299014986010ac202c50113795d31630a493803310710a9014c0a5a5a202545510cb901686753393a9f0142052f0914772d193add01422484018901383403602304220a3d820115ea011e0256df03c6016a57437edf01341e3d5b9201598a024174083454460c2275b402a7017a202030f60213dc013a8602cc0359a4016542a8012a785afa013b4c1a3264b4013cee018701c20128dc010f2a412703164f1123331a0f4f55108701459501700b29810131432e5d1b253a6b071143e1012965774b030c2cc701d9025e3b2f1929c10134c7015a752eb502482968a5016e1a013bb001af026823a60118523a48419901df04007f66692cf701339502bf01ab02b70119c701cf014df30175659901e1012f5f1e173712256f10217f0a1c292f0f4a023f190c4734122a5a2a0b3f6517fb019002d7049b01a104058501dc019f01116d64216b1c41870121e5012a25035345e90154bb011b6b2ccd01322300a7013b0a3b3302773921044937030f5347250f1c4577950141016b3ecd01178f0199012cdb010fb902af02e50145ef02d504358d02521d5d0360452b0f3f3c232b2d6d0c753f93012063621c8901674ea901280e482d0922301f114f722b10409d018c011c06ac01870121292827a6010fb201e10109870226272b1f08ad018001c701357907df025ebf02704528c1019102209901451b453b1a55597913033b252a81013bbd010b0d2dc70175298b02170a1680028d018c01634111531d031274ca015823688b01027341e501cf023223a101c3024e3743353aad01880101c0018e01d501dd0105a301224b270a594f1b5304ab016a0d6b050655ce018704f201e5014e0830299802e801053f332d6afb01526901eb016ec301c00171ea028001d0019101b40112c0029702142b17050f85012e0b1b7d3a2b3d27a701bf020e415731158501d1018b02439b0103c90156151915468101be01551f43380d12591347df02f70265b302548b0127251803338b01dd01e9020f8d013f1913772c65214f221f2b93011a1129352e43135720553b310a1d35040a4b270f096d492d4e33830129af028f03bf02fd018702df039a0153510d0b2d6f0e4f53207133150c41210c315f4a03114feb0103774f930195010e1b19129101ed01250008392d55b7011645512648274479128f02696d89019301ad021b6b208d012b3d59131f8301106bb40163492317870158cf03f4028f06c80191028e01758a01df035a8d012101116b25140f2308cd014d576fcb0263970141a701098701757bdb01033540a301288301b001a103a4026f8e01d1019604d303c4062fa20106840167e40105a001a601f40236dc011b7e212a611f482007349d02dc022b193e382b42c10188015919236c6334810230103e5b4219483abc016fb601648d0140260646474a21290e20414635081993010974736421620192038901ac023f2f303c493218105986014f19000313264b020344b302023e0c315e84028a01df02ea027d230f2c7f679601b30189018a01f1028501233285017bad015571d7012bad01798301cd023667ee01b10148ff010b5d296389013d5a2f041b58a3011e5b890167156b66095261380c1855149901b601b3015450171c3283017eb50109c102a501f5028b025fdf023cbd015183012e89010b3b20010b636d670297012d1d045153125d57184d2f7f4d2feb01034f496b1855692783013f090f2b63067b59d301d9013d7f2b040e3b472dbd011e351bbb014aad01550d334f281b29d901174f43a10131bd01e1011b0814119b02eb021ded013b291289015b7505263b31002a270d43e20167543b0925688d038201ef019004a9028c0229c60146a401940118d40131ae013c011e582f062bde01d1011d1d781f84017ba001f901640fa0016c172c161d68488a02c802649c041390019701b6012f2137b201290d1a3e3b2e5804439a0179163ccd0151c4018101329301b00506880159b8012606254e1d8f010370262a4990022782033e8a0138223cb601768401b2012cb40117ae0166ea0202b201f201b20140e402e901f00165dc035b46129c01aa01429201038402525c74374cc1016c719401559c0481047823b20236a00270a202c802b60380037a38b601179c01499201a9014ca701d003f102a4022f9801900113246e7d4e0c3b71076b064f3a2f680aec01c201273054449901701d461ebc01df01c201519601620e8c01cb01420b6a147c5a3d9402340c70850130484f4c19111c1a72657182018d021205550256a3010c10be029c0321106d26d8031c364e0a8701030b702a0211d40285023929c802e5011d339a033a91036a0e072e2e061f8a020b423b008001100538163184022002287c3601507b281d711470a70134639f019d058e042d960292036c4bcc018b0174a101e701cf01fa0119d002eb029c01c90871062d2120930223092b01346b6eaf018c01210d698a01536d0a91013608bf01cb019504c403111e7258171e202a232ab9018801b90126138f01038201ef0107162be1015f4b5b1f2806398f013beb01d5033d83028902890151490625ad03f90189019701b70116158101078c0135084d1f3a8d012740df0128ed013351370b515911b902ad03630bd9037e351f0623cb01015d491e412f0129413f87011619ed0273002d63330c4f355601650b62a50113f30124093100340b33072e9302081733c50216af022b370f0423193e143f0f18493532654f6d3e7039749101793742392d17791f026e0f7846715d610f2c473130713f162f239b01161f2b8b011991033e472b5f99029701296f245f990163006f3d0a096b36213286013c1c43ad010aa101e501ad01354f05614d65a304a304a702850401c901644b15af013c0b4b06167b460b1e7e035d82019302e801b10132890258570781014b4f5b1f59187d674f066a2569083f378f04f104c901f902247364353551097d7ba5018b0139758901772bcf01448701498903f5032a232f1e2d6718253f04022798010251172f4750d30233f9021839751053870131dd01ff016d9f01b1014a415110a301af02bd01a503156d242b493e1739860141113a3e332e3e2d6712692f1d32473b3a53b9010c810131f10118536404b201d3013422211d2c55257d4608287e1183017e053350566500607bd601dc01d302e2010a783703675783012f0214533f27671c244b85017d5919478f010a3f2e11254d19507f18a3017b8f01d301339b02cf01f5015509e101a50143021b4593017d9f011f07415500cb01c7018101118b02d101fb0351c70263850128f103399f0138b9018c015be2038501e60141a602614e17800245b0019902a2028303860253c801574073b6011f82014e80027c7eb6079002581fe40116d2015450725e193ea00405343f0b58160ba401af01bc013c7c9e0116b401bf0144183f1d087569b7018402970298010fd0015c0f222c1d9a01800126320f1e463b374a380a5690016ef0025dd402470450300bd60147cc027fe2022346a50117762c003cdd019e0189012d1949562714771b746536755385020ab503c1019d01206d5563185f3ba7041fff0184018f01023b5e6f005d6c17783d2260ee025026ca019a02ea01e001c402de018a011bb80264900133c002428c02564c58e40158745e9001ae0254d4046a9601fc02ec023cae013f260f62165d663d0e6a0e616c2419343d052204033c6b00622e23d8023f08540c015a5994037da40113920278b001ca01406c8401641cc201ae01940134527e0f362855420e7a50003e3b08394923030892015bd20335074c3267d4027313761c8d0180026922713178a9028d01ac02cd029a01a90129073b3b0d397b510039440bce012e80013fa20198012a0e5a607843711249ec0122386c411836421290017d9803213a29094224357c4d90013f213626f501b2026b3602264b6f221b231c2b3f221521140e2b31071a4b1e04230f1b50bb039d01713a750265334975611bf501001344291f0838423c1a8e0161c602527625d6019e02e402a4021e789e0102622f083e100d90011b362f0f2e1c0922dd01de01d80285024c341ca80115426b19164e2d56392722285584012f0f261e496a390d181c5378311d0b2e5b288f01b1019801de013f3ad3019d011016e901a602c9019301498001b40184014a74e5025c2b27323b393885016f6ec30101617cad01065f8301e6018d01286dcb01c3015c0550b50381010b2255250c232f0a81018d02107d2147a503d101516711b50139735d59cb010214512740290b23794327216545d601b501f20101c801d701a80265de0274b3027020163a3a130c220d0c0c0316281ce001419c01e102c803c501ac014906264035330338b90138ab01ae01e3018c01eb014a153f0d46133b04388101130d43066891011b071c63a70184028f01f1016cb702535941910189028b01534b798b02129102b001e60189017428264e02960127764d3505202e1649645f6b546e3d48451030ae0153c101ff027e0022bf010d093d391b354e244cbf018a0163ea01e502048d013aeb02c10189010d33530a3b9b0157c602c1059302eb018602f2016de6014f251437db01690e1b111cfd01770a8c012ddc013901380a25c201b101a2013c600d22d701df0122135e3680018f0111434205250731db0123034c21397b1c0d1d0c5bbf014c75c4018801b70199017ebd01d001c60112660363a6020aaf021bd501c901242f476d4d1d2fb101549b022f9b03610232622b8c0346fc03b502c602a304017d5d1c271d26c9019d011ee901a702e1010bb1012e4015dd029b0108049401d506200ca8029502132f3d1d3a451be502e301f501612721242f1f1b2f3e3939262f7b2d0c17d901ef011221310e286319571a4b1c4e2c011d3d242d7a5e73732dab0174a1010775bd03fd0255890275d30151e7020c9b015b9502870255d502e501394dcd0129a9019301a7012d0e567505401619489d018201c7023e3bc70128da01a9012f6995017935136a511b1d8701f20308f3031b51d101b10117554781016eab0229d702b701417983015759730cb40123484c4007a201db02b4072d082a3e3d130e1abd01de02496e250538444333014a9502c602b3015c31273c4a2522392f0c278f01095385016c9701697c9d0131b301f201a502f6019301225f632708003a20003c7218d2014e24348e01250e3eae0125a101280d3fa701660f1620510e460c2c36413840235a5e795c86014da001f6012cb20543264008006a3b0c3e061c6a411e460d166c3d1c420b18743b1e400b186a371e3e0b1a6e2b1e30091454230a2804285817242211305c192424119405d408ae02800280027c86018c018603c0049e02ac0436b201ba01fe01f401c2011c7c6e7a400234b9011e05c60418a201ac013a0eea01bf0160116820b2019801465b900108fa02b4024653f60181013dbd01669201ce01670a1a14270e1e6e5b1216103953ad01464d191936470995012c4fca0194014811487f2212409301421e387d88013414216a607f9a01141060756e5c20216d9e01d6029f03382cc402e50216129301cb01b2017bd0018c02ca02cb014b87015439208001ae01f201bd017856320722c10113eb01c80162ac0141346b73182da1019201788a01435855492232f901b0026c6a492d1c2c7592014f2823251d371831498501349e01c301422e68a3014a5bbf014712b602b301df02b60142b8017f6b4c4c234ecf015417469d0194019b018c02075221371d7c619c01e901d801778a036b265d239b01b602f701043b320b9e01599c026ad401c801621292011fa2017a6e065a2b9c01e302d403db019e01e301094119315d266c5d28ad0155346f7e078301075fd5017977e70108d902df01e301048901475d3a10aa01e201348a0170fe01645ae402cc01a6017e8402065c4c3072116430ac02dc01267a7a0c5a5c709e030c436220960137362e1d22c30102a103d005ae018b0220141a299801425c9b013c22ba017b5fcd0138498401e6012d1c017895012c0f8e02d101238301f601281676d901aa015e6bd60136646ec90162367ff80165032c12635e72511826b901a0013f571681022986024a6013980140be0148262d16183c68208a017c305c26a4011fc801800114326c06f6019d019602684e0e48ac0176e001009a02b401e201b202086039ce0114266816bc01692241df01d101076fa101af0214bd01a402b3039804eb0466e901d202df021e5fac01c501b603d302d8016b40ca01aa02479d02322f9b0190027b0c2c4c081c480f930170190e444112440114648901182a0c088e0137384a2d039b01621129c901ae032bc002682453f4017e0930450d3ff4012248de02ac01579a01611daa018a015c1aac026768021230003f800103383e37344425405a3fb40133260b74f00174487c58b30282015386011fb402a801432ea40115006834010a5d56087837586f1669ee013bf20158f8010f421a04581ca5011e0205ca01184fa00107b2029c01fc0114c002724084013a18125f820133a401201d4cb4013e5e4f18162f50c0013062540a4e4246f8030e622edc01ea01002aee01709602f402e4029a01b601ac01254c363f502cca01be02e001d801b20132de0107f806a5035438860110cf015508b501665932066b4c0d800120739c0239a8012c47d20183012e92011d6aa302018401f803ea016e5ef40586028e0235ca013e960182019c0194025f2a2ab80115ab019a013d2472331a2e90016532571d502c1e7aa4023d0e1a9d015a4aae02212eba0111035634614dfe01a7012b538301469401800248747698011abe01ac01ec01b202fa01a40170800294018e018201285415c601aa01de014eb4028c02b0024ea802aa02e201279001349401c40250b2028f013c9201290656291040040f8401310320181fb2016612023ca101135d4305e1013dc301134040880106dc017b2f2134123a82010372621864a0026a37f0013268584c661dd402ef02aa01125c3c44682da201a801fa046a02249801f001a6016a13a2013ce20137bc0254a00123ca017d3e9b017393038e015bc701423d553c274729002b134e410139bf014a0c0242400402634e6728221b314a47d603b302ae020a103540524904be015cd00116a00148b402337e88016410820495033e08024d1e0b1e4c8c02230d46320111477a60434908a901a60247085602eb0136092e6c4a0e346887017221271632e101e0015642dc01ab01d8020d03a701e00224ec0229dc0156a0022d50398a031eec0221b0026206260c1f900378e6016e900105b00374e8016e1b562e4d3c1e2b8601407f9a01301d72306ba0013c8e018a01473e401f1e1c112a1e1d408201151820031a421326210a042375484d69410b84018601066a509a01bc017c9c010626423554ea01da029804dc03cc04820562299801402c549008c0019002b2010930583ab4028201c601042430195a204ee209e0039c0232de021505657a79f4011a8c022dc00197018e0233c0014e66621e623a318c0104f6019401ee0243fe04a602c4033604a802c7890102030400050405020337101f2168190f2c0104d464b9b504004709460a0201fe01c3cb0aa6753c39d20113de019f0156126a576e26424d56130f554459253d20af0119636aa1018a015d05c30185015165108302df013f6704c501638101104d33525f6104bb018c02ad03482a3341d401e701c20163669902566f361f5c9c014da301f401735ea0014fa501b201115647125ff605653800006437107e04331102658a0208f401462a44112a693c6c290332628c019204e001b401cc019301b00414b401be01e601005e628e02781d5c1eb801d601603736105e8b0106ab016e554e7c3b8701a4023f0a86010c85019e02481f8201307b9401461a50cc01cc01ba020e8e026450a9012581016d3f7fb1010187014f89011cf70163c10250c2020f4cb10160c5010554713f3739bb0134153301225d84011a8702611e5f2f5827002955128f016812612192019d03667f02c701ca02bd038d016373a101d703b90177bb01198d01e101a8029f017e87020fd9024cf901e201d902d601714f47182d2d1c3847ac01bd026a91021010632954fb01af011b211c27271a6f9b01741b7ca50144343c860129910153437902173bbf017f7d07df015c8702242287027571667a15b201a701022f478901131133005a6488010b50194561290a45151e53370c2d1922493b293f3c474f262953d403c101d903b001e701e3055bcf032b53d901456fc303fb0157e30150e90261ab03fd042d87053d1d9f0226bb01432b42168e0357b802d5023c4b3b28bf0137b8014100336c1e724632d601ae03aa01dc031ff001a501f0013f01679c010568fe01d001126e9202b801149001404c9e014e2817be0184012a28015ed4010b98016c920126422960128802c0025c329a01e0051ee40311ec0233aa0197013acb0226339501005e8d010e9501d601610f8d014847b201573e3f7c7f5a0a1e55012568b2019a022aa203a8019e018e02bc046a22b2021f7c587a0a010494dc01f70e0300134a18490152db9a0186608606810296016dc003e903da04e703e007ab04a402e50184028b01c8018304a8018f019c019902f2011bed010a36d701546961642dae017f42112707970176161b172e810284010c7f1d20f50182010a564a4b5b89010b16b1015bf1025443d5018c0123253041373235211b574e2b531c3989023d124dcb0154275ec0018802860234132d00f901f90129611c2725169d0191027734098101b30184013b001773152e631cc5013dcf033a8d038e01b104a203779c01b101a403c5019e02cb02ac069f0198014bd601a102d4024da202798201fb01d20525a20102fe0235a801392009aa01d802ba02f001010160e54ae43c709301b602a905b601e101bf01dc0179820243181b4544ef0142220d2744930135174e8301542e15283829713b1a5598049906c0048905ea01d7020f0f4e57246f17155acd0372a9018402f5011b5dc90159a101af01a701ff025c15d601ad01db019e014700172950455936538b01101b7d46113b66b5011a244629221811820126777015746031573f1b7516bd019903063d3a13470227339501830202316915ab01970171105f356f0e97015c7329ef0116a102c6027b8a02af01800115840260b0013b741e2e0f3422180f6eba01de0445f402248c0109d80247ea01c1028605d50182069901b606c4018e059c01b801396e4a396c64ac0122ae01393c49010594a207cf1c8e01fd01132d0e2c87018002010400001d3800001e370104deda02b881031d0103062203010500002a043c7e2185014304015eabfd03d1be016c20043740290927dc01c5024a0b1b158001db010f1fb801e9031bad05174f2f1345f3021c8b023a136b00152f27fd01342959221f23f1018f039d017f0a312d3a9302112109076f11662d16ef023d5b4b4287018103f302e602f8023f8a013714492b1223af01559301db0160498d01586d7703673565087b7d65066c1c011782014509132a23250d2849196f6266bc02403c318201304c2f0c28605f6e4706680494015443c0016d1121d202af01030cd50515ee052032ba010e1692012f1e0b5c7a2a2a42172e2c02143c21105e2e546e5ca806a403f206e402e201dc02c2026803a60295010104b4ae028907a101729a015d081301048a0ac23c000029032a04018902efd903fe284acd021bc50144f501c001dd010b312c3917139a01b9017213a2059e02fc03b402b201ac02523a50030f48581c3827ce013cfa01358e0110241d12810161ad019a018f043f1956af03d006b7065c46a0029303208f01f801269e06e90534131c38f601eb014c3c95018002b00183022b1fa001ed01271f303d96011379134139b001fd017a2430338a012e0428df01601420cc0167223c0d45a401571a5b6c0406f90172105d230455250003cd01d802a5032a671f7990010f263b392f03752bb401613495011f65b1010321401d3f0a08a5013e9901055b7050b202b7025c0ab70125736fb202c10266199b0129193ff4014350141fc0014b6a60610e575812b801ee01267e900170721c82024db2010e9803b8019201bc01980126900127c001d50108672b6110493d9f010bbd01b302298d01619701af0204bb0275c5018f028301bd03779901ad016687016d74374d7931dd02379701bb013e73496069c1011e692d1dbf017ccf012249385b8e01164e9101cc019704d00123511254e90122c302359902e50216b501518901725d29274d702acb0115733127591a0a748301800287015a372d3712168a01558601f501ae02a90182016101355ddd0138d70283012a3c432a3d2d2c38d3018a01597ad3012a7d7f309501709f0152230a7fde02a601820149810136d902a50161552fc8011e3e699e01339e014d135d462b6813a802ab01a802b701648302174d554c7b09453b394f08c101bc02a901a60151d601fd018c0203a2011c169e0221580c22302cca0147a20326380680016168d701db018a01a90193028402a001900123289c0194014f504d394b6e2a1ef101a80199028e0216141f26a3028601bf01860229ae014d4c1ddc01b701f4030638a301f6027ca401079a0238bc01a1015ebd01ce01890142488c0131684c26508e0153cc010b7446960255dc019b0158178201a401a80118301574386656225611424b4c0e526a1330d6018602ce010f408b010104aacd03bf1100019b01439c01460104929701d11e7083013510397401040000171a011a1a330104e7b901dc2e25104f5a76690158d7cc02a03d73132d4507799601ff0152150c477f338b01870167d1015c870533a7015f77177302ab014ee9016d5d235148970259c9022cc3010ebb0347d701c101c9018701930304f1016ce30102e9016ba5015fff0101a7036093020abf017efb0172538a01091e9b02bf01317bb7016115c7016a14f801c701f201a10142e5012301462f1cff013c850190077df60273be01d3016ce1020a31261cda0145da077dee014cac0315b401634835b201db01ee02bf017a4d7cec036c88010da001dd018201c1023e35a60130f2010de601768603e1013ca6018004fa03108a013586027e8e01266a81017617c2014ce2024842d20228da01ae04568201a402b001078701019802a86bc50e608901ec019b01a001e901b301cf030ea90121052e6bd2058905ce05f703a2039701246e4410200b174dee025b0c5e440a2b0f11990198023e0a600a594e0c004412477e0c3b78a30113a801264a800183016ac4026d94010eca015c8001f801ac010618391b9b0173830143b90155758c01bb029202db02187b2d799302db0227770c8b02aa019904358f0153032fb30138071c561c09318f018701c901163f8501830159231928a702a90128cf0145f101bd016815375675453ddd0136a903d102f10183012147d302a102d703ed03d702fd03779102399b0236ff027daf014d9b03c9013d85039d0353e3018f0131024d4e6b112b5f343150c5010c674153a701a102716f1281018a01b902b0019d010557a401dd01ae01e5014e0d6edf0480065d4f50609b02b20229231e308902cc024928351d1c1ea901aa012e3e033e517727006a84015724075d4954295b4c99015b84011860192ca302dc01ff02d001930126b302058b01bb014b0ba90248fd0108b904be01d70354c103aa015d0aaf01410e7a698c01eb04e403f902ee01a101229f026bc701132d3e0656aa02ec0117b201c101b802eb029402e5011a9701a3018d03890101d301b2014bc3013c01e0016919477f4321214a1a3684013e17dc01a3018e029501503b7c79525aaa036e50540d38712c07c00446e40178329e014e3a3eb001044a6f86015cf801027049341d6c24d4013466ae014c569a017201d401d101cc015da6010b424e52168c028301920115b4011c12383c149c01ab0196026f2a5415573e05ba02001050024fb8020c3c0c17622c5d82023a08460c3fb401142662c001d801ad01dd0135d501ad018d017c158e019402243582011615bc01163b8801220538182fee0178439c01200c07960190012d1e2c52b50186017e314e5c3d2b54dc01f40148860273147a0199015e7eec01a6013e760dca029001c6019c01e0018c02ca018c0158ba01673690012f0a38256a413e5155446207581e24920105405fbe02d701e4032db00410fe012eec02b801ac0294021a3627601e349c0246a801609e022cb802577061013ca048ab24a201474c7739b70204fb01a703b9021d5f2eb301739902cd027f9305c703a70581028102f5016322b501ba0185041a572a4792018f024cc70118bf01658301068901b40131b201c602d60216940142820125c00167ce012256e40160980133385d763bf4031d07741a2f3404072a28392e2c3e250830475c6b016616c201f2015c1488013b6a0ae604c0017a41b8018302d20111ee02b601d601ba011bb8015a58bc0240641d01a125b39707879b07460acc01c901761fc8016ed2118c030b564c339a02b203139c0166ee0114395dfd012c692612173d3c714335262f604a2f523c3e55462a1bf801f6017b585101061e5201f001bb01aa016eb4025cfe03e601f004b201fc04fa042805152ed6018e029e01486a011028300f1d140cc2013c1e5abc01a7014c8c011774a0015eb4022b9601224e292c4c1936400fca016ce8017a43203c411c44156cc60119302404227a1f0a3a8401191828021658ce01c4070ab402740a155a2b06382856de033ef8020aba023b0e1c7eed0366b601fc06a50140b8012318be01e1010e22ec07f501ce021a0a8e01d701c801c301d803ab0266cb02d001110a52200d244429449a018f01364c8b01e601870106088701138201290a067c5b065e0800ca01b9042c0a204e0722ea06e30114880514001af50224213c3c2844439a021540525cce011eac024168611d0550a60214ea0125043e39248f010f08ac01425233703062683821880124c0017c141a5e015241321ca002f7036eb104d603176420081c57a804cd03e003711a380073aa011310c201170334426b0395015097037435660ade019b0217f401365ea810491f0264381f14346028002a3f2228c00842ee0972aa012f9201297299049d01cd018a01ed069c038d0184018301ca0137ba0129c603d2086a5ff207735445708c018f01602d092a28051925340ba004a4019f0139163d2b0f86018101b2038c0141dc019a016ae402628d01c003e703ab0142e101a7025f518c02f7010d1f70e101450c293a013905113089025b3b3d2d990124a4015a50ae0cee036bda02fb07b702f807c0020be403f0026e227a0346494e6ad4010eaa0133406d11444c700124265eaa08ba02a20d76880a33121c243d09196a850128ab01b8016f380bee01294a2c2c0b6aa6017e709601a8016c2244cb039d019302d0052e48153de001ef04461a235ee4028e019002e6010d18ce01db01ba0117421e52d201c5013eb7016b6a648f01ec01cd02cd011b18f403c8028a02c203422216ae0227ec0348920210a2052a1e064607de0228a4028e01ae02058c014bae012a1044db01441017222e84015b1054063b1c42011a8202199607790078122fa4081122f9010263541860850180010144230110d00258fa01485c2eec014c0bb001d201f802dc01689a0105a802f501ce093c1e368c0121d2011808172cab0157a401641120e707af044514f5089a10e302bf01de02ca0163bc01bf03ff0179d601d50138d6012fbe0382023bfc0306e401343ace02a0017ffc019b014706b901e7017d594a5b3320532550e9017f4e8b01341a142384013cbf02b301af03900600e60110e101fe01cb039404ac0224a8018701516fc80161295e3237686034274caf03e101dc038802539a010e7a1d1c2eae0139b8024986017d01635025625926c101c001af015bc502204d7435100a227faa01eb04a0029b010305451d4231171d616c0d9b01315dbd025d3b1f301d31330a212a181a0f5c2f26bd01322d19b701a6015d0a8c01b602e4014608c001bd019003750f5038658a01092c280c2f5cdd01a602d702de029101665763486e97010830645b38351b1a3b0d676e4d773a193d7537c50251e5018e01ad0136106037d80281019a01e70148b70199015bd6017a8804419c033dfa019f01259c013a61ca02af0127e6014ee301a204d70191019103da041f097c9801c101520f1d1046af01303b52cd014f2d37d6015f84010c486f28cd0139c601b90142232db902cc01af011165517916a502b8019503f802d30203a503ee013503ed01f801c1025a558a019d0172fd01b003b10134e101ee01511ddd026c63552b3c22a2012780019d018c0131214e5e1f1285010a53578801778b015e5b1fa7019602830212430b85017321b101af0135bb01548103aa02bf014d4591016351af012d411c9701a201499401ac01980290028a0156043e514403da014448740484014866621e1848dc01ae01cb01b701113d6a49b60128746a655c744b2a1e3a5e34d801045c29002a120bb2012b002a1019b401559e018101159d0152db027b8202703fac018f017cfb01b1019001ed02b7018a03f7024425bc015ec001067a52bc010d2c7cbc0107361a353d738601439a010d393e204a7d248401132c7e5b0034122fd201df01ee02cf033c93014dc101800153ea01732a2b727344a502c10127002f960151507b09512ed30259df011c7f1d9b01667112a7015f7b0fe70294025509e7026a1750305a626ef8028a029e019602de02fb01dc01454e2e549c01d401693e16940131d801b201e002c601ac012892025d541ac00119e801d8013c06d00171e001272b7b1069da014ded012e06910182018901a602a1012426a8020e9001ab01f80125a2014d9e01cb012e0d3a4c2555dc03319a038e01740fd801860152024049a6014e36b901f002a701a0010c96016a74120f7d7b5d3ab3024db0029d010f02671364a9011f8d018d01340b54fd01b2026e8903c301320d1d1f74ed012a3338102d1d404fe001b1019a03b1011e380b3d3613c2078901b401377c699a01098001697223fc0111fc023440538a01458c010d9202af018e020bfc02663c2d16e301f6016ffe0245b40199012e142f276b5a4101354902553e337a601e1d51250e1f90012831316907199b01167368bf01d201bf01016954712a16a402e9015a4231613425fa01693c02284a0f49543d3941650c97014379930228ab01296128b50133b301169f01b201e10224161b25223928372e0e231d54632e14211f4e573a1cdb0289022027d802a802583d2b3b785d181c0927624b1e240f2fa6028f011c2e0b27a801211c1c01438201026a8e018301688e015ba2010bec015e6282029201e201ea019d01dc03068a038401ac016aa8011bce013e74de0143a101ba03cf010b1a6208542b1f3d820289011c38441f0b4388028f0136725a31396b8005d302bc010eba02ab01174146a901e402930194024f8a032dfe01100126d6012611341a33a0014a386039442dd40162724f7124ad012e0a1d5c1a060c5d701838556c3636637615384c3b424d3d35325c2a1dbc01f1010d960466b0028403170e9201d80142aa011b9001f0018801165a564e62042c357c23d40200800466f8019801b00121b00156e601fe013d38422d70ce01a6028c02308a01603a5a7c186647221220401f224ca7016696013b132c6cd0016134256121103c58371c91019b02150cc20180038e028f0194013492016f0b334cd3016c8d0109f3015ac701034b377be303d5022ad501d40417f904022367147c559e01bf02a501242d23213443ba0131bd0124b701b701c7028b0b870132425151380e1a4f5a37238402f3029205f10b8801d30190016c9405c4150a3db405a901d303910f22070931230679ef03250a9f0191036112276b1e0b270f215f240b133b381de1025a011f212a2d33281f291cbb02f302be016c3a6f2c2c242319272e233c1646391f25d801bf0136364f421414424fbc01be01414e4847ac02449a02e2025746f003be10ca024b70c003ca07dd01d8032e0c9a043302029e02300204ca01ae0b2100f701c006dd038c06d0039002d002ae01f40298014a00709c013c14279802722e6de0018001fa01940250be015f40643732522d6a47552e683b4e163235120e5c9e03b801b402ea02920294043b2a8a013b1c2697013a125834188e01279002840188018201ee02da04c40180028602960176a201e80234e001605e8c01aa0114d40160ae028603e001fa02940288026612cc0188011338242b9801722146282b8e014a678403e002a402cd02b70238c901c80134685261592ea501e801501c2340328302ee02f801a302aa0118b202e40116110540f002be0319303e151a34492c77ca02c90bc20e31f00240e702728f019002dc01b703e0048202be08fe07fc044f8001b801a202ab01a3028201d10167d20122148c0597086440121b9901633c5f9c0160101997015f36579a0160101b97015f8201d501328401258f011c2b08fd01c1017b40652a059401cf02aa01e901ac04128803d6025f5a6f5f6a66434091028d02bb0132c002a0020f60293012208501660070d502ac01ce03d901223c614866411624ec01576683019e02d801151e5446ac0160b9019802d1052af705c409920b9e07a606af0af40198018f0165508101c6015cc20108cb03c901ae019702fe02dc011f66a803880231390e5fb8017209384701a203de0159d8015a5a4b5b62f101b6017045b4017c4cd302b204d2068a04ac048107300a33583c5718202942d4015eda01b401477c6275321c9c01727eae013974443378800170c201f501f401c602b7025c261035de016bda04ee023f7ebb02a501e1068208ff08c0108007de036fd801bc04b2026adc025bd5024e2ad20dfb19c401c1030499015c0c394c2a0f6c543a23a001a8029f06860cf00db207458a01532b522eaf02a8042f1976db016f3b397451293c73890493028104d6078d06ec01a901c402b812880ab008d51178c70240048c01b101c001ab03271f0a21ff039503b202c504c90175688101d20386021e3c1e134e7a1c632c0870481f4cbc01a50248d3019601705d800130203e17f001f801716efb01d101163331173fc2019c018e019903f20620144461ae06ec03003a3a35a8017e253e910103761c3b121a0e2b281a201909bf02a8041d0112168302c2039302a1019002a8011f447b4ca902d501e004c107098901c8020ee902211e9001d3059a09546f9401606fb00120126ead019601609f02c40395015f70ad011d136dac0197015f9401e5017b4fd901d8029a068004e207ad08e611d40a07f204860ea208d502d404e602c704a2028a01022381013764af01a607fc03bf02de04f006d2031df2013e2a2d3b16a901380ff4017eda023c5abf018601456728b7019701259f0182017b31e9016c81018e015a629e01df013c163a22032c66ac01ac01414e3425e402d2029103f005a108c101c301e101ae01da01ef03ca14f802b016c9015cc0010d0a860263a8028101b801352253550b2c410e027a4d5e1db2017f10068e0133160e502f143e681d2018ce01406a2c14284b04a1011b215a578e01270d472a399c023f561e76517a016a793b1c25503d350ee5013209bb017b0d8d01343b32300ca201a203c0019701bc05a619ae0ff802d6011e1504b307220133af02d50df90deb05c103ab01df0a426bfc03b2022340342432399808f604d81198128c01fc0183018302725b04af0130002d0b0ebf03ac0106068c04170103860147003e540a686110a80109a401d60321aa015d0c438801fe018a027cc2028a0120b0012d96023a9401702c2b9001262e6b3b5d227d3c0bba01af01c501ae012f011956671556b9012e2e131f96019101da014f96019c018b029e029c029b0253572273be036f4ba501005f548f01a8014134ed013bea01ad01408701af01124b8c01b1014c2a081b93014f9e02fb017a4217ee011ced017b45af02ad0fb50e9d0c2c35b9019f012f36990185019f012609311c115312103c8702420d3d4b100c40a30126454e0553830ae701b8018908dc032ac60140144d8b0ab70106378d023103387315062d29070d2ea707a70156f303d005645cf503990251f801870aa602324a9e013c0437a5016c99012c023481014d1f042fb8011037de022d0c22305f5e82016fbe07a203e4044a106ec803900125980224a6019407960155850382010310f9044b000031371b3703453eeb024f02b502d6034019960138102e9d01f2012452260f7ce0023c4798038403aa01708304d40128055c0a5b3a0a1540180404412e0207700e7317074253a2010e0f721806275c9101e607608001e80354a202ef0218120921be03bf0442b502de011a8a0272093a7d350524fe013cef06ee08da0af80a37608e06ec04d201b7033e05940156042402256e4ae301f403e009fa08c406f3078e02e40108466cb101463c78b601970198018b01ad010636bb02a203e60e9210f703f204dc02c407c502a307b402a703e802e202a402a102e202d602f7029e02e501a603180cca0185036a679c02d9018a01840179900139230a46fd01609f04c40860a301a003da019701b20249254cb701dd015da0014c1e3663d0014f274f9d0140ac019c02b60136fa0547b0013301006e350218321d4a2f072038493c122c1d46230500688b01cc01391227e601230c01e6011b141454272a125e2912207e17de0137628501e203bb0192023c8202c601de03ec028c04d005d005d80152d0010cbc028d01a602fb019e01990214732a0917093ecf027057da011ad90129128901fe098a010dbc0116bb018a021e0fea01692af70111f8011ccc012f263a22ee0278a601d201ae01481d4065ce011fb402b103c6022c5417291f09574ecb01b8029b022a654a39800233c605e2010f9201148f012008203c55d4032449d0017661900124143879ba017af601ec022d48960174dc01ba023680013722c401b402469c0232ae021d84029e02ba02c8032f8e01478002db013e10385719131237565534ab0172bf010f3d4247074568fb019602b902ea01a301f20161ac01d901521b194788019101247f332d125957d9010e75b7018d021969a801d102cc01a3018e032de60388017c9d01ac01121f14200fae016a1042ed016b753a8f01b4028a03a6011742cd016c56ac0237e101c2013978c402b50256c4024f5a2a2a7e86028c029a0250ac020bbc03e502a406e301c006cd02ae01df01112d647703454e4f688d0264930411a301749101170fb0014ec802d501c902c20191015bf6019b02c20168e50397022c43353ecb028501dc05d708e602f201ad02d70120049a0289034f41840181028a016271aa01486170362dea0179b40116102d46122af2058a0486016f519601648301f002f2020a388102880224369805820584010674480434443c5c16685ea8012638130e37a6028f01de01ab05b201b3013c719c01635f43305719bf017e4289017b2227a603af03a804ad03a204df02ea0153e0010f0c2b39288d011d238b012a412b3a737b141326189e018101a201b0010ea4018602e301a302b502ee01ff019e01670e17412d708f01f60177313b1c238a03e501421524341b474e24194fb8029d0148010622860127283c3441ee0298011a39c80142b701630e23bf015746dd02e602514bbd03c0012f1878741556aa03d7012a1ea2015186033631ce010b121ec201bc083004fc06af0113e101e6036b920b83028e02b801ce010bcf0100e1019901141fad01cd032276c901263338b508c401498f03860ae3013a9801fb01ab054c1fdc01ac04258901de06594cd00555e20160e30119f501f8064d14ba01d0021bda028101e602c301b0011f0c221427de059501b6015aa101632bc30120070f4f230657f7029e01b7014e1247177ba701a301a601b9030118f102ac010800a60198010202a101e802020052232614166c6fb801b401575612107e7b208501b006ac0171ce02d7011310a30125030da40191021914b3011d0313b80191010b8901ca01510c5e074c9a031d2e1e21a2075a910115064158060c7be4032e0fc801b6028801445c2b55f9018b016297029e01341134a6013c217652e9016c2873d6022f16320dc204c6019a02be0105565236d4029a03820130a405c608180dbf05e1083c55ef029303ec01c102f4018e024867c901df012c29373dc201f1012461880155cc056d31e002f4011d0a42460b0aa50120001a850157411a27ba0345668c01618d017a23f30187042bfb012e3996011974b204a60190025856e4012380017bbf0183048b0185020a2dc20111fc018801391e4c28108a041a0120ec020964190412ae012e030652b0021b262908cf01b2011722b203b1042618b201c80115465e067cab032823d9012f04476dbd079a019d01a2032b283017cc0238c401c0059202b602064601578902ad02bb019f05c2079a01fc022109a2011a22a4021516a80297021411595cd608b00a6f348c058802138d02a11a33292e9301483ec60321021c021dee042d2e960485021410da01480e1ff00162108a01840eb2085911f30104e801df032831c304e6032918c001cf01d91320012311076322032527da05a00111321a2fec01389203a60138265fb60218bc010fbb01569f027e185798020656b805980ccd018001d20175101ad4012f3a8201a3015a3967022067366c31d602ee0455322e8c029902704ccc022fbb028603bd01124a420f3d2850e402bb012a35c7012eca019b012a8403572292013512380b2caa01331050ea011f1426ae011a0112aa011f08200c2d0842b2021fe201433c2166218a03438e0146b4061fe402083c34121a860238424c8807376e506a04ae0117a8023962530e0834a80143ee01549e012958e7016471548f02321f2d1625273e83015e2b0a38094b820107092d7e072845a4010c10261b7b1e33a202a1012010032d4a5dd2018901ba06b507f201b103ee015f3b633859444168110f2732197e040e1d4721109b01628901603d2818413330092939505126102d33222b460e3b353ead01c4013735334c9901765d42160e2f1722571f52fd01da01d501535071612c593812042d604238654e18491f76e901733f40d1010f79b201df017efd019e01105cdd01267c3fae011c3ee6021e9002542f6932a702b7034d14752f0b0625470d052c5e12156081013d3d1036b10166147d29145de2069e01b6020332c802d802033ba8016b9201830302930196029904bc11800186013f6c9b014e21640188027ee60351bc01788001197e5c800188016df402331877d40134a002a002f401d40238b0013c0a3a5f422a0558a70132a002ea077b3280011d124c250c68de010e88059c0205078303fe01314e8e0350411c20359902b80107329202410c00de011f0349b802b701432c8f0217073f9e02ee015a091e5f1b4fee012b0d281843c8014e1c2d8c019d0295012d0c0f2c9c014c3960b1019f0136613b85021a9401bd017463cd0283030d0ced0221d204d6011b3c4cb301216132293608a8014dda02ed014e9301e0014df8012adc03155a53362c349a010aac0196023e123e3d8602699202011e6b3d7d2c2a252f6e5d1643da0243089e01a30170b00163019501d6010ff2028e01c604fe02a001b00112641f86014c56461074418001143a542d5d94016bae01540562dd0110ee01004a322a216660102732103677dc01e90178476e1b240a0930e8011664199e02870294020f112d6a9f01940489049e02a9019c010c8c02e1015014002f484df2017104475e092e6ca40177263225438f0166293f0f47840163744a7255668801bd019c019c02d10159795c6bf003d3019202439804d702a601c90172e101fa01c9058a0387051cb1016fd30216e102bc010f0af30115ea019f01040ef9012c04491f093b9c01990541053942d3012d8302f70295015541f701119d025cf1041a055b0db90199010599021178733aa1014d45950105ff014ba7014f291f4f0497014c372b0a194103bb01f401af055a85014d1362d30221d701127f6d5111a101b001fd02ba018302400531311c4d4d7b9b0121217b0783019601c303c5027937511c131d1013374ef101741c227939092c121d68fd0143005d7ec3023bab01cd01d70264cd026f1b2891032d9203a5012d8a012a51c40293024d9502e1013be701701b0ed101a8030e0cdf01413164af01ab015da401b5024e24f90185017eb3018301aa015f2b328701a802f102b802a1021d1742478602c1015a487565428b01705be801d3029d02f00243637c87037838773b094d2ed30170593d279a03e703281c21233012151b1a1da801791a101031783090038b028701480a25799d012a218803dd0134920101272a0b281ea2012d078f012409268401f80129eb01182173e202553c14092534113ace0153223d664a5564214ddf01360784018a02da038f01ee050ede0142d70159f7030b08c302d4054cbe04aa0162480588012655ae015a199001bb010d033f1bd401211107459d020f57f00be601e601c60d6d032f1830da010f0123480302246e05aa015110c501320408656e0118b201518c02af018401bb01116d48240753820289024461cf01421d53712a29753a3b1721587b2d160e1ba0022c065e8001133e260826ca01271e221a41d401a101480534664e22482d084c1e58b8010e7a037bb501e702960105483a313258084a72284a49303013362a1e52491e4e0d1266170c223017080a8401355e08a001230c1986013d2c392959240f544b3c221cbc019701520e504e58b2010c4a270c38044b103c2606b2026fbe029d013a9501433d386d0d7b6c61099501b401626a32e4021968633069a20121de01272409fa02626840250e8902462be0023d4a5e9c013bde011a281011501c575a0a0827a6014b74bd01f201b701aa0181020189015c890234d302de01a1013305735a8501cf0125c701461314389e0145072f300b222ad201268b01e0016a9301c6010c88037c0c26560171960280019102b0028a01618202702d820262ae01a304487d30032e4625493a2a253b1a119e01193e284459a802c8017aa1014826fb01c3012c7d90025e05221e4160186828092a18236226032a161f40189201580f20400b3e28172a28154e480d161e1d42523602192cb6016227543a278e01702b4e2a19643ac001c401a404fa0516e4017b03455c4b376e6a87016a91017f5ddd014cea01645622e201ab01b8018d011e1478219a0197016013781a71541d414e3a8a011f500e765bd401267e95016f1a6f217498017e1d9e013d403107495e6d131d6e3d2cb7013a53da0191015e2032037a53f20108762b280790025bc6010836430c014e3530143c8701e602035e54686a3046a402180f54603217767a0092019c027174685208704b401884012f8c012020573a1435890164a7021b1439731cbd015c89010259d4014d3e201a4c3c104d820116125091013b1513412c33f00100185c4a1178c50116a5011d475291026c651d00144592017f39e3012a89013a1d515d143717297aff02a001db0206c1015783018801bb038601bf01059b034c5f53454789011087011f398001fb018202d702c2019101920137420a0a58084d6408004b840132582504ca01bb013d830182019a016584026a28cd01b801c701b0015b9401b7010d3d3b28292b04850119107fa701064fe40125b7010a0b6f3477ba01d5019802e901ba02c3019a0107007e22f3017a1cfe02df018a010ba801ff01489302561f0e2803296a170e260127460d16860110910120080da2021445be02501a69e8023e2fba0145237b32fb0310b2020a27ce019c04840124636c0ab602c80149564e527e39325e419e0167202573751d5a38366e212c9a0144248801a601880124e6013c66b403aa020458dc01fe011072a201e40106a4012a6afc03c003ac02c4014847f2011f214f3542349f0158653e272616aa018901173b2e0333450a396cdf01582f062dd6018b01aa01182c2c46313c9101220409258e012b3b357a83020f810165a101055f3671670121697cc10355b102285b6995014a180f4152c5018a02ab038a015b820203e0015f8a026a880107ac0256f80231442b0f353407131320595d290d5728a5019c01d3011d89023f3d9702259b01870104317b1cef016d8d01c90123bb012c3139370b5f70bd0390014178b501153171d20149052f47180f270f0155ae019701043228032b5f1e3b633d116b6cd901170f8801b7010dd10144ed0240731921485ba4011b4e4908451c032b0f266515679d0202011f530657479f022e8f01d10117109001d601e8010f04348b02146d275d89012a2b8501529d01f7018d01cd0405c502670c4527157d556b351ee10302db0149ab0183014389012f2e6f3d4db7014f3e7b1f2b7b443b67325399010143422d511c4f830185011c553563990173bf02452719ad01270411492f0b4ce0013d38ad010b212d26194d7b002568004f051f531a151905161b155926dd02a601cb047e8702380d250f4291012d3f269b01b403cf01ac01bf02bc02df02af03b8035fd801e70172af01d902a60169631ee101a102940173e001a002f4014e1319202d249f022d25203fd60163b701360d9f01c6018b032a21662a5d3724a501c401cd0244315e2e61491e8701c401d702ba01c901340c3d2f062da601830232352e0e39453e163b231e4996049304b002e7012a0f2c3c1d43221d3a38293f2229b403f301ba013b203415371e0d223c173de4035784026ca701210952c902144f4ec402b40451a301da017d5690012e02a3016caa04c10220675369364f40da0136404b403c255c6652ce0112b0018b018403a9019801671d0344d2012c307c565ad2015212a0013444621450292855133d4c61920131725f9c0139301618658e01694201504a68390d4574e701755928db029a0123fc01d9019502b00191011e39ae026d0d03242d0010bb025c0a0e7dae01fd01b4017cdd01b50106318a01db01c801cb012812131d2c02131da001b901b4018d018801a5012a00131f26080d1b5041840253ac014ce606eb05b202cf01ec02ab018e04ab01b801142c54157d1e0b9001c0035e21590e73df0284027f7cec0256152872a5027cb6026b8301a10340700b55241584021dc401960130aa015e74a60219584e9401001044245bba01031c420e3f682850211c1001581643601c3a7ae601764dae014e4f8e014c3a2e0f4a3c23b001a0010b3c5e910174120a7f56970160577cdd017e71640c685c70b1017819103b78538801215c2026406e0b0431c202bb026e454e2a2e43073b3c3f522d361a1d23183bc802b70266075a342a235e38227d71171b433ce7019c02ad02ac01660c1fa101594045ba019a01a202d701c401f3011d29bf018a02a102b60195016dd801f50142367a9b01524433331e8d018a01df01b409a108da059904ca01411e793600103b8e0113e402f003c809b707bd03c4022f3f5a43bd01fb01a002d90188038e0120da011a45199b017321184bbd01ff01a205e902398901a501522d250f8901d20189018e01f2016c629501aa026f5e4b53252050565dda018201cb01f801dd014c9302aa05b1029401131430053b2436023b7813223c003f6a0f2604084224437c0006461037940104043a102f3c06441e0f3220237a3a093e2025a001340a720c4d2e542227782a03381a2f96012e06360a2168142664096bac010e9c03d101104b6277ae015f2d1b0e2b6a283949b401bf01be013d8401759c0103d8014b32140a82013506062a90010b0129350113c90194012f3006062a92013118366c213608013022217216122e3a216e20022612276c1e1e361829360c582a092c1e296e221e140f323a2b743a1140342f74420d3e2e2f7844173e222b2a1011588e017e1a70404e4fbb01a601112b2a30236222e0028202f001fc01369801d3015836aa0209950192027328e2012764250617711d0c1266b10134c002312e100c484d44cb01129f0295017a5e16b001cb01f4021fd601ea0158d001ae0132441eac01481e0e6a2c353a0a155d5ca101ec01b502fa02f502f402eb0192048501c2039902ec03eb013c1a0d77ae03d5020851fa01e5022609ec01a90320f90168c302aa01af02c202b10376cf03d801ad02295b4a91014b18111d442d49248b01b90109a5012c1b6d380d15624b79402837370ec301a1023eb9015265e0019701786e5b8501e80195012e5823743a0db30198010e20ec01b301fc01e601a40160f804c7019e010c0f601a5d46068801800192011fce02cf01c20127ac01ff0192012d8c017b063c483966a3012147508d013f3713630c97013a81018d02238d018101f901595f2c6d95016539fb011a2d34730b02784d32614567ab01e2010dc3011125453109048d014c71aa028e0120cd023d7d12c701ca0121f4019b018e038304be029b01d5029401ff02fa03ed019401e70101005d4a0d074b26030d653647786a121b8301558001ab01765819241610445d2f1473579a01d101a4017291017dd60189015278180f5177d201930178b801a901a502c803b501940130204c0a86021e0614d103f404c102b7021d01433d3b223f60301f709001093f0234cf02a8010a04212908a201dd01da078106a601a701e602e9015a6b1c033c8201a802bf01b40109ec01770525f501785902496dda018f014860496f380d1a5b3a01032746541b4116179a02c901f0014117233a0e15218e018b01e602b901400e1729420e13271c1dd40143880177520d08361e030b4b3022092ba8029d012e2432170235f4013d422605515214345a742004313807062d6c0a261c1a78301e17d9055ce9039701c90134c9038e01c502bd0197013fc1019901990178d104fb017551a102d001eb0332bb02f301b503a1026bed02b902d3028101e501c1019b0145a301cb02bd017b279f02af017b1ea50378dd019001e103de033dc8011248d3012387035e99048701794793014133277b0e458601715ee9040a79656d11bb01735dfb021d4da7015d359f03589503d702890251c905a7084dbb02a902db027d4955c902653bf50457b7037db7020931f2014db401b901b201072aa401d801063c41aa01719a018f03de01f702567719d9018c028901f602b9018201b101b603f502e2017724a7034337b501cd02c1013baf0193017b3d7ffd05c902d90338f3059803a90126a103556d8a012592014c721586036f9203738803ed01d202e10522c1025f950208a102419701a403bd05de04f901125b32495e00ca011f42f9019e029d0156d501e201d705d8039901b801ab01188f013595024cc102a4022cb0014b8001cd02ae0189036c97062197015ca501479b01168f01a301793d8101a1010fd101b70191034887036d9b0267990110c901338501129b0221f101ed018b0349d5019b01b301d9022ceb029601e901980193021e8f04b8018f04a602bf018901496bc50310a50279f301a1029705b002970216ad04d601e304229703ee01716ca903b401c704b504bf0291018d02ad04459f026b9d01451fc1031ceb01bd018f0472a7024d7724c30145ed019f0165cd01792b71268d01a4010ae4018301ea04930282034f88027bd80131e203e102ae03bd0215d10120810237d5014e73d601eb024583016f91011197017f810221830171518502d5021491013d9d0100b302b901c5018c01b903de035bdc01594054ae0155a601ef0278cd030ceb016a9102305d2ea101ce0143249b013bd501384f514303db0236b901648f0216e901c1019104eb01295510b1015f05b502cf01df019e0187053f5d3f5301a101c101a702797b619f012ad502c801970110a3018a028102eb01ad037eb501a7017b1c890160e9011e830140e901456d65691b9502a801ab01086938cd01a501cd0123b502fe01b7010c67570c87044567a70165a701649501d4019503f2015706ef018901ab029a01795945a7019904c102e102f502b302049506d502b103459702756b75ed01355f5b7919338d01712de502da01e70268353635b8012d1ee702743d4c430d63ad0117dd01b7017957f101eb02d7015710e501aa01ed032bcb018c01bd02287f057577a90148ad0181013f543384028301a001c50130ad038101c501be019f0253ad01600ef60141308101ff016f2bad019403a301015dfd018b014d6d0a7b78b3012d272a3c84031928a901d702d702051195012729950205bb02830153491f97019d01830179b1014daf01e7048b04e10401db0237375327cf01514163df01a108e902a10171f1018a01970114a506a501c101717fc901419f03b501cd03d70181068102ed019301a702fd01d1029d0323d5015dbf01038903bf06fc01db02e40187055c8b0b2ea9016e7b063575e30249d30366c903860293057f7741e7015d5def02cd0193019b0181027fbb012171a9016f4b73f7048101b30159bb02d5019d014f95029d05bd018501ad01cf01b301f5028d04a5028902ff02e002f10142af02bf01bf038903d90136d9027ba3021abb021bc1029901ff0124fb0355bd05c5045f09d7014ef10181019d0407c10134bf015ff5020ead045ea101a6029d019601a903a201d903dc038d0140dd0224a501d8019d02608901d401cf0327511b9102e30281029b01a302a103a9019901b30179f7013775514b9301a9019905374df702a901cf02ba018f010e8907b702cd02b101cf02fc0131a001af01b2028f019a03c301d4019f03d001fb024c475c1fa6012d1ed1032bad02a901a703f704e70143e501dd0195022d00970177bb0143f101578d01f701cd0112d502658f07cb01bd0325db039301dd02cb018f01598701e701659901c701970271c50124bd017fef0121cd0161930100a30289033beb0191015f069b01ab018f02e1029902f701250fcf022ae101f401e703e801d501dd018b028b01bb0281034fcd010e950363cd01088d0248e302ee01a903c201e9033e850345ab0266b301099701638f01a701eb02e5017b15bd016f4be5019704d30379a30121450097017ae1033fd70100c902d301d102a902479904df01f50131db01a701fd02b90181059801a3017c8901e801d301609703bf028902399d0144db01c4015510b1015399015c6f8601fb0205c703e001d101155d61b9013f6d7973b102e90291013f667dee0477d80125e202f302fa03dd01de03e3028801dd04bf01fd021fab06e4026dae01094e8a018802049403515a8f012eb5018001cb01c402e301a201df02309b017ea90138b101dc018b0250d1018c01e501f4014d11b7013285024d69409102a2026bce0260b20339ea0117f80263ec0111bc014a5684012814e602c502a40251de014144cb036e95015ab302ac0471a60200900160fa02aa01c00142e40119ea01a201d60591018601d1052fe506d601b703d901e10301f3025bf30317e5025ddd01c5014513ed019902714f9903af04d501df01e7017b018502c1018501f5018f02910163ad02b103e90265db03c503c505a902970163b901d3019b0128e90129f1019a024bb0015b6aa104ec03f103ce0553b601df02e801cd018102e50163d7013e4d138d0141a301fd01ed033def018502b10133d7011cdf027fbd0206bd03a501ff01910151df01af037da5018301db02139f0154e9010ebf03e101c90273755455ea0173a0014df2010cc2011d5ec501be01ab0146777e410aff0133f9019301a90120ff018e01c702a901ef0381019703b703b9028902739b01c301e5039b01009503a70299028b01f101b702850367b9028f02cd01139f0264e3020d99028c0255a001cd0124bd019401ab0144d70161d903c103ab04a301a5018901890327ad05f70265b7019d01ab0104f10158a5029e01d50131bf02ca01b703c301b3039b0189013b9501df01a301a901d5013cdb0119739501a501c701710d378a01970428bd032dd70178bd017a5301256b8301b503b302830105ff02900293021efd029501f30137db0104c9019501a5048101b1048f029d0371fb0111b3028501ef033ab703a2014f428f02ba0281028403eb0198017fe201ab02820219521480019a03e00212422736ff02079f014b870105db0240c502b00105880161a801f90224b5013ca70109db03f101610fd9014e718d0113f3011ec501e501a7039d016b8d029902fb02b301a9018302c10274c9017ff101154d5c1586012701d701c1027f159b02e301b7028101c301eb012697022f9d0204f90193029301d901db02bd016d2b9b02c102b1021a9d02ef01d1019d01f7016f4fe70391018903a304d3021ff501d902579302cd01c7018b0285017511d901a301bb02077979cb0175fd01f701b30253419f019902db014f7fc908c5069b048d02e30305af018f030dc70155e701a3028904a1016b29a5014759db03dd0209c9017f8f0312c10145bb015db3050c930162cd012ba5053091019601679d01c10469b30169599504bb01bb02a9028f02698d03d5021dcb015f8b01e9021ded027979a301451d2999015f4fb301168d02840185065a7fb6018902c4019b023c4f1dd703dd03a5015bd706b9012f6bb902a5023dc30193019e01850226e3018b02dd01378d021cf501cc015d1add0175a504169d025fa701039102f204bd01fe01c001d40313ae019f0378ef018a02830236fb01a2019702724f8c0129fa02d1018e03cd02ce01d5018802370567777fce019d02fa019f024e491b49598f021b7f92014516af0414ed01c60123aa02850186014f9f015f5fd503eb018101798507a1019f024ee50304a7024e8902b502b90118d901af019501349f0249a501d001a702647dda018101ba03950206cd03b00106fe01b301c4027d6c91019802f701fc0135b002c90174ab039203ed0159a503cf02a9015585018f010331ab013f675b350da5027e93010e6157519b01dd018301b101e501b5010f7f656f19f3010cef019002c1011bcd01cc018b0360c501c00439506d0c970163e103950179ce018901820375d8019702f00259e001c1017cb101c6018f01e202019902e8c201e0eb059a02323040088001346e6e2c5483015e45f001223653159b015851fa015d96011c0dab015e8b01e002ff0124b1019702df030bf7028c02f3027e3706eb01e401f301ac013516cd013c3f09e501c201e501a802e7014e83019a018f011a9d02ec01cf0214c101426960ab037adb01cc01eb01b00183048c0187028c01a9011aad0133a501469f0305e9019101e30218a90115333f04113c712f14c30125c001752b09271564930161091b6c5182010389010d6d58f303d504186f65255b89018502e9012a47155f830127379f019103228d018701830138cd01e301446447424646618401692f604041741e722e16478801470c102dbd02bb032a713d749a028803ef026ef70111d90177f10125cb016b2f390b716155217bbf029502a402e301c3018503c90118277d7d2000554a1349021991017008306a67d70280011b34ba02202d439f02e70138049b01e80195020977372f46c1011f4f990337bb0146d5010d084be702250823352b4f154ff501ef014c3b2f2b30d1022349299501666da8010142c9068406ce010ba0016d5a320f182d278902f0015d3534ae014d4114581728950142195d281728910100372913108b011566a903dc01f50100ab04c003f101707fa4028102fc01e30180011d88017c6c4c920137a802786426c40129580e2a6016fa01b2012945c3017b58910140043b110c793837dc015e9b0198015a518a029a0287016e303432d802591006f40398032105d2023fb6028501c202430b7f76073e5240bc013298029c0306e8023bda01667409c20158bc014a332a8d0272ad01d205349403c601bb01be017e6554507b98019b01559e01709a019b014cf80131be0100be0178b80112da012016759c01940186022a9801703801c601448601f001148e013d6e6d840164c4011ac20259cc017aa901692b497675266e177b3c4d9802728802b201b601b201215834533e1a0d9c01352849490a231f0e5e78402d427008ce0115b20157820135de014eb20235e0014f500d663c9a0174980114d00242c40117725f7057d6041494015c48624d54ed0174650104f6cb04bf15b0037d8d0364211a0163cf8c03d20d5c033ad301565d29372451e802b102043b6c7b1393013a49171bc201cf01067d1b31151e16ad012db9024e372d6928684b367b9102072960293c9e0137c5013116193d45e5020e2fa4016f2863315cbf018a012ea0016315438b016e31210931d3011f0855fd01ae014509386c523c455ec00145c301567d5f5b670a657cb701605d034172451e374914321f2e4b126145ac015fa701368d02711332221c6b2e3f7087015e9f0306e902ee03036c63d2012a5a7f7402725b90017ca20102624d8001054d8b018a0101ae03ac018402da0286022050840211371a36071060a4035ee3014d2cfd01d4023c31a202f802462a522c1f01a401f495039a1d2606091d649f017025ae01b5017a055c5b4b6922b50213436f6947a90224b1012c011d0b15db024cb90478c7036e016d07008f0158355fdd022e1f31182933482f4b2a3f6f1991013e3f799d0141d90118c1013e25102e3a0b79b501151a2242450299018f013595023e0150481a131321612f9f0128c601d90109490148697e9703d10229419201af013a113d0aa301c601bd018f01b201920100ac01b9011469250049a101010f9401fd0149777b42332b0e8f0177215b40235f108b03e9051b10635f9901e7012a3f291043430f232a2335043f51242b25123939112d2e1b2b0827370f3932192100416328296b6d182383029b01122377210b338904af0199010e9501c20153fa017f484dda010682012b2c1d820156e401073a4856e601e8046e6070c201aa02ee01ea04ec06ca01fc035b3e8a01233ee001db014aca0131549a02bb013849d10142e001ea025b42da015926601142ee015b245c118401e602525e980282044a42ba01da02092466600c21461a2c4872b4028001e40430bc022f1248062874a4011f12446a43301424562035563c0340360f01a002afe003a9115c43389b019e01e3014e16485084013d8a0108c2017fd801c903763db001034aa1018202e1017cd001113bde0187013e36496b601da1010e448501a20125128a010a35720f0e3a3d0c002c181b9c02504e3d7206222b2b37258f027cfb01ad01ab02327fb802e9028c0202a801489e012d609b026c3d30552dc7019b01a901cd01492f7b39193d1c278201085e3a409d01549f0218a5011da302af0167a101308701400b35090f85011c4d36162321183721552ed5011f334d2c4370e301cc05f10198018f0114fb02ab01433d1c1fd6019601d801466405f0018d019c019d0405990313de01d503f1015ac101ad01a4027b3d5b8e015f35b301302441181c6e372855500810336d2d254702353825611a2b5144a101fe01860156134f008703c1011b3b9b014735771e629d023ad7020608511b52d502496ba701f302bb02a4019703870139a501a2036b293767692f231c42a901018d0151b0026d35ab01a901323d98018c012c43c9018b01232a5333202535d901622b9a018a01820270f5017fbb01a101250aa30297047bf902c902b102bb036dbb015959438d01f7019f025597019601cd02b201890275ab02485919cf02d201ab0273496a014e669e0190011468588a0184042686020d800174187a59bc01ec014a920150f4030e35443c2916320510aa01ad01ce03130ddf01ac031b0f122035588701a80125051c14679e013e980141aa0119130a207b9001e103da034f047c3a15183b1a2d39e901de0108427aba011d1e260b489a0120521d20240d143418742d123400529e02751284010208d6016d04002a6e304590011909275853251e7135950318e4032f504d11d50152556c2ad4015aaa0113a6024278034e34300c9c016a2260af01502bc0021c72ab01b2013b8e02a5040293014689014de9012dbd0218478a028902da014f9a0100b0018101e8036a33525659900136ba029801c002d801545c065a3d563fe601775d3e5239a201f6018e01ba01d60138ac012c16423104a5013847ea0197010690011a57a601309602d001ca01ee013e6a5b588c0161de03dc053eb201666a8801200104dc13dd20010509030c0a0104000012502e0f3f3f0104bb018a15657466710001018501bbca01ae208c04dd01d40202443b1883018b01c1047bc9029303b9063e27471861af01462b4d1c5da5014029491a419f010aef01da02538b0338539d0270518e012c744f5e566e2b8a01aa0104700e6568089e02ec01a0013a4e173acb027dcd0204d7012f89017cc9017067226b212d670b9301ab0122f502bd036bf301a5019d01850209bf01d101d102d502e501638101754bc9011989014f2fdf01ab01ad0224ad035b6b93011d7d3a2d90026b9e01243a2d7440f601455403d0014962079801294252ba0129f2011f2e5303147889019601bf01187951a70184016ab80115be013f8e019d0198018201da01c6014a2ae20109d4025b840353a401bb01a0015b2aa9013931140e285dcc01159a01bf029e04f901c0027f648702628f0235e101cc01d501c20205601c124fc8012260291a0752282c422f94011ea201ae0106458a01142e59d40147b6019101680348cd017a4798027b940211d2038e015e70800107c404de01f00370d404e6028001766400444a9001280104f09206fd1c0909080a0200010400001010ca0117d90108'::bytea),
    'SRID=3857;POLYGON((14871588.2231639 4148390.39909309,14871588.2231639 4070118.88212907,14949859.7401279 4070118.88212907,14949859.7401279 4148390.39909309,14871588.2231639 4148390.39909309))'::geometry,
    2048,
    8,
    true
    ));
NOTICE:  Self-intersection at or near point 1855 1271
 ?column? | st_isvalid 
----------+------------
 MVTBUG   | f

Pretty sure this is a bug in ST_MakeValid, but I need to extract the intermediate geometry to confirm.

It affects 2.4, 2.5 and 3.0 (only geos, wagyu is fine).

Change History (6)

comment:1 Changed 2 years ago by Algunenano

The issue wasn't in ST_MakeValid, but on gridding the geometry after making it valid (needed to remove float coordinates). I've needed pretty significant changes to fix this, which was a PITA since Wagyu was already working correctly with this input.

The full PR and explication is in https://github.com/postgis/postgis/pull/382 but essentially since we are making polygons invalid in the process, I opted for auto fix them when the clipping goes awry, and applied several changes (new grid algorithm, iterative grid + validation) to make sure everything is clean on output and minimize the cost of the validation itself.

comment:2 Changed 2 years ago by Algunenano

Side note: The 2 tests introduced to check this also fail in 2.4 but they don't return invalid geometries and instead return NULL. Since NULL is a valid response, and backporting this to 2.4 requires a lot of changes I recommend anyone facing this to update to 2.5+

comment:3 Changed 2 years ago by Raul Marin

In 17351:

ST_AsMVTGeom (GEOS): Enforce validation at all times

References #4348
Closes https://github.com/postgis/postgis/pull/382

comment:4 Changed 2 years ago by Raul Marin

Resolution: fixed
Status: assignedclosed

In 17352:

ST_AsMVTGeom (GEOS): Enforce validation at all times

Closes #4348

comment:5 Changed 2 years ago by Raul Marin

In 17354:

MVT Geos: Avoid dereferencing a NULL pointer after validation

References #4348

comment:6 Changed 2 years ago by Raul Marin

In 17355:

MVT Geos: Avoid dereferencing a NULL pointer after validation

References #4348

Note: See TracTickets for help on using tickets.