erlang26-src-26.2.1-150300.7.5.1<>,8Xfft,p9|!7{mbK2ur*ZVO،;'1qH$gRzYw"8bނ۬TH9׬hFRG *Htk'@MmZjo:plo `x#Ԭ=Qi,ڜ.e)on䟓y\G+9Z{pX4C΂ḌFI }?nN׺9?LΎ XT]N~*r,ڶ7jr &>>?d # C *5 KWnt|sHs .s %s 6s JSs Ns`svs8s4H(89:FshGssHLsIsXY\s]s^PSbVcdeflusvl zCerlang26-src26.2.1150300.7.5.1Erlang/OTP applications sourcesErlang sources for all the applications in the Erlang/OTP system. They are useful for educational purpose and as a base for creating embedded systems.fft,h02-armsrv1SUSE Linux Enterprise 15SUSE LLC Apache-2.0https://www.suse.com/Unspecifiedhttps://www.erlang.orglinuxaarch646 =1/X O7)S9Ui -/ X l !,% ?1NXJV &*LW'>B{9;L  (<Vk+5u 0'.C*J#.\8WXo P(A`,3A$Ea ͈ , [^5i+KJ :s>KQd99sS ?AD$M,] ey-> ]^1JR 8z Sj &V = Bs7!^P0 $iLu*!)*(-C<A ".d&i!CK 9^87 R+/N@V;E C}!Uh! ;+0E"{~NEv+eY6j*5Kխ&qp;*# h 8lw~;mkm>T 9ctvWMG<p L*!$aJOI (CYY!EZ22nT4(o/2 +1%{2+[%U~v ]fk(28S+"Ow\'25-7%9қ"OXU'2#\ )p~{O(;b k$86*aZ \ EC/hq l$b;kJ*KU?6JMX(; ?wK9 +m FP/ #) 9j7t%&zx HcH R5tlB$U  9'@ 5BUIM_VZXVEl@*a`tg jE;^"$u:*? nlG@h5 \E1 0s-|GGwi` _O5(R`O`9H_=&GG g:P& ZyE A~4 a!(]$L&&Z=RYGPY6n5r9_bl7< vN) >PHS,)/,t 3 = ( P7ZAA82hUHS 4Q2< j xz*\ pDM""H`;N 'M ( t;tHz $tn& Ub+DrE$x"`~{ };[lk ,0 dX*Fv(<%*AL Xz: ,M[#;EeL&` q@%?lQ & 29v{G Zc >AF[eX6GgX` ^ PFsaNGG_7|<N?)mr@7a%(:8/S&HQ^H  b+)=BvCO۴fihHJi]Ym@5n~J Ij4N~9Z(I3tTh-8),s9Olg gNC039/O_7E*&9u :! 4?F Z jhQ>I9.+(E%~]$C6 PX  +L; U,gVUt%; K>Nfp+BS%8 A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤ffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsfftffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffsffs37d8cc383f6cc972f6b67f9aaec2eb63c44f41b08d55772c47840231cb904f4685578183e9bd7c090b2210d5882f7b92307a1509b265393a6b5ef678fc4b51acf26b07308a520b43e268e1e9cb1645a381fc6f2cebee0adc27396792528b1dfb1a20674313e4f252a5f94337f693aadc6c4d4eb99b7174e8630c4cbf09c994087787b1e6b592d80d34d41d1bbfa682b81ef5d63c8326a4116f54a52d3338516d93819cb47e10fe105174fa5c739aa60d5e3ec66ee968e58d1f85cd5e799407cbc9d7fc5ded13f7545f87ed0282c47989b5c7bd6a9408cd42908491ac3e4474c75ad44c290a50239f10699cc110718611f9e247dafb4b2de2c174600ee38dd8aa37eedd13e834a9d46259c6a6bde0aa43439c39c1315411090a0d919ef94b0815f92debfc60e31b39db8a384f2bce52bcb5f54cac3491274485dbbacde85fe2d150af1f8e85b2fd5112c721e03cd7091d76a3d8c6840b6ee1df30c6be9b4e9b826c934bd946d485c57a3306f4219269542072f6a7223d031890d2b0ecfbf08e0584d2e1cde35e7a345f5d8166ef48a6eb43b185295753bdec29cdd67584b3c643b287529d18b7fdb4829916a9a89187d267cb5c928e64f263df7546c9b4c744fd383a1b75247bbc398ec00f1e8c0cacddd4835a81794c395f58a9d27729079c9ffdf1ae6a5d833b38e54ba75bcedd99f5a67db6526dd9664404859a3d0c788d13922160b94a130da37544e6de924d9bb21d4e15c744657958b93e3d06584fde04a9920c4e6012646b91254a4d8ea7cfb95cd003130f5570029571473adf7dd85381b7c28b83b1899de7fd72bc5b9c726b4750463c0ffe45c0d2ea9607bb0c5c5bc1acdb72a47f68bcf0a8f8dd1072de838a10213bd5346bcc465490d9cb76e3a74d0d04f600c9273a1c10c787cd8374058a1ed6a29859ffc1f8b6b71cba0fab06e4182f47d07da64998c3f4fbb4235e92b461ea364d2c3ed1c828c9cda5f8c4c6f5bc23a452375ae23a34d7f3473ce641907c1585ca84c7957c9e5a05cf92b289db6c4adc30a22b0933aba24cf54a777267d0842fe7083a0e0b454a561523b1b52262b7480f61019a12ddf926590c234387ab3926f556275026fb5f40e353f6f210ff2775ebc013fc5db9bfe80a77980f402035bcae656abe0fba3e97bc20b091df8ff7d2f17872571311acf7063a89bca0f2094bcbbd862634da966b1b2ceaac9283ef77781ceaf2b2f8e4a16ab71e892cfec54fb5f023d5ce368389ae9f6a61ff3a669608fc25cf3e00247cea660fe207f030c3097993102874a2177d7a1737eaae6f7421afce501cfec943edf86c5a4c8125500ea1319f1b2c96799fc67869129c8db75a283b7fe730e0e4363e9a8688aa8f0547899d04621559999c6c6be555d4e86df62bb8d376bbbb6a352bd6dc1018a8a70a8e032b0bdb3a48af043ce4fba16eb9aeea34fa3b4989922f9d9fe5251a5dec4ddad5a9aa49d48aa759c00c7c41d0b94faf8d84d3d2c8c5ed28c5b6b17f33d095dfa68c60e535b39388041a3e59a1a6ddce3a43095640da56d402373cef081ed0abc4d39bb412b71037d5f62bd9ad3d17060d03cc306b1f06d05bee4c92d999279bc59317bea1a42831ed82905a2c84612b788c4bcddcbd7ee81ad19290a69b4cd45dd36469d07427c0ec00abb9018578f0b0f255c4865b5168a5441441f6cde001ee25988abd66828e410f2295c87ad0fad7d12f44682b143417637803d06bc96ef8f0b689dbc526164e673f0201c983b49f550c4a6cbc49ed2305194b80e5962c992f1ac4320a833978336203c54dffb6db3dd1c65654fe65cede075738b96c5cd417089340d44bc55e5ff68c6d5d53a1fd2c4dff065f0b9c5d5622eb8c2c277cfe48a80621061df1af1721ebf8b022649cefb5c74cfa789d40cf35e3e9939f9ccece4d69f8fbedf63eb00d2cdf0568173de3e02dbb33705b60ea38a78337c5f300595fa950207736c439b1da2be47872a914571b9f1fb0ad7a2b7ed2ecd621a6fdca357ce6d1fc251e0cb7548d594f04bfdbb073c78ee445e08f78a1d0776dd0b58716211233aa071b706729b15437683e39d00bcb15bb8e35419704d7b00f23d1e0bfbd36fed00a30539b8cea59633cab4d302740c0bad98704dd3aff5b6296e93292caa89d3c6394a94eebd1c37807a14efaa6a72b1989eb9a06285760f9bd22765b37aa9ee219f35a89c95d1975bda382ef36401686e688c7bf093937a00ffc3aef4d82fbb5da95adc86ee982a256a2aa4224bb3dd2097d47b3d02655f6dbb6e756d0934e7089f077859f956535fc8477b31b7ac80619411c81f3c9844cab4dc93635c0c99d65940ddcab6777385e506b3fae60131d1feafc517d9030e6e6c483f86afd969acaaac9fc51e4171762923cd6516ee8a04240d459bff1c9c9d6098096cb3773f99b5bd44afb0c0f0b32b45867186f5400e976ddf45c5ce5e5658a025db61c8a2b11efb080b42e255e961df5de96a7cf1666be9fffd9adb640ed2fbc6aa4a52dfa962fb35ad0a2536aa8dcfc3b8d2be3e6e6aa7f58d6b29a4ec3ab7687f335e6f2daa9d4a84b0a5bfed7520a0516478f58decc7a2cfb06fbe71c7df05519fa3efd3b0c41fd84da547d89087bc97fbdecfad08881d68982db4c0f730c869e128b29a5d1ea47f4e006c6c844663fa960bc45c6e3a6fb6d1a67184b31d473cc3f9a58f7033a2c1b54828afccaf6c373c9cf7e6323d18722e6e8ca36cca18a04f50ca09b69561f7e701d1661cda9f66415a77e365955ce8ed302aa4183372ffa7fe32e8c1031ff90ba9f245128c505f2ca362b8c910e3c85a5e531619c26dd11db9ecf09cf9e4f8e17bbbca5feb4249723fe96ee303ff38ea6d0ac439eee762d10dea39a67d22e5e9dd30b737848e0cc69171bc7fabc7b9333759914d6519b113093ec8282c56a928e1a931239d95e0075d9308b82f7559b9ebba96244ef99b3892e36ccd7af8f658faba225193d1bdfd7338e875a3f71cf9a5ffde7118c8019f21fbd0d20b9fcde103c95e89991c8283ce2f5aa745852a679295baecd7b4f8bc3b43081496e96d0873c0f7bc415fe1f692ca3663b488708501db4acc7196a73ef4619e0e5594b0890a8969585a08bd2f446f1d6430ffe3c03fb7d37f29b8c0353b005b1090f11a33486f6f24599f4dd478a8aaa627cd71cd295ecca994ba30390d49e542a07f81d872a87eb5e09515aab0acd0d24a42dd95c39bcd041248b13e36d320864fbd50059451c86adbcc9c5cc0f90beaaa7743004a55c7e63ef757028625d61406355ca933a2181136befca8f0731dfb75bd80d38b4006963f765d7d8560a15b7584e23d84783788ff7d5b9aaab7512ef8759203e1cc9b3625b062efc4341d859adca1385cb222b8c3e8f4754d8075ef601659ae023897e89887f178d8de8128b0d77d99b67ccd2e55d8f9997d0689d3cce065f5440e3cf98dffcde7ee83becd85804fc640180d665adf4f30ceb8897792b42fd37c0c34a33e1eefe9020317cca96b2a568423d2dc1fdeaf71e16855926d65e3d035099f8ab5a943f1c62a1d40945e0e1e7ec8b6d0fff28e344379712348e09535605d2278159b15ace6cede71dcc4053e40fab7c519fd1caffd50e099a812c5b282ffd9adfd5ade22bf3e685b898b3167147b71a3b596bd5d49225e491b7bd24cf877a40f3d0ba2fce60648002856fb7f1bd8bef98d4457ba0cab5d05254fbef6c986a45839ad3f29ffed53c167fe744d1cca1160050ac1196a12f418d3d1d04fb6f48bd0f51d1f147cec7073a1d44580c441ebab7dd4ab9cf94c8b8cd293dbb95c4175e399c49024f3c076494648ddd778994e13e09e9e600c01e886bf7f25d9a6229cc118acc1be6567bf6ffb0b87e979910533ea66b049537d9515b57787ce32321d558192622eb9b06656f919835865bb7b32938b121e3913f941ea94fff60dfb7fb6e727ec69c54258999c0f7fdac579a93841a2bd29756a4b13c31184d5e6770cf54dd113d3db78af8a52282cbc29921739896cbb91e0a5d78b549a2d7fbfab51e6211c8d516e20dcf43096aac02ed0c376313218f6d01cfce5d915b476e7d1eba309c7343599e8c4b1cb5f5ce7df6e6ba47cea9c4e019ef843ee279c9b79574dedf5aa48aafae4ddbfb6ea2195971ce415145a856cc7957ae58deefc15940380688a566429a0fa74731ade60818f351a9635d9e497c266b60ed47abc71a8305f5f5b30d7bfdff6476fab2fdad1a9391b3594049929ff7d281645fa60fb702f32a879957b5cd5ba0385bad26bf99ec09d9c8467f980fb3e93837ce2b36f5cc0b38b74fda97401d1c8c1255448fa45217da53557f9df7547b875b860eda1c9f52b77c696e0687bbb36a5e7cc0ded5d63477c87fbc3afbde52c28a538d95342b4d3203c9216a8fb8eab1dbb51b3b967fec6ac35eea31287c8dc60250100626b807e8af14a4adbb2844d3bacc9ba6f757ca6fb88b32dc3765f85be85e290e4f32238cfe2a3a67c1ee550f688d9c7ae9f5bba30ed82ad60f14fb603ae80421dfb56bb527ee724880fad8ad68fbfa0f7487662f1547d8b848874c0e00d45e59d8c4f9eca94b062cd9eb5e5cfb16ed44ccede6c517ad116e6a5ef054dd69c26082a3af9bc9fe81899b3646c09c6c457b7ace6fcce9462ca8664929146307d7ae43ff8909cc89ea78e785aa47011ac8c6694e01dad6288599a4e8d74f64dda2d4135eed893b95434ad2bdb595d96da3eb9143b7c7979a60d890d1e13627b80e0dcccf27a33c61250d9a6f32c3e88c253aca45f2306d08883aeaff0123d12d24c2facafd57487be87baf6106737293fd6e63638b854224877ac64203649d35e2e254fd42e4822fcd04f450fd8b7fec387ef586378d3a6aa6005142b436523cbafe623bca91c8c12bda132d1ec64dc58a6a16e637729e86d0fe8000836ceeb389acd37daab270e0bb0e4e437a31de4f0d077f82385eb89431486277144d6152673ec0fe43ea5a40fa68d8984a03a75e6110134cbf29235166ceb3f02764a544d544c08e6c8b68e38da8c87e6fd0d70798f1a5507567d84346a5fd5b56bf2ea8bb0bef3b7f04a0505d98863e73544ccfe93f8aa58a5a02e95e6e7cc7a76307900329528d2f137d340b3cfbdbe2cd6fa5edb97b920d640fa8138072eb07ea2bed3f1abd0adeb29b3d8221af11ab51f72516e2a7ef4da301ddd53637cae5c29e6cca6da1973760cb849a376d6b19557ea7e5b24122eb5fd0d993b800c67cf9a8b459e7d488abc03a5d79939576397fa56f98e5a3adc28f5fcdc036166657be33a9ec99dd1325aeea0c074b577923ee280e1d360801a50c6a4bfdf797091c933668fd658c281d06f69655633540d99fdb704a250119b8454872ccc63e9c5e3b2a7dbfbc07f9a2c4957fc654195c25501a0abb76e3e6506a2f00659a1e80048a3ee75f0ffb0f59d4b3edd88f5c08b61b5abb14dc4a79485b999dd1e101ab3e65abb07724544baaf4c2758f7b222fd26553661fed8ab115f880e50b1884fe08f81c498856d08434c70987e2bb049dfa40779d583d8e300f94d393667b2e6d86d402a653d4cd490b779527c00eb9a88999a6871bf1ca83ad92009bfe156ec81337360f6767f61eb9d1d42df8b6a17c12991ea1d934b79a63e5f5063dd299afc0b95911162e381bd24ea47bbb64af324da9c113d9623518b142ab6696d2a6b7078d9917a15205ab17b17e8fb5f1a697b4f9849fb2f8ba313710f69ba2320cbf4f9586df6003b5ea0cdb365f94445bacb3cbcb258b34b91ac897863779641ef389ced302b11e4c975a206af2325c461de9e2683bb6f284cbaa0d3a737a43bbd8da7216917e81efa3393a94ba551e335adfef9a03aa94ce341f2d64e2adfbf73511b82b1e2f924da9d415208e09b8c300903ef8c34cda36788dba98d9dd1aedd38a651616a53b7d8f3baba363f13c86a868ade9d13439ad3a5006afbebfd7b13a7ddcd968d8b893a2c04c2c0bf91f6702687e471bc46761a5ec335617bc248692d3f103fcf629f482ce2aeae2440096eef9546b46395cc5ce0b5c223b231fb9e4edb7541f71b56db8277413670c351f667ac7d8782053c81ab08e58b687a42500693b56073f2cd346bdb287a8ae2946ac63daffccf00bd63a76b78efef52cd0f063d2a2a3ba35294ea65f44e63594967d8b378c6a518bd7e981b195fc5f9e9eb9313098d7ea067609e615b739cfd7b95903382a3683550e1da24e6428a71fac17a112485ac27756622f86ee2e67b0d388e011748dc8d1bf6dd8425197160267966feca9e04b04a3df596aed207a19202040dbd19a2ac6403f49e40b5c2afd590988b3dcde0c46ffe9c41d123cf9bf103b928eae3ca64322c3c0f82da6dd896192af9a1ceaf417d32973ba3eccb3649c51f46bf352532afb8a2662fd16acaacbf347677a28acb97d3b04184e98863135e36e2c7593995a472064d30eceeb6acac3f30a0055ef7d455a57f9d0207cdffa5ced1e14229977c9219f8fec15eb2b26c44eb6c9a6f2fcf7207592002c2b1b1a6718494b6a6d6949fbab3071271b564ba2b1ea4dfd8f37237e7f79d81e2d65ab72e02885eb3944e9a4969a690ca7900cf3be52cdc807657cfc4ab12b4bf606299c10b9089ed53facfcb0c1f15f77aa9743cfc34bf8a01c5648b2c529d32b3664023b5747e8829b7ef559290fb0762dae622339ad70087f35b9a15f4687c999fdaf88418d9e33c38883da34111b46f0176df98defaf469f977921ff4a592f8ac2d8c76144bf41d90bcf9713d7c5d8995ed623e9f5896330f182048c0a3a8112e2b0cd0909a09413d025f4b0ec3ee87802560af12f1a37581961c2c5b464096e075431105385e4116dc73a4b024f28cc108326d6e630018a668d1e40e28f3d34aea7cc4a3c5a0224301088197e4de161734676ea27c8009fcaf981c16df6f2d1cec83a5b341ec9a34c5237672e0ead6a8473a4b52912f57e1f1f1c07fca536e15b71fcc7d4aadb4dc6e9923e4d702aa8d5523e6bed5333e13be11f8556ba1a3afd5feac5af00deacbda39c069a9bd5946ce870f3047475ea8af0b7614def4d09ea56bcabda675f3c1ad557e3e7615f30c0b7fb49b45351c1e88e5952602db8c152ed1756af74acb0b352e84d9c1f962678f36254a8e09c868c9f9daaeb7edf876b48ab2b1971e4c07d5d8a03330bcd98f72cebedc673e9d687aafc748d299805216eb41a11957b65aff3a0aba530910a837986c55c72d3d7ecb21c4b569d9378af4e8ce4884faef5ace4d1d7c28a59d2df5c12801f55b82417d975cfc52fe89598f4442515f8469e3ae9d057858b112d2fbae2f6b67d08bdf9156fa1fa32a4b079d10e4e8a253fc090cc3243a23df1f063cca3f84e275634d0a840e1b54de774e188a9294fc6265b3dfa15c28da6adc747767311500d51787409e48fe20cd5130c83b23c2e1d6315336307626abf1f7290a13b4a5792ba37fe0a04b7a1bc5aba1e1a1af5ce7859dc8572d251b2cebe916d769103f149115b8b0b83a3a3d918c2cb5c3b57b295f373e25ee509a137e6f4923230519d269281b822564fad92662a01cda92d22cf7aee4d1f510412ddf4996850971d3b2c5e84861c33b6496fb8642e38b8d978d9adbd1e04cf106f06e867d5d7d121a8d8dc9d668e25f64e1732d0a516d3c0ee6ba68a99520a033778b0b4a88254f314d27f0f50bfe954e835a32a87a7cba640650ed3daa0e614c2129170b0720e26bebfeda873da86b1193aabe496302af0418c3fa3df81a30f38617160799480f28db12c3fd5ddd40dfea3fce34250770053523976077c889eac2245bae597db89db4de29ca61329f72c29cef9045c88fc6d4f40c6ecd3a963a5007583ee9f485ca0738de2c6ba62988eee259d8c6afa63c4df06f74ca9ff53ab7cd1073240a7ced9e074c2b54e3563eecaf9fd22b1f586328690c3951f8dff0e08062fdb72b35d344d472262b017edb177d9122f98b9015f757ccde0d61b461290852126f0c658de33ff83e0b847970215a2c91d9b68fbd3c3be149d00545bd61d57ed4fea5ed7dde3707c050ee9f0f454aed31bf83f144fe1bdc87f0fed70c498069476c2f43c84c43f0eb94096b3fbead43de76cbd9143e30ed38781355bdb7e0485a1e1de7563d5e0be413f3d35ff58964ac92cb794f6196a0b9eb4f06ee00ecc767797ecf7c4ffd735c94abd6463549068b394bf72af82e53cc65157c175d83f275bf87a161eab3d4544c6cee02a488f833e87db398945b4222577bacf4858a53be8fb7487cc98399000ec7911563f65c3ded25841f77a7eeea92a101679f1036f0e1977c32aaffe864550d8927a1d82e035c7c2af8fb0ed8e369e189c33977d0d19cda542b41b5dc565a68d7e7112ed49f06c96641dc84cbd42c422f183d2cc078287ded80996acd6afe8c7c9526c78c43f0881f877d383e8b469fc22fddf80db2f54e3aaddb6e914be1fc5eff8c76af718d6d76386e6a94e51444d5cdf28a953a9b817794f9c915b3b951760294945a7ff4561ac0cc5f63915400f497761e7288e3d066c01fc23c107767a816b2c6c645c9733bdd0054c5607aace5cc5f280dd775f88409f1b97ffcbab14c5663fe8d278acab30ff1dae1aeaeec0c9e165aeb1fd05e0b11e0ea8137afb9c127e90cde7e54fb4d581178532a9d50adfa4330a4cda5eef93b19f927ef402c5001aca16a15f0c1f3da80df3390be4cee39544bae5141c4961945beb945a78a39250aadd745026d365c88e2e9aa3e9231f536b92b4a5e26c82f71479839e01598679bd2e126ed28a22b3a19a04b597b4d6bf3ed96a4c0bb85a21cab72e78f16f76279536ddb2fb599f56e6bcc1258f40da6cd7d14c42dcc0a82a5ec23aa25eec74ae7aa2c8e708a061c6e57fcd0a3a79d35476949dd5f928637ed8cdea0b909e79a189183655d27cbf5c0e0a60e622f738ff75ffb5e7b426621396c719515ad3b73488702fec6a44e1822420ac85b5fa69929ab0320b5a6a2cc114495913a2ea50f19e4f3975dcc24172ecafca590cc79abf885cded6587dad629d80e553186a59fe02182bffa1557f447c46a4ceebfeef163dec5b2b5c629973907da6e973a71ae5996ade805baebb90d549ae943bf0d20e1f20e7891da38274107559d07ee3c18091c45278c7b6cae1a6137a6af07d766a5ff7ca6b48ff491f0c8ddf78ca16f6a4b4f4d61bf46927c46e413ae6ccc2c45abb20b3ae5d6a676ec658f18a696a4853569081392bafc03b429d376beaa25763a8a64dc5d7d776aaaaed0d5d9f3c0af752a68009e7e50c16ebfac0e3fc098fcf2e617f7fb69ec2e649d59179be7673dc97bf7c2a7f6546b12fa32f7bbc859cbf462575f3086dbf1b1b4a40df5c1e2b777b13527fa0387d6937446d20262731b094deec6c4daa25220b16d9252dd9b7d0fce05e902fff174cb91031274e6bf9ca6516cc641f9fdcfd95eda2515806eac53ae20d762291937511d25eb0892103ec2c49790278e7e0d737f9a27058c879edc2441a8dda4f2e5625e067401e5847c2fa8d220eb89723a2c3830884a45e3b949c8ef7da5172c59c46d718feeecc638197372c38c2796d60c4c647b00e4ddc9ce7e0aac8a4dbf9390783d36a7d8dd359657ba5b6046cc3be2da0f65f9ffdd57cadf16889717479bb9410ee8fad823bf85bd4b7bcfa2cfc3e204bc4547b6b79306aded7e9d0235d883e811881597034ccf93a5c37157d2eac13aef365946c8313ba34c64649a5e8b893e951fb5f3c9a9a298e7c6273084be05ed2aa30c10ac9e4b9313a0cd90b189590fd43a8c151ce2b17d1ec57012d60b1f9257f3ce1f565b0f17c9ab976e9db927d7a9d0dbbd09c0aeeba11cc7616ba20006ebaa68277831b620230316e246d4e71d56397dfb212b3bb28deeb029f512292f9a28abe3b411d2ad153e51fd67cf615c4f48a4e829fa1fdf46b222c1742642a5d60898581fcdcb7cd474d4ed3fec2b8590787fba3c04fd5934a5b4e08eb37fb0d0ea06c2a3b6f7de217403a1a33924eaa92c0fa22e452e5095ad6aef5e93901810cc8f7b41ef063420ae69f8f70c6a70aa59dad49e5f8de666ff0de33eba094ee190dbcd2d99ab1b0f60d5d818444824d30ea13dc367dfa1c3b04c2357278f1a4870932f7d52f09b2cd7f6207980c6e4619406038a7fe294906acd2d97bb75fde7209691d6ef780c96c19c444ab648dd955eaafb260919d974ea49e4ab06dc49b4d4b83fa8c78acdaf45a837211dc6c762382cfff221a23686b835ff5125932a46e45750c8314cc91518c072b99d03e7e8c921b7b4f87a3247a2227c46109573f5172501658d626d4bd48a7e698eceaaf1ebc1754baffa76df0e6968495a7bd3a81e50165a91b59dc639d4eef92fc527cfc8ceeb33596bc671f62bcbe80813a6798897952cc3317fa5bc103ee12798ef4020a40cb5e2cd544154345312ad6f29e58bdd7cb5c4fa07896012bdd3fe6ee9b4fd318b4e903ec0c100b32dfcead1e231b0d7b4d5159b008d466c3bd891adbc15d405d5e58ed913412582affb90efa08834a6d610e2ec96f82699d774b10e5f71d37c730afa1a161832a438c297f443901de49776418387810ab853fc6c862195b448168fc6a676711c201ee9e0650ad42c8e98b17d0bff4ed591b656c20da5b3ddb4f64086489619fbdceb6a2fd95e364045a0904db105338b75b3e24dd37843c1e69beb9e3c174ed8892e70ac534f0765bcc5de986b0f350da15ca434ed04f5998e269a8a959a1b618c434c5cf00a7dea0b0e574e841309ac54638acfff323654511c1b1c7bbf07020f9e8379bbbdaaf85ecbe3d639eecd2849605268910a81179c10816dc640455c29dceaa54beeba40fb183bd2a5decd446105a728bcc7afb9e184469cb40afae96886b953bfbea144adcad4d42fac78e27d73add48de338a2ccf8b345bcca10ea6ab50bc5dc172f62808121864383ec02210505aca697ebdc04564a6d41f8ad859fe6f455f34c7aba6311d7b5666ed7a58be8b2136d109c5e1e077ab634097fc37c33ad83f316f0b833586e5faa26b899603a1038eb5c171c1b840e237f816ad89d980b4f64cc79433397fa39ff9dc44fe9d535c3d81bb984e0190a9d2caaa54adbca81007b814763651f8b376fbaa28a5d9c82793d15af662288077bc598e72dc96587ed553117466d046b507464e42a5c5c1d899f5e0968fff60c5ce7043c1254267f797b44dedcfc8bab5dcd8f67faf46e278606838785c888feed20bdd8aa1c2bb9edb436bcfe055a982ec85d675ef6c9b7ab5b0c2abf68fb2d95442a3bbe9d3426baa28d53a8010aa7ddcc289a143f6358fcb1c34aa6baee718c77491c6a8e0f20817e2a12dee5b6b3430327affcb5aa9c040f0e1fe38edac7ba36ced1e5dac3fc05a9615dcb933193958fdd89886afc9da847544e0bf0c7f341b573b3f21a9cdd49d51dea0fc0b5f2d128081dfd12eb6cb50cccbc370e4939f491ca31509132e3c328b76f15c7bbbb490897456e018f704a967f88620eb948d2644e9c1c8c52599097f46e089e30780b8bcab6605f4a836b29fd8b04dbce358eea25f2e4e03342befa31ff5af2c9bef9df59083d2b357e1ba17ab3b03c64a3d3d6d6e643fdfa55c990cec9abbcf175ce7925bd4bdbaf0fc311b1f82ab796893cbd1b7c80291e3af3a54dd891ed008ed06329c782768f91ade93d39ad914629510582b3f77c31b2fca621b6ff33b89e51d1683a5d5ecef5295e76d567ed8b0ccf4580e83b25d6f9ce47614ea48f06ffef862ac12481e08e750e9dc5905a38a54cb48016e52468d16e1694ba5344232e4351ed15f1367d39a85bf3d1cb0cf219d68e23185ce8e5585e6bc68fda88b2488db0ddb35e1f241e2639f38011570836f0444e8812af7283a4ae8534e1f0f28c79d7605a9f44ba4e1c5b20236b2f8ebfc80b3bff799a630d91febe0ae8fe8c8777e5e61c0b9dd0713738e19d394a3154def9e88489b255a7284878cdba37ca676ac55248803473479e0339502407b25b7a5fc9d2164eedc74f840a819185e57828dffc0f3811ec61d3decabbde6feb6e8a63d9e175c6f117442c2a0c885886e84b7c912df57b366ffe20ffc0797e9ea51b0e63ff4afa53a85ff15f5da881b4845352dc16aec0ea3f9d7b459bf35b704e52fa2e0dc9003c3ed2898855f7e0cb8bba42120f792a6ad96c2f359af22b9ae9d81a2bc23da7a4fd3d246b338f102b2ae45216114a8006e7edb950bfc666958f92daf8388bd0cba1c9a1d1bdc0174c2766e91ec09aa2e905fb3e6e6a20482750a91e34763c8747a1f806da96b2b60bd7b5e59a5f7274c96f31bef0548abd471df0de4f4c4cc1debbb6d395e7777d855908af628081ca9d7ad578dcbd9322f8e364c7d2fd915abf0f22dfbbff599d3a5564f765a1d86ca7df3866091d85c34e2850ec1319a64fe94afdee9d85d82a527c25f2732cf0e9ffc3bb7e912c24a7e66151cc792ccd34125323440e7026506249e2ad9d28bf855d8a1b64b5cbdf1e574d7695cd6e11fa82f9dd89458e4247f4ca10649b12bff57965bf0b77558e4390a49e3ae2465e34137972a0e392172fd43e789cf8d449a635ec9b07f8beaf2364c3f11a0bffd28b076f0862ba5a5a9e4b49359220997af021315e9ff39b56a8365f7b0376122c184326465f332ef4fa46342601b83e04ddf1043e10b01e7beeca2cec52cc13dc31bc11f3dc2560121ee92f17c433294f6a93656d4e10934e75296d350c0611b24d21a15b7d588050245cbf0aaa4389cda724ef6d5c0902119360e97c9d76dfbc1eee91a48d718ce03ad0628d990486a5f5d7a9c1920b42724ad81a098567df26eed3505724a1b1ee3936df29e69b73124b19f71d7eccf08cc8d5b79b5ac94c000625adcfeecdaafc7dc99efe414227cef1db525718eb0e3b71a417ac2c7ba64c7807db933a61dc87d89c86e838dd4657068cb8abf0043539b38c383738c8fc23530a0a77dd29cf5511bd60232a5cd6ce2a46ba7d7d4607bb77719738910247048f7085cac140150e6d8bf094fcaa8b221077ffa694e4790c54b35b079476bc9f58479565a94aa83fd2276a662b859edcf143e6a02aa0a9173d4a926aa16c91df2e171947457215b4e39054cc1e16c4ca244aa06fa08f0de5cd61ff200b5e0cb73478e7f40483943b390b26e706400ec8be3380142061be0ed4d1da804220bb0666122ed181882d3ee55cf7b7529cfc647ea8d2071d6d41254514ea8c5d5f268fb324f97ae07fa445a3ccbaa2b59f10578101309b489a03f16e1b2069d6e9d0490ca42e7d45c222a4ee8e7ebf40a5b7dba29a04d94c682e9c660c2597ed7a4af33153653e55ad34989a4f15cbbcf49a08f3b2f3a2241100c0750e44e0aa021a26aaa81cbae90a6dbe2dcf480aae2561e4ead0051668c761fd6f90463341cb79adf9b50fddea6de7ddc512c6be60c234d2233f5e51fc8db4beeecde09ca554bf6ec93399d60673b7862af0b72ee0c260403c7d6c01fdd4acfad4d323084ffb3c2573f6ecb63bdec2cbd3717becf24b71ae530aa0120eb47a30e182a9f609f3396ab25c09421ffab2304e41be8ac23839d243bc0f14bc54e9575fbb653e7b652a05d0bbe1513aec55b4909daf35e0d3b7e51d80b3e8666eda79558e9c59d6fceda72a78db57804fe13ba2edd7a9f3d79f370ae640809dd7939e25f4c9945667f8e52ba04f0f3d3a96ddd89713caeffc39c9833ebf029e518eecec0829cdac12e320013d5c7d1111ad072722678c8ebe7a5eccb209916a40c0ff275833e1d494a5ae2cfefbc3cc510eaed9f4ba87226463c18127619d9aaff769bf3d1d004d6a4e45e1c022e4285c5f0a98380fce28ab23e1a935773012d0a293fbdfebe6a6ad35cc5123fc8499e2a64a5f554d74c76c48587ddf3b2c36b083f5c874ed638ade197cfe0677665cb216e3587073944e8482cd0f36b5fb55728bbfe6943b758263a58f13479f10b510186ecdda02aa2c4e260e9187d0132eb1745ba0e88c6eb19c14cbe79968a0680aabd43164bc4039a910b9a188b5617dbce47c132b85df5f8090badabf99d96536f647bb83c81e9c3a411dd973ef24569fc0c3596778b44b2da065216e65ea1e8297fff5d10ed3fb4ac544bf445355c4fe6283f1e25179d43863f91b9b8c2ed33b8ef5e51605ab8eb20b54bdb676cefccb3c9692d4594ac82bb2fe5ad16a0a697ecaf75ec332c14613d5a4828ba424d8c6dd2bf5ab7f5eb73ce7e131aa59fe58efe5289c7e5dd518b8ab95dbb38a3b830d159618b38e56c6f83685f2888a38b88f2dc636712fba9675607e5d0de620b67da1781043963afde5b47d24cf03e6eda335cca85167a9c8f5433d8c5f8242a0b30ef91476a66bdbee4f5a055e702303cce17f4705ec98d8905d3649ee3ab7b7f432b40a4945d7aed6f10c6fc68ab559ae7232e89f6744c12aaa51bed2280458e38c4bfd22e8a2d086631b9498f28544e0e361bc9a371d52125eecffe1968c4d2af49ce786e959aeabce87cebfbbda0fefceab62f1b3c4d4bb9843a56727cb9d67a42513a768abfae25a73b72bd8223aa848e5879d02cf135b97b340384f4d7fa6191b1b944655952c403bfcd5dd743de771332ad907488db18ddcc506155a33817bdf291de8ed23c726c3eccb25d6779d36579b68a5bc14031732a5937572cbb898dc0c6e928ae9fd70e133644edbcb18aed9c45b32877984e84cb05dd321b3ee942977be43ec8782c16e3ca456cd2b9cf6077a93bec93fbb9c480c350285e9b397e801e9f1d7fb85142dd9cdcab1d585c1c95789b84751e587f6998a20743e09df801998ffdbb9d4a9eb039675c3fc4255d4f8ea1085bd528cf7597d10bd378a460d031961e8253c35c4f4d33ccc85c1696b03a3aa90b5578d711a784d3c71ff2a73afd8c6ebe5dd0071d1836eeb1e0ce1de7e5b95c4d39725da71f2206a42af52dd15512f4e64b33756d19f6dbbf6c0d3d6de3e9fdb90189a5f600effe605d5bf5c11a8b61bfe522ca7a516dec466a53ea486fc1de3e2d64934159849aff12257da7fd7450eec6903cfcc73c4fa565850125e49d26d7cb44833a5ef90e4695d869a50356b44cdb643e2c4df431e9219061757e00eeb651f4443490913f2dcd577b014a574bd3f3679a72c2cc9dbd4b10bbbd495ce487b2139166534389b75733165c5c4e075dc57a62754d3e50ed4eab55d1fb8bb45dac8016b52e3413f838ba8ecd23e69bae5ffb7a48bfe7fd393c6abd76c9b61f26a292306e317dcbbd59e4acba790e478aff287414e431535fb0ce1d1f79d5fad8f9384ffbc54a3145967729be7ce5f10f1a375058b5f21eb2d256e68c12f3ab8cb829dc5de274cc5f31ee90396fe1efdbfb741120c85c9a124849214a2e87d619aa2212b69ddc0bd01267c0810d36bcc8be4eace35d56131432a04f136c364250c0bf343d7bd06e813c1e41661995a21aec5051cb3e0f3a4115d02ed5e709dbbdb982b346935f77297b77ec5b8c50d473e4acaf9d40034950aadf6f37c765d8ad46e648ad42ee13440106edb923cbe22f1e577f5a7ed836c742e915f35b737b6fb661070e106ed9fd9dd59434a9fee4b74f05f1edf1dfd3e4b3900ef90def407aa2aa27f152d727ab699c4958f08e6bb7baac702be079b8161972674f7f08188db0700dc2a0b34ba1e58519bdcb7622d714050c6f04b3ac09764c2f0257c28911f24f455a71e31267b60e2006e5f83407d83e70d2d9470a4ed13a5ab0dd6bef798af3fca797cdb536df099cc3ef0164a009ada4e8b183e54ce42345935f936af26ef6779c3b74697504a5d5db9cbe7f6a461e2ad2b6e07b2970c729449181b8b09933e0e979731816be241b4e3ad769cc0b4a93484ad52285fc48f709bccad1e88675197d92f5863dd4fa2bb74407866940e7bfa9e26f84dc1bec641a1179152bb47f9ff1fb59ef495e5982050d7671d59b5f7f1d68df3f8f7b6ccf728eb61f0076c613ce48e70db5a2cc3cadc19052daf26c084fbbef776a8b4f3a7066af89c32c2307ed9a66ddd901bf9e77d2f071f8f292c84286717bac712113c91d3e4d663846ae8e77c3a953b05259a29ef8777393334294166ccafb4097408d3c131e4d6a952af65845889329719e26ef83c1173e9a41c088b13ef5add0b08230e40fa139bfb2c058be3999b79de56a50f9e014de3a7bdb62e230a37d59108cd4926c738c5896452f86d5125067969aaafa28d8955321e92af1fb7c64b9ade79f2210599da5f46d55eee60923334e76013d531c1a1fd1e8eb6802c0641cb937094c2746fa9cf5221ee88c5fcdba8a9316df3fbaff298fd344c17eb457670da04a6d0eba4aba7b9ae26dc1e58080df45762cda21797d07a25a33597287854e95aeadfeada901daac5fdae6bf6a455fc4ecc558adfd7337d4948471a47fb13f987ef30a4c3cfaaae4bb55a7ee4d5682083bc6b3297c5baa38182d4d526e773fbc5dc856ba9f1d219425803ea578b52c7369b9485a9993aa73e8a02fd4bf878f8c29b8e7b5ab4ac1ba708fe3cfcd3d5e6cb7f02f4cca0f1b66abf9924f145bc3713d77e27285de8c7922dc2266ab3c01e0f56d0b79ed2beab2ed4e49b048853847eaa91b68da42f675d9a5d78eb386e82df67d027e62f8675129a8bd4c8e6be5259b439e32566c5509cf68e17d1318e23a862e125a21472db643b5792bbc2eb4912c9c08f1b52f67d96247644301a1adf36e27aa0715add3c08f2c21581b7b176035f298cf6ad29a44edaccd8829891ae871bfd824a7c6943800949b068e1dad036342e4863bcd508679cc5b376a98feb060096bb88caca9002dd210544bfdf7e614ca3caad0cb89924602a4f89f1fc911367040deaf083c6b17a965068f86eefa63ad9ece0e7857f7e2f1728f80b826a8a290f51b414a86c5da1eb3d3ed3cd2517ba6adaef1a05efe18db7d7d2dd5c29c0b16ed26b5dd7fd4331af52ab8dcf4adc07a67c3f19df550fb2aeab2ce4adba4f097115841aa1314fe78555b2b3fcf15869f3d40944e378e87ee646ccc4fc643f65dc81b1fd21ce33165b1d6991b0577f91514ad09962126a9e46e6cf2bb7ccff374e5a414a8ef812aadcd79cedcf41f6bf066dba73b2b56dbf7d2a1ac1cf38f8de22ba2cfa810ea1743b222a721adff0b49aef0bd32fcdb69c13f41f3217f542f34cd386455b3460739390ae0db421fe8d6b75494647e8dae6bed7d96cac986b73dcb178bb30999e851ad6a49de1bcea9d76b3a72843592641e8ebba49e6986c07141292452a0e624ed9893737d046be0b8297a4f53819440cc40c9f82ed4e6ceab304092527b4be4c6de865c05079d92f257fd54807cb7b66dc6eb147658cd50b4915c19d59fe103d7390dd3a8d0f9343eed8d2b607b7fd7b5b0762c959a9cf46f61ea705f40746ad755f9ea7774eec199d508707bc592b639b5f5c9364d542f6df9444c9e960a2631fccd5be2d9e87f4cd1ec3710a7efb51609beaa95c795cc52dd65977940febd1de09b933716768d09da7d8e4218e519b136cba572d238ebaac9fcbe57742bc0e927630e95799b8eccc31be91de2373b481a459ad8991993ea46c50c85dc674b36bb5c471f3e262e9cc52d7c4e7f5282cfa612ebfd0d7c75af0cc2d898e91d109e318d1f8c6573b6182ff65b7f7a020fec50e2a316aff4034d123a12ff4b16f25230d920a44be4c8a1326bc39832b3a9ad42bb92c9dd715d7a4ae8335a15e7b1fe5043fae57c6157a416698b7527d7202db0066071ebab31760cf401fc07825547da8d12eca7a507212979c72b4d3fbe68d63bf1f00e4de0fa7058abee44afeb7d4ba50fb94c64226788ae916846fc0ad1905d642388183a72662954c37c662234fbea5d247550254125066015274e6a70ca9ea9d52d27b32c416d333a01136a84b3be0c855485925b539f2b9f1c28903461c4699219143d4341199ee89ab1a5fb92740e2d916560be98c6f4871fa49f82de0da2000dcab529f7e2f6a7f4886817ca761f76a4d67fc7878ad1b88cbfff7a56d1ea23067cece446921230a6cf25f773a41a524e6dc520325d2b54ec5ce4e056b85fa16abeab647a87ee0917d6477317e6f240567045bc300764f90945e55e8cd392e19c4fbfe2e4f03ef0e44098c305700e5537471ba1f8f0cae33c248981057ad2fec98b7eaa41a052fa0e6b9aefbf94a2612a1ebf9b907b03fcf396414c7aec2216d7de6dd4748a29b352eb5d62281add0c84689e60fb10bfd555d2f02495d9996e4b7c008e6bbcb1a2946bf62772c2f0673db7f9386fc7730d660ec5e41f8a284429f87c32a9e7da54807aed72fa25dbb6c27047eabd0c617d40b4cf34b592583fa40a382535543a302ce96555e2348378a290642dca900ebcb75128194074c8ce0ba0bdc60661c98e859e3f7d4b5df8da6240d78e764a2918cc37caf53fc6af0e02eca1fe3392e57cace091bf23658f03c6590f7e1d69b9bf55f3f3db3f683c28e9dfc717d8568c1f89452d797b18fd2d8aeb4deccb2f7668291909f4cd4af91d1a08f73b173bc24414f62760cd54d443e6dd8446ab1a80fb2a09331c718d55a257bf22e69764c20a30723a1742447e97a02f8a6076444926244055951e316137740123d8ec089e322f2659387cc523f5226819744228839b4fe8e1f47e8c033e719a87bebc95db97c455f1b990fe959509ad80f13287bd2892b39c53b5b246e323af7584b79821c9514ecd26c02f9366128d7aff835a7c1ba383dd41c685c9eb631c2a5de26837d0947e87c2417cfe00039c8f448a59720d3b73b3caa179ae3b25eaa254353758342118819242a219b78b9c784f67e3a6efbc81181204cd5700b9661f8abeac78bd21b7f9bbf617d8580732b7141a611ab5a20004443c89f2087b5bfc306ab1f5f1c3e62e25c868f9fa335f716ee3b2260c3c76a7a6c676d77178ea7b1bbf9cd23ba7158eb26381d5879bc787c9d0637f20614a24a9fadc078b2fd0f580c9775703cea664e05b46e754ea4cdd4c2a926fc2d01025ff58ddcdd4c10baa70bbb3fb6170059414700edb8f79b4a7c32bec4dda3be79613c0add56bc07df08d1d4eca403009b3d764555ff7193a28ccdbdc9b971552aa9dacfce1bdb8481559cc2852ac86f16a60ae6df1eea241120fa941f225c18e09f867a1aca4a3dd1a39bc28e0a291fb85a08e31be06853616de1306b22ad7b64e5c03b5b6768ee18b4eb9c06c5e09c64bc02128e5d6aa60848ce2971b964eb85acd514d5f9ee43b4748deca6bc7bf27508227f58ec0c985c571e45034c635a8800047053172502c9e4ded608fd0b044bcc90310cd8abd7e651b7476e505c63eddb66ecd4a1288eb171e47cfa8b083ea902d7c760470b06ce27252f3ba870c295671fb564b683d592a538f08a2e390496a7dd45ae23c643be701d9cdef18a78e97ff8e4366b427984ea26246902e91660f1553bdbc07679f66696a8386288f85df4e60c3751dbf6c13ecbde34c1506e755da2b4c17da8a61685fa441f9dd4ee2d8b29507fa773bf475f9776b3679eaad0a2a9e0a91a2e9a7fc2b5b9171b4dc5fd3fb9d7bc7c368a7c4d76be064c9abb3d068a7129bb24f288e79bc65633e503997e0e961bfda9efc7c08956dd3392c3dae758363e3a811762e1b672bd7afbe2e6dd74f23e6543907ea0cbf7ddd0826aa056c923bc0ed77a595dce69d38204a5fc459c2c8b9a6b04395267ebe14d9004cba4cde4275aa8555160792911494daa09055acbc17d031365642bda00a598cae90deacc2f433812b3c680ecef0422f63562e33ef7e5e38053d946e985889fabb9d2160769baf4b4629f5ed135ace5077c8d68aee67ff548cacbf97f60c5a39ecc42a17c3d0a79c182b6e71afd221f1d912ed0af36079b75c7a8eead74063026fb89037e80576757f5495d18b4de16803fa41ee0b909fa6959003458e01d460d903c395e9408ccfdc4e4653a67622c9cb7ff4e4cf969835b9994b1de1706e9f4cf42a4882fb832e89d3daf485377125411f82b49666c16bcf1288b718609806ae945a189f9e53e94370ef669f86481b1d550d4399bed55c62d21e6f1cc48df57309cd0e63d4baa3a0086c2ae37e8f111ba9bad9d283646f703bbda2520d11d866b73192e553686fa129188848a7b943fdf306d92fb927fcf0b12c22e595d168ada6e4e1e67880325509fad3013ed0245d3d0e8ff10bc9049d89505634aa29c448d76fd54681139db3e8c87c12104bd6b22188b88bcb1d052ab52d079b0ef0259aadcd8a70e4252c6b6a8a13548a0f49d3b1deac8c91512df61091bf0f5a9b912f3a18d1ccf43bca19cafa9cec55e33e4ca34a06d2b4111dc0ad18552df011908856049c705a5e8d1694bd54f96d2a6009d53e07218b5594fb3f945c4148a7889578c243005340ae76df3b83d874d7cabb087202467e3294b6c8c3417c9884d9157db5809fd90e908b9be674e6876a2833c1c47a7473c33f59c2c3abed36346fed55be4919d11f0033abd717e558740f8fdc9765d2d9defc966c876aeab8ffdd77f7f405057964421489baf06ee5df50ec245ac1331da014add1253faea0b7be55a56da94e75b0aeb90b373eea91f990ebf76335faba8ee4a7343a13bb6f5518b9af9474fa314c453684a5e05f609cdb29876bf0603b0be21265f61c523a44978f14f2e04143ef7ce9cd74b92f929ee8585bb68d76d8e65e009e0f1fd9896356dbde87eee35ddd3b3cd99f0ed1f37369124aef915ae2fcdcf9169663b120355a0dc8ac167be0345b36fe3429e13cfd9951d42b5bc9938b0f38c179eebb94787828008a5546d54e753c95b6f07f89a62d9e71806b0ab2759302c6613b208b2f080831a0ff0fe5dcf3dd6784b01780dce7253dc46a7b79e3a85873bd7db0ae7a47fcf33544adcd5dc7621670ccb89bc179d0587665b7d631acb198aefa7fd294c34cdfaad25de6d4a32e2830b5dca90547f14c56e2b05df7a1158acdee1415ed25bb8fecc69c1a54882461a2da07b192ac8b1348f05ed6b2625be7f050aed7c09c40e66a6b6624324293360184e7d00b2b160b934b61512da5fec288ebb7d8e5a23cf1b04d89c75b24e42a5a36b527e8fe7e7a441bc7f84203022dec7fa89904b46f0d6a54fbf9865e09740a1075e9bec7e59804f46ca243b8d7aa3f9e89de6e752486fa3f0928cfa1229f58de8781a16a63ff380c7d8a367d6b4134dea29c037a3bd0cb15d45f99a2a2b74b582179b94b159826169a727225dcbfaf9d623bd225ecf22eabbf8e5ed7e1a8e2f278a57998882f2a5ff5a1594e0af673f4d4d278c740d258a164b930133af557169d80a8c1d16ce61b761c790fff6f47f43f652bc15388facad2a812b26b54d1428d2f0669d5b16514d76e38bb2340eb9c833ea8b7f984f87cbd7d0211414b3aa2c01c77d2586dda4d66220d3fb8bda5cfac12e293b37e79eebebb3e310b529b27051af63b762a739a2d8011a629cb07e51dd036b1f9943da9e83bb12bcd690f4b424839b83438bf66cd6de5f8ee19bc6483c481bcc3c1b5d96285b8af99ed7f7639febb64e4886795e6130b3edf3bc278ae826bb6213348937aa75ecebb412f7b17b7281abb05939ae2caff6c6cdcaa74cecf44929a8e493ca1d76c118596150aaec6ff95836cddea93929acf86e3df5669c349ce150272f47a7cda7e9455176fd8c3c405e82d47c0c4e5fefabb22253b3ccad524f16a61153003b26e3878ee3908927e29e62f6f142a8928aad70f5d67419581bbc64726c4a612c6d0dafbcabea7f48ed732517f78ae8f5524c3efcae94dd9b2ce2365ad0978fdb5340a162c0c286a3427b988702095f94ccfcded16584ceacf53b1943a5bc77b141cd8f71dc85b66a56830699cf4d5e8e9491f4e77d03a70bea9e6e80851557163f6623378b7bf124781bac433a07fb21d0605612897ec8c69f077b4988c2d9a2705b5d29541e75c8e75e67ac12ec781232acdebef540c0fe9da25d3b6c0bcddc0ded20ad6b845b482a979e779e86975ab6b1ba7035dd36fd10fd20fea11e670b78d1afb473a1af09be8f0dd753caa1879267adbeb59c5f72cc2889d951e341cd652fed5efc0c795509bbb28645072911cb44ada2e41289aa2efe11a9287be3aefe61f23c1c0b0f35e4482b7b43b9a325edde9ca98f3de8e14143a1adecae4bee83c8d4509c2ab9e2d2772faeb0071ca07bf6a437fb2de476866ad4658adac84e6ef9597f4ead4c5e79794163d8ee9cd39731bf4717417819b369db0be7a98ade6e1e7e12af0bf4fcff230637a41b2abcc29e784b64321ae693e67ad04264e8cfe85295ead90db75cad89ffd1f9190c3a9fe03b6d21971803af71f0989b47a9472c1f5e5af7b04c5c15177d897cde3865a8be7420347227d44d6dce5226b994ba09e9f0933188fced37ca9fbe4b7dd15d8e667b6c57ebb1faf97e440da606ab93f505f863d52e9abf619eae3022a181ff5aecfff6bb08acb4966369926b23a446f4ce4dbe18fe37d6af94ed035efe2644e3bc0d7e2d4ed2c8a856a81e7270213fdd8a32b0eed6c2a6bc7ad170e099e67c182aa7e42bf7007a6396f4a2c66f9c16dd5beee090a27b2e01892c5f1e1d6845c0adfe68c3ee61b64e34e78e3d58c41605fa29fa7b8f9a5e2d37ed128c7bb1074dad9b5adc6d2682bc75cf2d0a95e499fb94c5a5b7c56569abb73c59424d08937ac5493e27984cac9d235a45ffdbfbc31dd6b7c413f908369d59f10b3af8e2ca61e1df1d7164cdff4d6b9ecba3a43d815b97a0d78673be8f34e5eae167050cd5d554b024db4e384985d59bafc8df17a6bee4fec99e5d131078c6b6a1872033c45a0c972f902db1c333c2f3eadbb5ca9d7dac36e3232f80181153cb6a2f2e0003879d185bf6f461f03a91d6abeddad2e1ef4bb39133dea09d6e892ac2b09d1fef2ed48327e8be92e04ee29b2956d083a0e7c5714edd79b6aec96f0b9ce75c2db42565cc8399832ef4d7b7d44d8757d2d98710ee8ba111b6349821df45e71d99b0c2fb20784c3fd7fb369c439cb35dee36d2d90e5d690dac7e878c865d9c78fae8cab1d84da8cecbe84717d444ea6801ce7891e28e572036348e6f60aa7926dd42d03fa517f983d3a4e4e19163069b31127fa10ac120cee10423bdc4396a42b475b7af5cac54541de502bb32c3e37770a6fac52bd0cea790c48c7b2919b8e7915a77ae1ec359d607bc4552300676082f6b7c5c4209698681eef18a57b7f43093c1bcf6b9cf694383d60e11a7e689510598ef3f98ceb2e089cafe3d94f75c6580e66270ea18b37a79fcb77c6249972393019af759da7e332e6c98438af2c28c391760bc3818f54846b022f9d912d2d773aa6d92d80ed88b18469bac879dc04b8db7d9e13105e7427251e086b32da34bb3f94864ae0de85cc6ce35c2829cc968e1e57e4f527b9ecf877091d1c5f0441213f1db81b64938a03531fc9bc2278fce7fea20791fee982de5511ba36df73ed1511db86a109b153b9ba03658ad14ad62b3d202d37f13a05798d2126e96a3c39141d217885ebceef33f9651da67f5605154e5d1e284206e4543e6ec82cd37b0ce9d2ec198f48f22479d661d2217049e11079527ffb0904be5c99f7bb87bd535af7498ef430c47468b960dcbee75d0cb718a85cedc4316135cde9b971f059e733dc2020f5ea3409187ca21e6e0ba17a3a73b3f3a06c805799587769c560b17bea73db83c25ad0c37816f8d86b2a6ef09f8b3383d8f7a386e93db4136946538c39210c637fdf04038e82409c42d8a7f0bde3ad814c17000b5237117b377009984afc7b7a70dda61cb7ae4c24073003f463cb793212b30cc6b86443cc52f28723b9497bb28af95cdb3c75cdbf2175732544361918f1cc9ef81c4247a51733072a5cd7ff8078df8f1a17ab52f01f326aa796fc9b1ca7a4e9ec661b207c3929d3b390b275fd2512bdb03dfa7141cd6c6fc10ffb4205d8cf5368a5c42c2a50c53d8e577ac42194339d4e59d41fac6c6ed9563a802d18e1e56cd6422521a4df6fceb45877a728bd9297547fe8519a7846fea831d0bef8d4265ee45cc7778b4a76d65f2bdf355eb6063f9446ea7068a3ae7185b359ac8a739ec9a7290b29891510f8dad05dcd6f8686788d65e4b943c6ebf2f0b8c8f0facbd76a8c462c4eba61d9a15a6eee7165ed6359075e13e6a3e0da94f68810aa09752782c43ec67bf43f8f8a8980086405597bb85f146aa6d8271ea349aa17350e245c780016c40eb1b3bb1b76cfc066ba6c5f0144b1f8178638b6c47f823496ebdefe0053396ed9eda58b91ebed1d0fb6d4f25ce7bc6178b059bb6b6533657bce0deb132b1c3caba5064161d92cbe1e4cb4950cb60069c00ee50e1530ce665bc6a68100ac1fef53abb3f3fbd078f763898c263b6fe6dcf6280446abe8768c726469378c7d2f3d189b03bd9e69cd3a61f7383465a69ea68db4d4e9ef37ae0aa362a846e15ce4b86eaa7a1b492c07931882945877ac2e0cc163e48e047ec2211e80a5963393a82f1f56d31deebfe393cef32359167ba6bb84ec85eb1e509ae4247a70537f247155cc5c3710bdbfd3aabd8c5a413c5b7f5c4096df5b098aa257f938b1c2a9aee7ddff8f71d69fddad3cd2f93d3cb65d6478301195fe0f8f4c5ef6febe4d9feae69551b29e214d86680df7ec6fd76d7bae3c0557ed8c79b6f2cc6f119f47e1422c09e0987c820bcf85e0e70d8ec89f442ef9fde4abb88d12a72f632e60df1071cfc9e051389fbdfd967f080c860047b8293b2664e32f9111ac089f71a273229b6d2252fe5821d3ca2e7e25572b94dc13516279f13138d9f3ae80739f5c2040948f4fd2abecc69930489d2db78f96c3d399ae85de97cf89f3e7699028cdfd741ac5e975d935a7012ab2bb2fadc22ff88a0af4158f37a538e2ead75e502e71b2fa2a94cf2ed32ef5b4830e0f8368bd61c17c508f4e58a42dc4c7ca86509d95cd8a44fd04afd26f191e69999766afa485b0a1b68017be3406a7d7553fb803a6f9ad073dfc5fdf1888b4f527cf5a2e3ece9d406497dc3d42a1bd920c9ea28a3c77f20baf56a4d2f788d23494efa3df3c1bfd64ffa46d882b4fb7c6c91cb2849cf31a9bdcb006259b07723f377192ca13db4b16d9128ca3368e70c5d77bafd41039da77d46f62873ab8601e222face9798671f837a80bcbf7ba54bf13f34c0703e031e61e8fba4c5c054034e6489abba91fe82f54e6dd3df4af9fe7f7d79874f522745a7dc7e7260363618ea14be18117895eeecf95f0ae274c965586b2ba9ac5dfb21fb3f9b5d6ab8ce5b84899393d259c00d0ca5d307e9685b5ca6aff3491d1d40b65262c4e639928ef6da29de8679130989f899162068ce043172ded23e09bf6e2000c334e162e4793f7d029acc093e3f93dd4a1ba66808c89ab417f3a73b69a01cba020b31e9bd8ca089ae17fa196468809b7764aa74769df8375b50f2b9d7a27d1091cf2ea0ad58cc690d205a821ed28cc37fa7989044d4b4cf89add33f9a8e32a5648b0e8f2741b1cc637aaa899690fcf3e9b3e6af44932685d3acd215beab01b254f294682a6031cdda16d24b99989527887d37cf0796c631f33c90b306af27c257e0fa1e9b1df8efa1ed51a1ca80701cb104abca2d8c3ef279d0f2e71299dedf827e639f90c9d98ddae0186815b7af53afa92f889be3138ae8641095a0763584ce23cbff7ede47294271ea7e4f9ec05b8b073d095c8ab4a5e34e15576d377df58397e39b79de584d24b700268b69410f4c3535adcddd45d193715bbb017fd53411d950f0c4210ee8a491122ccd806483dbb6b07b1bef7656ec4b700bfa79b5674dff55c9d35493c0be35c48399c6142089c76ab353ffa700ab735fff24cd50c92f9296489e08b580dac7ccc9dfd97cb4ecc2be1ceea8dedd7ea265e8a5ad00a8429a4be77760c89e46fa21dc554a7f809c665f1d3f2be0e95d60693ead26e4d79131302082481c233dfad3bdbbce04f43b71983ad9a28425be7e60b9cae24e4935c14942f930b0826a888f28728592da07ada14dbd3e7b3db586a2a1bf8fdf93d0e27d4ff616123bcdaf74cc7a38619c68c577b23c9d745207cf85b2b10da83913a28b4058774ba96e4fb19a0c1bbedde759f1552acb8303a9175702b0830bcc201a60c2dd1bf1c2cc51644b6877e24efe46ac8665a2b85f659f7b2ac09770bd5c2380e92f701afae69f809559e0fb0ca3c619b2d029b2e6e92ababda49f94c836384c04cccdf27a92a62543bdc7b271f25ac8103dbf8f7d6461bd0be017e17316d5d1d384eec9139af168982164b342bdc26ed033b6bcabf15757847b4da190c0b4832a1871d8ecc15792db8bf4ea1f48fa1b05097e4db645f1710d7b92b640f94c8faeeeaf61a6fb9509000ee45270827e7b15f5a9203ce7c6ac6a5e929a911a62a7e68d2d567b8257f93f994f465b682aeb1365b733679ef7a2345b652a2a795ad8c899beb2f285b7188f962d6ad224147d6143354f6ad2b11dfe832b834e2432f9fb94f46e06a061e8451bedb938351e546fb5418f82ca212de2d07e9fba61211278cef4c2a53cfbb41cd14823e4b10ec7b11f94dab267f587351623e598ec5ab897b79f064ab7bc7e79003a7662f3556498563571b0de3039b0a4fbd28f940b6684564f7cadcc32350599deb910c564bc17f45b3b66d3cf14fa81f3c2a67a33cf896e30b244625c1e4bc3abb6cf7ee92928ec874f2b51a351cacbe716da183f50669c4a30b87c6cae09036f70362eb950bbf88dc415899e4f4b33232e5437fdaaf506ec66d52c9b4e6be5f35fc9c9978067aaa3ab29e4a56efe1f426c17f4a41a7284514f293bfc1dcbe1e30d3375107fb7b9b130041aba3802c0e2db37a69a59089c975c73713455b2061048b5d84d904355e70773874594a68920fc3904dda31e87fcb421a36285763aa6ce5d5b1aec6da57c3de6cdce2131bab45317114c87ddea292ac3298fbcf680de0192967ea420232643da25877cd59014cdfef76d7e2fff2ebc233afcc0e6b12558e60680869175bde504c55d0805ea9e1b400d28913370187b9b3d2c38f9eca6cbc93c4af128808a218078ad0d885a035c42e2dacb054712c03743cb6f6f1beccf700f65935a75d4ca93555a5a8a7eac481b9edd5a89805b1762ca2f1eba684a823f85a27ffe81ee96b20021db6b4e30296e5cbab8a225a7821cea1e51dff116f007104fdbb3b9130d4ec5886c4feea83d02452357be826f1a5cf2c6d3ae15e475060db23f730a651466bb5fd2cf83b25b6215bc3f1ee74bee340825d1d54a9da53187edf982897d66d060e28f915484f402921e7894f5481f5d4531a52e4b738180e808ce7e1714ccf6442c1d81f69ff1e986cf5a3978a3e3ddf33d82c37741fad062ebdb411ee359b2ec41f49ce6795407e2e8954e15b04cb9ff33969f958d2f9eae270401b5226bafda5930f724680956d18b258de3ea8ed24ec615b21ae12046bfccf440dac06097755b66578090649bbe68664d04600e5159caf4371eba34a81bc1dbdcf4fce20409775c2ebe89d41de85e80f13e75a1dff3c097e0e2291a7d86a8f49c893c38daafc5ce19f153289cfee470228d9b69970e9b58acc0f9851ca3aad17d94c3b24593f3abd897c49cf79cff0461d7757959e5389a0fc1e0f7239450ee307394dea7f3762096861745132dc5499dcf61bca46c4680f251972d379514ca03118e68de0490a6bf7323952753ee80f403f32013317ef295676d1fc54d910d6486936c9c950ff9ee7fa1824dc44e45b2c315fc897a17e53e3d47d094002fda70f599534e4310d68441ce042b13ec721a305a7f8ae8cf444044de1987b7f759af9ea49a64bf2035596d2f7b087b0a661572838ce9462fcc3a2b8b29ebc5001cfa7d2c80f606739ee833e4b451dc8b7f1dae319a29de893fe9628ea7034fe7e0d5525e45d13b9b5f55ff44e791e0af8af02f1f8eb2256a3aebc229e989101aaa0b6152cf751027c8749e178271d9858175a36374661f2a2cf0ac8b05291f9c6865b28e9861f413bca30172d40bf61652c1950deea16cfaf9199c96f7aaae459963c1ecc9e681a5fdbeef4b08debfb708855b595f71752d9cae2e2f0b2d467e9f253901e16e419c48948dc63f97bdeaa856f26e3ed71f65c4ff0e176bfe5c4d14cddc845db9489718fcf6efd6ed6726e367d0eefba3e8d6cf870799663e8b0b51a0537cd61c0fdc4b9d82e7c31a0a257d076f404af9b2da3f18c04e49e115b59e666fb771c160ceb5725aab8e92276273c5f1d45ca8720f482799d2b23d2649e8a421d3935165b5c53b8ab77b996336a4a959d70fe6a4905b3cf4f92ae943bfb1fe35647a88423e59d644a1e18b9a435da23f55ac53ea475128c4af9b95478e87cc5e80d26b3011f9bcbb9afcbd05119d6a39192f9d453faa924aed7ff14230a57a463c32b9aaf44b20ffc1e346a0612cacae11d285df944ac39b850f2b2ea95ff98cfb4793333b642c3b4e747c3ab06daeeb72952b7aa3ed735d98b49ca1c38d7204dc2c7b39856b9db2a6601f8837e77d06abeaf246c9bc581670eebbd9ca8585141deb791bf5e52145268163b23e77c2834af05469c38ecbaed6cb88d0a5f267399550f81300b777883c666bebac221354881748b1dbb305935658ffb01ea95c47d94038fd6fc65a02b0868c1f2465ff472dd4f43350e4092fd1deabbd2d8efa48ff1a9c47eaffdd788de03bde6f942ab489d6fa9898467c42497e538dbf4b36fbf3a12d98a829fad8cbb015447d518154f7980df72068e4475a0b32be2177f8624829ac657ceee5592e35cc742c6d9235878760f2e0c9c710a5253d39b36c55a6f082d64944a33dc5c3bd4ac64b8231d3ccf9ff9abbe5aa7d3f6d1429cd86ca405de8732a8ec663a1ae47fa4039504a848eff3370f96ef2884babe515e879bc6f197ec7cd803f51b819331a41aaebef6c8a2335006dd86d05ee8a305a3f2a7c192fb3fea0457dde3cd964a322d083fbf614873fe1fd6bbc200023fe8d4a411df12e1259ced45942733200176505261ff0bb1fa58ebae2583aa58ac3f7a5110351449f5d09ca825e5caa057b0e0d1f1879e59391381e470c5afbdcac198b466f33975c5e8d144bbfce0b49b21a93cfd76307e19de23339336ee77d51e1bbc6409ea5202ba8e8b5bc757c1fd3bd91849670f7099d3c7b62fe1e0aedbe625680e4a8633359e58c32b702eb1a9a64f5f33e93be71c18d392516f44d3fb00e36547f0516b602efe1ca9d6f8ab1523b2a6b341883e4cc96b1a25a26359ff16d67a5cac2cc4d3db835c1d41c64037c315e63ecf76a95d3f4cba6237744ec9192399d37bee7eef1b0fe5857f7b4c2832e06cfe2b937b8e61a0cf3535b862dcc8e9ed3724af8455b6288983f25be4c0d635e885730ce417aee69478af574331d5e8e6cd6cb71ae81162fd899964779794c38b91de920d5c724582528efcff999a03987a30e9c6aac6467b3f1bcd146904a8d1564779b6026c03920d549bc41e42719be24e0baf5feccc551acdd2891d5b9a59c3caaeb792b659ba56c2739e37f90dca9428fa2c247c3f71aa2fe0a2fc91dd0d7a280719b28d06c32c50d3181ccf250f95ef6faaff7f5b30e476b7900f458fe8f19c1e2400df5e062d29ba88f9b16f7128c9dc9eef5d66158af46141aba3ee208e6797a853fb68b4b340130ed9dc25d225868f4f968113ebb716e7f78674615e67a74d1dea49bb6649ba3ede53af8347798e2b7f43bafa3b0d8fc051a8ff23b2e35c4ad25b695324fa9a86b1c40e086c4a51f7cddc55f0fc778ebd372b44afa658cacbe32d3f6ce35a4f64e59d8b7260c941bdab7318d2ed8807e4171ab609a42ce61a73cfedce653ba908d3d0628fc2fd808537af36bdaacf6b28841472c3b66fed0e95e83f5e60226588e313d43df9f25350785c8bddbb2418795e627bc13661d14cd75d976efcb3fc14032957cfbd8ab6f52ce687d1a4bb7dd887e62a8e01028e01306fdb1de37647a2e44e573ed9a5f61d5c0019bb5d8804a2bc28b92136b1b210db8826239d2a753acad98da00191df2f6279923659925613a1fd6a23d7792ff3bfd0e5b37863cd94dc6a044c2589dc1cd5fc74a8dcbc06e2c56ec0ebb581c4e799e01f43081bf65bfd2200fdfea4130f69ab3be8023a5d47395649dd30a98ee025a5ad0e4d012659c78935b52543d50685a6a8475bfb5249a8d105cd9e3bcb86bfcb428502380651daa0d48c4b13012a50e9528d3c988a461ec4650118d9707a23fd762e3dd93a9809130b89e2849a2b1464ef9b5bb439829aca5e82119d3c4d922922cf8c0268ed304bf8d4bb0d9b34eefb4c78965f17a49d08c4f28efcdbd8a2903aad967a465b33868b4b7d46143f42f55ae03b58f5fdefd2af77b3b76e2249a0dd45aff36a382f02050fdfbc9ea254bcc41a7c98a9f4d82144d040fe55ff474a6578fa27b8fbf0d4e969c0f1cf3fb7b18f023d81c108b0c77357bafb0575b4cdf8a4128d46274d33771821b73726cb6e1ac3f2af3bbb4349c51880fa65d69904d7f5f698fbfffef283261df677b55759a144e33d68e1bae6cdcc54bd6769f7b6825488cd129c6e52258f6b2ee38fe82336c0bc0287c4357ec44fc55e12b42b921766633f202f6b8441b3cfc35eec9acef3f0fb81ac649cb7c257319d4d582aec3ddbd55789ef0bc1742c381343005fb51d007c18baa38c17cbf1d8e79fc0e7a072123f2c8deb536cb486c79529372f41b671025eedb704964f8fd21de6f8bced6ce1aa45874bd89ee87ebb4c922d807dbc654c02e5de126ed5433c597716c4e0c694fabe51191c73a7ba0c0459f225db491554dc7f68f22272c10a862536ea726780b12753fc89c7008e21f75a98ed81ae2ac02492cd9ad860d26cd3e698b13d9161ef9433bfa3cc8e40f4675f63a60ab7a1a7b0d166bb8d2080be7a39746a5a29a320a05ae17ac407556c5a64fc2b8523f51dffde32a063922be93f3501781f509028734a30daee5e080152bd3a3ae51dfaf6e1759336d26306155dbfbc396c1f705e13ce0401f07d5935c90ee486e9bcf87dc19503fb8771640906b415e8ab9c4b2bb78a094ffd30eb927c4e333a3cd157a16522e1d434d1a5ec8948e76672dff646e98212eb6e1d150c48933e5f60e0f105a827910b1b5ba502d0ea5ee73fcdc37efe19c0aeb03a82fa4153b1d48c00698b86e90ede7b3dbdc4f4e12402cf5d2d9fb0936798167ddfccdf8c6fd18d62e2f6661354444e2a8d59c0662bf131df12f8851f05e465a56ac569edc2a3b9e38371ca366d8290f23b59714b946a536dbeb62e84915f5d6a87f031d8adfa0071de90ae59b9f474dfca0548dddcc329b835cc4bf2dda2c795fe5651908c17c423541ace81b808b8a25c54440f81fed450b8a9626d1d3738c1bce0bba46285510169735f53debd531ce73e13f5823fa4376865731fd9e23eb7930b5d67121f30459ef9d6a9d2b7a9c8634718c0254eded33647274657b6c15195e438eb1adbb827c732ba06c750fc49f53e5d7a189454005e10b7597e0778dfe98644da7280f11f5543861f81bd95205249c9d5c2c0fa57cae250dc72f0b216827761783ca617057ed115ae3b1eb3887bb1a8acd83a322122d0a45736db179e60e11495534358344879093a19a8325ba2a7a30d5634c6c2f6b5f2c17adc0c942eb9325fb6b75c741c55bd5f3587b43d5b8c77205d17a03197badabea69dfef96f2e13c9ceaa864413d0914d6536c6eb603e52a0245fc71df3142fd53fbd78e2e3d7f4e32b61f4ed99680e1da7f15f7ca936527811a4e7200d8a355d47db66ec304d6f33b7198a69cf137eeaa29e7f22f9c745f699f344c8f5dd93795af52c3fdaa1fd8f3f8c92d8f66a29593636886e93c6e64448c548d2016cb1f97dd9b9ad5513a60fb6bc9372d89cea8e53a6e3a8b9c86db1ae8647f5b06751e29ea6b573a4a4a3da8c1053365131980644ea536982b0900ef353ab634a001f4cda0e9f7cea4fc3f80f891e23d083f1d95ebd2486e45819210d9948e6e28890d65a25955d1d8209bbf5662221ae9e9b218c6662100ad6aa9696f1fff08fa5620374620f5dcc48c574e5744b5beb8fbde491bbba4759820b854270b6f5107145f15d6f167573ffbbce306a0d67ab52784949c3c2b55b8cb6971676864006db24ce2d21a2407570836c04493b75f11eecc9446bc32766cf695234ee9f1292f616977f45b3c9e763ad382c7510d18bde22e91e141b186f47eb221234f4e3994198ceec85138b3d13376a84d9723011c9f677127a06df2de3f275febc88e1563f0f8d3456289d3ba36ed005df368b2c5245c8b9d756ddfc64ccf5d87a9f02437ae976513e76acdb257bb3ffb6b4d3b820fb1e079d3917d95d67ce32d7e185b345c90ba8cf8dba60a177fada24cc7769f48b339888708b4703765d0cad92d6b91391b40388875785c75ddb33a4c58b300a9e27a99a5735b7c549bf406477b854199fb372f8b5e9000a84b85af000dc39221adde8a8321d89426465a2c06b29416845c3893979920541c13922cbfb110c454e8377168c0736238c2ac679c6892796f509ec33a559163e1c071000d0696df9ea222f77b1f139b95cbf20e986594fbd5da8f01b1d7bc07b8015a27203c2209b8105af1acc8065bd1939a1bc8d89a703b356aaeebf1cc9bcfe2c2a3f16d58d82536efb4f15f1618627b4d1b65b47166d513bb6e2cc2c8fb1b38695c281b845353580787d44d79004caea66ac0dce103af9c777e111da8c2bb4f199dfccadb61beb8529025195b12819c4c10f24b77fb4a0fd3857e10672222749abc7bc048ad47ae0acfe9a91d92bd78026ea9508a5d77abe0920bd177aee6255e951beb1c978bebb310f42913c6dbb9722785a6ed834af3ce22229ac0e95c7e9de045f854fdc9a57092d786b09f7182d3ea5362b9489a6242e2dedf3cf79cfabae1cb6d59fc1bb8df91d2ea41f7643133c0c06895be7345fc07099f54c0c054ed25d06e65c056857d5b2ee2de7212931f8685854a29963f195dd6841a8ab318e5bbda38e64e0a527e7d0314c8bbddfe517cb73aed2610a8c90c2c92f6674166f0d75394296ce7ccbd6a78af8f6782a0207b14364d9f1076229279310f5392220ed31a8dd48c53c35257f0b404ffd5bb65384a1a5e49c2242520009f1b43a7db37499db7173ed5abc3f7c9dac4de10532a359139c3541fe3d45a0bffa0903fddd798915e5e795c6229e25e75bfe6f7304a82e508d57ba1e6f44a6b4d8f18da076f99a359213772648532413d171b6a9929b85be3b3c87386a187df949098828e0feb53cc3e6b0e6a27e20c04fac1cc78704855f6d569eb5331375c7bb0a5a55771528018fd564eec4f6c1ddb4416b4fe994c906450da85bfbd01121bb917b6ed3df48a14324ea3361790deff2562d17e547bcec3d5dcd1ac6a563c61de52f10e1e1ca67d5e3a2dbf28e0a8c2e547f229a2ad318f003ffbf80515b183d23d7edbbdf66c4099dac665fc930a820de69b4b57e21c0dc57b377c8c416f705b5a966319a44dabe042c24add8a27498228bb37c593de3e2e20271a820197090b6688fd5d2112f92cb7844b0cbb6d5566d5baf98302f411e5d3655bd957462e843d7c667fe102163c92d7f3f4e50557f44d3d7d62a91eae9863a5a2ffe1ee6150496575fb2e345a3d7d7ff5f68bc665ac1f7130420820f82c9fdec3341916a307d33812a967d3f5424063b87877a0db548a3c6bdb21c7400e20826a0988603ff8f897e0d99513169f07bfbce5c6594b30b25016309bdde47de5bb4797f1dfbfea30da76fa9fc9eefbbe1d8cdfed34fecd618f6815373250edf5b0dbf5f521d01fe4262255c84b0a2a039be1ec3956fa9155584cda99aad0542504cb2ebdee5815fddb0938c2ef90737f5ab23efa14573ca260e69ce38c9f01aa22fb5dfe91557614ab7220713d98aed75cde93d1c9810fbcfb1b9bd1a35c1fad98e7b97a2f8468193ccf09ca904fef3994163f4c493aa47823679aed42ab901533a5429f8674208201c2e39c1da36f1d73bfcdffc6e26e747d97e1e26a25df245c2fc24a59001ef0b0b15e1c3d11002d0453bba056988e5a5dd9e1c6ed7406b48dd7b56d40c586051c31abccf0c3072cb40930b13d2f25c86d55a698850f0957c38b9582fbca6faabe4dcfd53d4adf98349907f10552d775ad1371aef22116b0320fee972e85559e9a9d75f1ba27206972f818244c053dda3994afa23b99e726b88a63ed709f66e31a6341f9c8f329b1c0e5269ebd13ab23f464bb65cf500bbc094368b559ec1e9312bda5fdccb30a92397c023d1de8c6d25f83d6dcb19eadc24cd74a3ec11a70f7b49be5b8db45d8c6ec6d55e162afa93d1d397d8d211fb505c6dec56effa4186aada499597526e1f345bf4aeac82b582fe00bd135afe59482442c36518d1b2460dc6d051edee8ba60da243ac1f15684b7cd653afb95bf6fbc8428efa2679ac3d85ff48a7009e771c0e119139a8b32a032bb0bfe4a3c0fd8a7796687dcc59f21ce3316f630a18c25372ba690df0b8e47047467b5ae821f76ea73190417bc7112129c337822e4aff82dc6bda0d37c6d4e8ccfda5619050d527f3eef4936cf50955f5a3586c90c88b09cd85475f4afa1b2ee5f38ac5b4e2fa3b241119c2fd8f15c54cf8d404a68992deeb4b78223f6455b529e6339f88a91249053dacef96e1fe03ad39ce23cd5238f538e3bba12498384296b2a90d04de1d059cf4021f4c85236eea904ed46b610e69420141d12dcac0b323e665c474d6d8ba282e36cb44e330bc1fda6f65c1b65affb7ee0785ce66dae941500d0bf82ae35f2080e90088a3f42c1354d4e8fcb2a3bcb3be5db729ab35bde331371a8d586661be89de46f05c00ca583f971d0b06b98b86d3f9e5d0ef91d4632dd9814b60cf11f23a2d045e650093dfb451f24fdb88de5044180948ced78ad00aa3c76fdb4e0d279a5e87c6b300ae3d64f847ea45b8026550243be61673359ce6516923d6c14c77eb7bf76bc32a643905f8bbc20ddf9ad82386e155b932d4f8d310bd1755df5973e831715937e122d3c623d8bc944adc4d905b352da32693a3a6df072a5d083d989be8992af5db5d211d77ec7ceb5a54acffefd583c3d8662c65898e8d4876c0b5b9f17dd22498c30703b26e17741753535abeaf3931cae7f569def70027bb32f8bc0aab9ee9a20ca7de61a43c5b286bf7495bd416c9074c235165ba99f30b5602aab00ef87afd720d315c05fbe2fad4c94b89bbe3a85024baa9cd51caef965b96e1cc30f37f12456444ccf6ec22f1b84597c4d1511e71f335e1d530bacfcd71b4e61464a53c3847163b72b106dc126d12479baaa57571f4e4426dd7ec82594b1b009552590be444dd6c55a0d9456ba21b17b74eb2d51a21329caa6f511be67e40699cec7780f6b64003d25d02f50f374ed5207deebfc72c3e1081001d900d51ce031d556c04a8fd35bc72232758d474d6ae28f18ac0f463ce50f61f9733922d46084ceee92e0e47a65fb1e816b821d4a8e759948e25e8c2f85a388a49ae26052e0c889cfa68690b65da893446366e2b959b659f79b744dbe5a748ef95d7b049bc71f7ed722b6a8c5c3e672d0909492e3e15b49c67102b07750deee9cf82c6988f9436e793d0b44a6c10641c9e6d9eadfd5121b2fce796fec7ca3db384b7cb8f1be4c1478ea8630a3988a0071215ce5e793e7beca7d240e16a9ecd5008464312064174c191e3b40dac984087115f7ab3b74327edb6794e127d623aaaee543b9f8eb0ce87591f4b9959db6e5a255fd70f7839ccea808bf68a85d19353b13916c5ab3f3033364230c898658245f2c7aa2e6c6725abd3972bd99fa1137af22d156a2bdabc63c03e439e985381eaef8c63695ef7b9e65dc102f80c52b88b70ab95b4f68e874549d92c66bc9fd7a474a8b02e63699461a30d9c3562d4c35effc50dff2716983eca37599faadb156ef0af3af60dd169745f7213d83e2ec14604dce1c529a83617723a2739b1bb24a358fa8e7ca388c9344ae74ab2fc26e05982888f6c29c9251ee18349037d388c25e9d1d785833b98c3d5e581897ff7b4e0956b2303b02e8bce8bf231bd7f8be05101b2ddfc5624efd13e4b60938d115bf45163ccfce422231b7835c34249c8e539c210b86e44274d3ecbde393c59058e02702e6b8974d5c748cbc5633801154a386109144ec9811f625094207823822c5f5802bfcf73eba45ed3b9aa508eb1da92c94be90dc6bdf8f6c01651d14d7522e2b4773fd6fb81f203df6209e1aa35d20c4390ed57a5c3602cb6a474fde8990f593da4116317cfe7538026fdcdd9edd83fd3abfb350c5f66f8cbe443371459294a44803625b978a419f69a2821cc9e077b911d743c0a15012fe5b1259fd0b727ad70c87b4925f883b4d2cb8da910ca9637c58843e0c5aac4d54582d51b9ffe7c00bd37d835b319c2eb1b936de9feadda0bd3a1495c341884a2452638bf343585ac74fc9da9f667ee2eb5b5e00e0e4f690b1d0dee8b855e73f45c0a219d676715ce262075924892381abd35649432d3112caa1fa381bb3ae4abb707b47b3754388a85ad879cce56646e8267d4d2b70d01991607c5acb2df570dae23c70e5c05cfe4e65a065f743cc4013501ade2799e84d5574806c498ef91a01247ba2e8cd2332221b765f740a4669965bddd3725d311751325e90cf6742397c0922501a68976ddd7f934cc3d79bbc1fa1922ac739f2240c140d0cf9516aae372b1e84d2751f4fc36569579a2c6aef3ad995c5967ea704d59703c9acf270be1727bdd049c047b264645cc394542d8624c10fd32343dc155b39fcb2030e10082b84c0efc9e484aef8ddd0e91cb489ecb1816e6a4e91f142b5b5cf18951759475c8f13c9234246a06d523e6b21afdff5b71f0972117455473105820051613ce662ac510250114fdb2db7eb7a88169da9483a005f0c6e251cddb26f656f99413fdced3345c47786b59a5afde031908455f337d352b83d098ccb430e0a70b7a1df64180eb13bf5285cdfc3b102cd62c2f3ce76356e337afba6ce6e317d109a7a282bdcc9bf7e5d5e8ed69799768da648af205e8340d6d627d93ecf8f4c0347b8b6f2bf86a3ea8c07cd151c3bc82ba603e4e7e3b1032a7ddc6da2d5e1034c7fcba2b3ffe906714cc52e6c3d978c7d23afbb93605471ebc331b27f53e288ab6b46f30e68b2cb046d25e7bfde2321710b5a3346c50f47e1814bb3cecb883073e5f798d7031e8d31da63ffb8f2cdb18bd0871b76180178ec76caf0eaaa5aff010b5a1aa920660f91f74d026efcfeb6970527d69e270767da02529ac828b4447b4b715f9063712815b5d74df827af83a0be6432ff0cf38e84b55ce5b8717fc7ad8cfbed8aa3436a85595e73ec15d9d2b87f91f40543adaefc52e67f094bbb15cc0da1588262873b0837f0e9e5bc391c23d1094cc5034a37959ed8f0db65bbdb15f96e719876f822b96e85df3c049aca24e28759b95eea90e1fee1e64b5ac423b8131386ae8d0c75cdd20c41837a1ac658e21541e4c38965f99e8c8f3ad3c18f80ef82e3ad1eb2c4b84601dd6dd1552ac6dd8b0752eeb77503b5b59f7237f495095f2711621f23c37b69219683d82ac5eda66f912f13ca61612edd1f18ee4e4cff4f68c53df977f4fcf738a2e57e823e7d8a71f3845ed8a4ef9aa01d8509d4150d84915a882f2018e7ef37ec0b70622b4829447d0ff2ce3af7c54ce5384ae35d5e6a5606ddadb19b216992a285947fb0bbc7f1515611d6803ff8f59d11542820ebaeeb20f8e75195178da9bf820687646bbf9c9252d360a3b699e1725a5260defd9bd03056c0af5ab0a54cec68a31395497aa3e1ce05109985e7625fbebf688a2965067abd722c3d483396b0dc366ecc37125569548985c6921cd4d41785410fd3918ea697c94e9ff13a25843a68e819f485539ecd92cc3a37114afe39795011513091e97eb455e6f67650abe55dc2866025e85f229f47083347070b6001b65372fcf6931068bc265cf1d50f6ae6ad5bef7ac5d04912a0e6b36b0fd2400fb215ca864f802a7da41c09fc4b07333983dd0f0cc416cc77ddbfd9820887e03fb56afaa68a8fcc7ca8d50ca5f336640c22ce044589172f5688794f3a68ac6abad8f1542146f3399bfe6f9daf34ab1c4ad319fa0c8f41bb90298dc064a2083a3950784956bb5f36ffed2959ec13237d5d543af8f2abafea3c07255d27ea20ce5b8b42ccfe1d434da73b0e2fbe0ea25e46c6b372e50ae7df9a10cee7d6d451708451e52ad75c9d1a9bb327f19e2faca8da8b46edb712a346f2f97b1fab379c42d84e1a16918b9f2bacce65112f0c067c958edb36b1b86f73400b1072c67dbb9d3ad27320b8349994c07531e974159dea224a9c0b42b97d930c355b181fceb6d29fec377a846fa522b8aeb728cee2baf245c539bc37dfb3a4fc8012a609f1141c34030d463eabb65e1fe6d678ca4f0a862d70bc0dd2c84374d0339ea48b53a7c14c3c69fd2592868e2327d37ec825d4aea87a86679cd098a7f9f84b08e2add5db0cb7cff7c4494d7cbdfa94ef559c54f0a93f05de4d41b5282ce8e16232a9a4413c77924e56adb322d11db1a080beebf60c182a23017d98191f235ce119d67077b6a3c6f26c25df460df448f64ed26c4ab42815ddd73b2142a84afec2ad8184a6b2859a24b9c10155ed9e304cf4063fb08cea57dbb66b360b8319b57bfc31d24a81e35bd464f50a1ca38fb32ce4abd08a0bd91812c3266f5a75d992d662ac37a7da908b68daf839793b72923f1dc7d695ced352b0e9c6b3df37c9d69d071c8787f986443410ed69ba67546f8af074d53ff1ace2995247da25121676e5f330b09a6e230bfe503dcea1dfab97302aa3acbd1e00078ce072d5db5a3d619a9283e154f4f233f4921c4264cf15f23b5206c1437802ae1404d12c4ffc5f70a312d86ba08bba7af055e80abd35e05161106473ac06f62d882599c8706be3fe5ae0d9258adf929b3922ce18dafbf85e4c7228d40f6fcb2f069db4438f5291ccc17334268afba45b918c1f3625249ab2748eb9796679e93d9a55bc6bf2c7b6ec18828d9841081e51265580cc27dc529593319ea5c3e0a9be384dca9df88f444ece7a87c10f340729afaceabfb2387891de509e698148331532f0f79db24f79887bd8ae450be3c559925cb292529a813633cea3e2aabeb2686aaf32733d6c23ad8fae5344da65e398b341bd2f33d6d7021b5c1b450f1af8627f066c92c47e5cd491fe6c599e23966f055809d80b1469daa1443f2ae97c9f032ecc4f69a5193e3dc65c4e02c79c5770d04712c8dbd4b519228e7d30818ffb6dab726c8dfe2712ea0b1fe934ddf6f9ceaf058ebc78474f26f98a4428bdd3694c314398871031eb87788ed48683a2bed2afd9111d8892fd8b82e1543cfeb493f72556687cdf2f26916ab3c1ed288d637f59d520209a1f5ca69801746946780e335e8b9ccd92b8e75f3f0d992434740c765a98118f1b4349c18f198f811b31b4098ba6d2b4581fc3fc2318d26d59d98f96bee7b2c921b76b5beb86def1bce8c6d599433799dda167e5b574969d944f2bcf1a78c3818253d424a310d9ebbd8d8de1f6a690febb201f552afaac628c006ee75c5ef7efd7bac2d393b34ad18f16ec10e8696da4cb0fc86e09baf91eaeb6ec905604c20ddd91710efd5c761db90099e324eeb8cbd91a01d2ddf4f7b98e75da7beb8f6e03de6a7f0bc34f8b701d3c44422fdd37f8660d184b433ee88b956b4211750987d313815510bf23a322b1cbdbf0a45a5c76bd51527f6102d89645f6676fa4f41ea29b535be7410ecc362584db097f3c36ad982d6f0a434a7a7f3b3b7107ff5b4a335bdcdeb47734c2ba4aa0c59f68d8da8b103b1cea651969b42f645cfbd90a6c0496eeaa0fe9d61f55c449cac9f4c0f7375446171132424f5749948e5c492862212c8082b6645d08d9161c529a7da086ee36b2405a04f98dbc192cb19dfdc4f250e7e443cae3303228d0cfec963394aa227df92f6cc079c68a50f2e510808c1dcf7a7cf445566dfa60f45ee0b4f0a8b348053061f1a376896476ef1305013b1b099623951a76503408f40052f61063ef53c4844de4de1ebdf35dac5d89bda056d3e5a3ee0e2fedeb6bea2285f322f77b4182ef12bdff7a1d9e314f70186344ede0156ebb7db97497aa4fe0efbfc19c70e1b692bf0cd23e5a51a7b96f99f16f5d5c648be9a4ad2a023ba8e7247fdab8482d1379a12807577583aa97aac1d79161a055039464ccff3fa605742f0871addcfe26e50fd9e8f77e51d5ccc7587505ae34138b5925f298b382e3afe963369f9bcde97387945768af74f5ca1342deeea0000e3b21feb7c98414c03861ad70a44341706ffa3bbe8703c7e8dead08c6fe9aef500fe8769eeb4dada067d340d82bc2e3d9af410a9805ad203544e622d4f90bc3bb7beade0ebf7990ff7c916d48a6403b2f8579134374de6d2a9c215ebc98fec86516ae7e41c4fb2ddb4b33a7d8e930a2269f7d0e5b72c267418559012884afb2e3ebb98a2b5f0e91dcaee1991011cb39449612d07bfd56429cce29e6b428282e28ac9a4dad7506dbf7a2841d171a04c9f243dfc45e9fc5f876dbffb111a1ff8e7386b2869513f1cfa9e4c8abc40302ba20d0a7ac03c6602bfb3e3c982147aa8a439f04ecd254a0205355ed5b8c439ce90aafa1b8a66a0a4ad1ddb7d842b664eb5e74df1e93a90cfd6ff6d4d2fee73ac97401859b28e6f4a803e0e0cc9b9e9c29e5a04ff86492a5fdef16a41e388f2ea0d5f49c2f7e3d4367f952a1c6fd219af315f29dbdc935b00bd32a7d97bdef85e95b65aad3057520552b054437b348f114ba75c790ba9a6a88c747ba6332978445f9dca004db5c63f69cb49c4f994895bc7be3f579dc8d75640090587acbe2149ab957d71bed01b31aec26305b0d64125a1f53d1891565554fcfa12ce080be2bc491ebd23e6a25092a4ec06891ed887bd465a938b8937cce171585bc5e163295651c605d77cbeae08093ed3d492cd63a87b9e13686a4d135a5217b1cd519ca5a8630e7c27ab90c82e54eba836df63622cb1b4a8f1fce13e41457e7915d685793c01679211f38dcffaff39e0a81114cd194f26b8bd281138b0c1151c4d1bebcc12aefcfe0e139c292b9f472076a1e2708c7c5856adef57629f73c20193e07b03e9803a9f911b756e8e9dfee82fecdfc2b4b26ad180d1f95599813a7d8027445e0f5b73518c742e3b7639f9a8f2400e7681f9081078fad285bcf56e8bda9d019820c6177837d11abe27ac4d22658a00204b393e774c37c09650869dcfdf4dfb4304ee8044ae66f9dc3a4e4179015dd4c8a5900bf7a0d0c92aa1d1ea375754b4590857b915eaa42435b72552858c7106b8533cd88ba200d6f211f8ad7adf59aac1814ec92d23011074f58d35eb52cd6d7e2c62223184159985c1f2bc2d73ab4cdda43198e770c3c856114d4f3b81158bbdfa2fd7b40747a03cdd0ae87a919fa4d4c14dbf5546a51703aebe9007aff21f54403797538c31a71e4bb990a859be1299b7458e14224a0607edddb1fc0955d36edad159d13a9241c8c6089da3a7dcfa461b04a74938d5e0b2c25343711ae4cfd368fbfddb4fa558d45deb6c5364cb291bf26a1f516a9311d48a54a20d7770b16593e9a412f861df3ef96109e2f34b5290d04fd5a1074e7eb145a46b62ebce492bcd0a7d217a648fc93eae8d9e2caa6e8adc1472edbe65d62d07c83b0c734711d6716952121d4580674020264e6ac96b9ab4f1be85c253c5ab56a56dc0d0a0aae489ef4448cdbb94f8c974ea710188be196b3a67d76e4d9a641912cf70d2a90e73d505a30058310bf0d6a19fd288e773f86bc38f8aa86cf4a50b6e1aa919cf4b33a5d2ba4641c3f141bef1caadbcb6d0f11c0a13816477d3ea8af7310e19717d57b805d7a3ccc3d0c87714f00779747bf9be108bc26ea29240ca71aa4970bcd252e4c91f793488bef082644c915065e0d5f3e7a98b43a018fc32d35237a14bf37d36eca3e6d021c5745c919010e704486767d6e26ba8a80afbbbfbe8815dfbd4d90c8876c0d34c4b88748e31b2d37dc6aedea1e2356d66136f7d7616cf6af97c996949ba296bc1978a099bd99faf6cd19de19a3189599685ea887a8752fe1bf22bbd818c79ce2478c3e402b638041f56d62be5ffa7f74d9a15abd75a15ac5a5c5fd8324cc8243e5591eb0e10709daa7ca269d24bcd3114d30b414a9bbe0ff80fe655538e6b134efdac57b5fefa70755f6505b2f502b9aff570a56f38e88000653839606316e4bd27ef3900f6824c55681f0c83446722b005cc09aeb7a92985e4d304c4ddcfa3b1f7d850f919bd6aa5487f00917f1311d524cdbdf089fcd5fb0993beeeec19d6a008012b8b2fcd73bfbdfec7fd2e5a75bfd1b296b1490431097205218eb840b7dd095f3b5a6bf10654eec52a532f5376fdad46bcf77c27229fb82e1fa6ab415af193eacc1095b523ea5d2d4528a63275ba9ae57a21ae0d2d5daee5f6294326812b38e87082574f9bc4ace183858be05dbdb3ac7723174ccb6a9274ed00605151f156e263540e22605f561b848588ef11091ba94e0739c6280024b2ed75144b9cbcc4761fa4bbf3fbf070fb21340f595200c18e8166077e56b7dbbbfa0f6cd4126f43297681161c70e4791d8256e0fcbf7b2b49f7423d45a81fa878aaf8336618f02e15d77f4b89a67adfe84fb3bf28c75d40e50284e8bfdcb849725efeb86c2a08224bb5b0ad1d78179ea96cc7a24c1b77f22da137622ca12cfe0b564bbd329ec17c6544db54c894f1c3c588be32666d9d9e766a49b2f77d49d7f271e323949d6af1ecc52373636fc1364de8009a4a8336045758f938add9e2a77d4938c9cb230b16b221d617bf5a3b023416a6f076b2db08e1f0b07042e139425b251fe4fd81e02a839651459f53aaaad36bd1d164b058050d4774081cdd3bb0771d25ba577466896dc59fe06318a1e730e14e74f66c59406465767528f7f871ece539740777f737f56e2fc2fd9acda4fc7a459b6c1e5a2ba453618f0c9bf737867921382ddcc3e1fc4f4479c1b5f03aea6b338ff1480588f56c68929bf1ad419ab709e247fb645198eaf087c6cb2146f9102fa9b62b2419c0a4114e36a6e26b47fbd1bb6b62c45acf1dc9a7008f0a5b270bae05e1e177bb1deb2a6972e750e14098b84d6ec2862d073b51ece23c9136f9589821821ffc0cf7999a7a9574ff1a2b4f8ba0147b555f904074c5d5a7c3fca5c5b2d2f84a07ddde0edf147276d0f4885a78c719e1a7c491003b5f1412ceb996d1e9981071ef0946436a82730994a0281638ebc46966eed271e6970881d74151252612422ad39844824cc7e618a88e75e7df65c88e5c19240c241a2ff9616bcaafacb96c2fca2d6898cb25b048774d7ca9412f0991065c3eab82e3ae1657b2205eb07a435c2f41c8d64783014134da85ee8a995983925aeae85643c2c53343e8713ef58d2968f04ea8498f3fd76b1e28e28d535d9d2eeb33886c570da90f696576fd04db3214573b3f5c8fd61af3c0ff52f73b0f0908c02b26a18fe16b9f29ea2455e9b6a3de8a5480a9792b6e34c199c5d4a7e3248a13600747dcc59ca3141e60b776af130c7398b59d0788e0138904ed33cf060680f16219a42ef3c5e1a110922538c599c0ebd556867f84c6567d1c42dc2b0e867129f76f01ae1f04f3eba5484046eb0b2a7ded5ba77b3c13dce33dab38c0d55c31594b6c2b8a84160eb5b6520fbc9ee4a1ea237faca40bc9347daaf748e516d97f58391148b7c76715b460f6797c6053a5cae4c1bc5d4874f29a02523911fb4f2b258a3a57814deffb23f139da0edc9de4addfd8f1b336b44c228c4dcb453effd0d3164efae6f8d319fffe13823ad9a83e5ffb11a9f1281591d0ef354fb7b512fdc2135fffadaac16db79cf6e32c44d7293b4bfebe23c231277d80d23f1a46c6d0804c1a33e8bd81b1d84fa10bbee007fa8d424e2f79704a64e77a3cbcd71cef15773cb1bc16615332fd3265e639545f684fb10c48c548efa79bbdd155bb94c1e5fa84208ec6db024bb7af1591bd410f6f7105ceda06c6ea2011216f6dd5cfc7b0de970e127a677aef85817db33655df1a0981bf4ae69dca05befa12f3f73ea9d90597d0ea3a08df17443af5e25ec25d5f6a8e5a4c4ba96e4963823b939e7b9937988d1b73906a9ceb3a86091a21244c336358f6d84331bd1faced90f1c0faed1a3aa787297c2ec37650bb06fa3b24c1afa2affa5b2c3505b29c247f618f2c09e86d01585e2c1d6f312d3588dbd49e311f1d6576d9478e1e49411f5e11473a9473e94ffbcffe9129a696786140e7408f9f8415fede19bafac106a5a7a244fcbb14027dbe7f789382bf62c2a012de419007e28b65d3101415f64ab4ec187a5ad1e40d6eff8774cb6827a489b3d9bf0d886fbb1f68b0788d34d0e04a72abc723d1afeb0c050eff4b0e771c2163114e07f223228285be271f62dae2dc1728f8086a107d33ed590a8c0e0995e12412a61fd0e1a6305bd7ecf0b02bba6c70cf5a24d242cffda86b48fea28ff1b70da980b242e870a5395516da6015315088f39bfa83f1a89b6d695af7ae81c64b2d9144f7661d8d1ae917bd43e2dd7590b90b5dcbf7a75d239e42c30379886768448ae75cef0f46fc951d634a3cd27a7c1a69de32a9374eb3bec2db5976240a83c3b0ab58852b210a55c43c5007e925c2cb642d5b2eb9a673e3ecd6882ece11c7955264289fdcf492e8b46aedf968f9a097f3d4db4b84e3784454ef3ac97835121fed140b670c6cafd4db622b504ffade380fed9e90bde11219e83d045f5ae68524b39c378dd2b5ed972763ea34465016667bd1dae39609ed136bd5f18452eec9e8b00d89dd939ccc869f7ba6d306224a218a3174d24ef308a905c03eb56c260bec2719f8c787c8d5265fd2e87e49e0f7d9f6d7220ed32bf01d4a3e3312248a524c0e495da13a6052722710fb0f273f117ccf3a00fa425278a44f294b4cc98c2028b287b3598782e174e7f67861c474f76643234774c1fd2fc399a1f1c46457afec0b968182c1752bebc526345b8ddd2c7cba647afc5c08267c6dad8e5a47cd9c9d0d091062572054851db0aab0fbb9ecf8f63d08f52bbc6b607f963efcef84e43f14bfea0d3c99791a92176526316394e08dfc25fa3502b24261c4a5d600cdab2dcf542e3be725145ac30cfb41ec0e2a4eaa6debb78c6994a0467bef13e5797056f0f130f75dc16f3d3bfd2a3a81034a7bc2bd03618160cc05c23740058b8dad341d4160befcb4cf4456b8e60ecad83ee373e84af0524eefc3d94b7e18916e582ddb64bf13dce1ad3fcef32ec2a502f0fb014c18a6af4c88871719e0e0cb93b1f73c1ffa1eaae5e9da22d135ef323558306c594fef267c4ce765bd84de18a072c8a97c914bb92f9490dc3be9254920d06ea27ba658ba11f76685c2ffb7ebd80c6ac8be28bdf30ffe8145af6b5f402febb1c86159867d6194fafe1c77f3c170d697fa966ee2e9e57dd42193b497b8ea718b6ff8ab2189af982f894e8085ebf453b27765e7e3f761d42ddd97966c236be394bc052f30017c68c9d916c15f488c84ef3b99ef416bf27269f84c376d55b1bc312560baefce55b802ef68e07bc9e8a41b7ed50b542d59a24cdd3dc0b5bdd21c85e0ad62eaa223ea1cbc406af9a0a0d52a65a669a490218f9c25b91e7bd877bad42fdc1cf10e7959c06dfb7b42b79fc16505fcf03c2f28f714f1bf7ef2ff2a1c2156efd399f9fc756ad5c5e2259b04d343f1c2c7e63518882b48629ba83b328c412b0baed1ac079cf431411763586895f758dd8a1da77e9a12ea3bc16d337e92c1077aa5861f5859def389b0b80ca90257b5bfe7cb74905b32b0f6d29818f83ec053318f460435b9c48f1a3a53f6342c345e07a82dad695923a0898681912713a716e715b6ba17912156de7cb79975ca28ce92c9a1710e8362e8f893e7d3b125ee2617bff4dc7b24a84347faa9401692c9c77942323effaa490ec5cab95b09c09df7e15621b4c7701a93d33c632d821cd61a46153ba342a28f9063ca2692a3916cddbca83813256be2a7149825ce234ea957425baa0fa9c400eefda8c9c4a8bc8beceb948de9af25a4d434350022323f37271f47672288fd220096b0d2143d5c33b724eac9ade898188129d42820cc5f98ecc79b2e3637650973007d47948400731bce12d64132ef09104d59b016e001ebc5d05c2894b5f27d723919967887333493f5db9d8e662a31cfa21fee8b6410d10eb0790c993851464c31b01b2b10e09725b459835aef2528f7dddd04bcf05963ee4c397cb69d7faf30ecba33567a8102935509688609c07fa38d1ddc96cde22859f669505101d8f8c09814bde1c11445ed927bd0a3fab6ff9a16753cda20320cd436c5e247acfdc34497dbc6ae740cff16daa1a67ed0d9eadc1978c2943611ca4c2b75419e6040288cd44ae423d84e00bca03f4da82263896d426adb7e84eda12763d6cffaf00d12f1147d4559bbd40a09f4a46850d905c613ac75500868682b3e5cae7469b38718edff6fb59ba7ead6de0d5000425071906008e0dc3f504ca291c9c567b930cab0aa12fac6a4257fc463965aa1a44cd5343932c09d8212a3fef43b8fbec92a3e46e0ae9295059743d7b394bd20ae7dc434c751950078f18d0d093dd1b28a63ca9a3798776e876a25734af85fb40c6c85fb6a83ce2c022a3a548e7b3f4d8dd7ae30e0645273b1a9ae7759da5b610f3dd64f60386d786ce37ca824dcb4a1a29acba32e2cd9e63c0e284333c611380afc80fee30cb88928e7eb5d2f3129bbdd39fef34513ea5ea88cfdc9f58bed00de7e420e2d6f95cf7899e240fb55fa550933d575f2f946c593bd6bce6633c9f6eec352c7b4600e34f0d5f632ab2c83f8a489b24dde510deb05c541432fb9f7bf961c30ffadfabb96b29b8bf80a5329ebbeaf90495d14bd2b1c6cd15784e19a76705f98fd44fa0a6f385942bd58d8b114de5057fb3cedfa91884bbcdbe9adaaa5a460cf9b9f2de27f058206f1a00b4ae1cd3c2cd7ded408d277287ffa2f8607eb79daafd76c75d98d23df354043ac4fa5a18f59214a20be134f111d7f69aeda64e5daf9454b4b39b3a8041f45d4482f68bfaba95577a8eb7184901f859a9852536f63a4f31bdb751f9ea8c407ce6ebcb22918238111c8236fb5c0f47ee18dbc5516c59a3e8690fd049de33cb3792327b7c1d21a5b467f9aa98cc37e9aa45b4d6397b5dc731d4e85a97343f600ec68f6e1b3c73dd69e2fb1d7c9c2997ce4b4d84f4519e2612db0ae5f57a7a95398c6c0c6186f5ded5f3d12467c0dec4a4763f3823d1757f99d466458b4c110d28272b07591002b57464f55fd8a39ae7dcd998554e281225c7b3ef4c8d1b5f0ae5e8f245491a5efaff56e7d435471ed4f4615d27a0653b9ac6218ccadb142a00ecf98470ae4ab31089107ef96a860a41922eaa4e02398c42d9ae2bc0ff6c395bff9eba41e1f87c5b3014a6cbebb22073203a3aea1353cd6279c5de60f64d3734838adf38f8577f012736b5704c802918e5fe761c303d9809d5892db1b390f3c02c92f9ad77d4fa81cb901b43162eb94badbeca78cc9d621696ebde1edb401b37e98ac4ee5e6d4f86710010538c651bca6f2745d13fa85e6af7ddad9212a667bca1a9d73a309a164fa28db26b1c72d154a1ccf4d7b21155e108d727805e794f262a2eea652d9b5e4c2e4e7cc78576baac94d1236b3efcc287feabc7565bf0a9593fec6f8b7edc60e3e6f63b99e920a5ca1cb3f09931297b43945f639d2d74b39c96cc1e632d14c4ab08fc2f7efb60bbd783d933522db11a750cacc1c9d365e5d6919708493854f2e19549c7edc593f01dcf1a35988ba2ca0754a8fe92b432a26629d5a86349f065a656b68710ca8e5d3d4232796b2248dd0b852d5de8ab8f8489655b5f78f5aeafb2b21189fbf72e13c0ffedacad570f1622122d07ce3a329543b29fd7b8359af1f3f96da0f54430db7688d6085a11baa6a7e8d59378f98a0ead4376cbc8bde010d7a257242c182df57572704cccd95d279f004daf8e1ab6d8a553f42efb7ab3a920683bf4238df026ebbaecf730dc5c7728bdef37b296d6a1d3195508b3e48f6ab5ded952c6786cc221c5b37d34c88bec5bd0717432c6e2e9f271f895e6cd295e4103083fcbcd8eb9d648d690b16024548ebfe26a2de47468ee5a4c2706ae6d86c3fa3ac95d77189d75c809486977e80d1ab98ac10be22e3e5d4ba0439ef32595e8f2790262d90a54231a94adc7b92077284520e49f031082a49ffe2991af4f0774791bdfd120071cbf2750f052ca7172a2207facd65d4c36c5d6e501adb9147b1a6dcb5846d23babd7b493a769449f34a2f5e78b0ec87cef80f431ddfe7b4e50bea8e64a9bcfab13108425d0744b33f54ba5ced2a13e8a142ebc8de11b1c93ac5fd2315ac9e1ada4851525ae4ffde8f183871e4185cd61d719e07f8f3ccf404ca714eead4ede4af05b21625ed1fb700862b13d94e8d0e46c8305eff5950e45537c8e7d55e07a95c5286797e30d2a893b5642a1f6107e28962f9a070854687cbb0ccb5ff68a022c0b0342c1be031b4498ffd471791f2eece6719af1402202c9c93074e02048f0950b8a28753791eabe4cdd79e3bfbbdd62ad16cddb785b31c0895012b2394a9484e499c1720bd51d2c0d9f880cb30aa8447f5164b5ab882f8228c2f6caa9315808540ba40d112b26073c0e8d4a8e15cc6c171a7aa7f5bc5a29102a60d01fe131ed1f07e2c1a43af75f84cea6dae2febf3896f5bc3cc06bbdcbcf83ab2185144e6294daf55a5cb243e1319fbcaea917f7aa5270a7f5d15e7a782b859ace34df292cef3cc92a86e3fce0f22eef16e9781a887df6ff93ca740407c73626f6762557c3c57ec1df3e24b802cda4d185761870b33128891f229781dc5d666b94f94490crootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrooterlang26-26.2.1-150300.7.5.1.src.rpmerlang-srcerlang26-srcerlang26-src(aarch-64)    erlangrpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)26.2.13.0.4-14.6.0-14.0-15.2-1erlang-src4.14.3fGFe@e@e@e9@ddd@dWd@cc\cGc @bL@bb%bMb@Qb$@b~a@apa@a @`@`@``D``@`n@`&`_ _|\@_C^n@^n@^{G^\@^M#@^G@^=Q@^8 @^*@^!]f@]+]e@]M@])]@]]b@]b@]e@]>]@] ]/@\P\@\@\@\r@\N\@\+@\k\\\Yz\J@\*\@\@[[[%@[<@[[t[r@Z@Zs@Z@Z@YYo@Yo@Y@YyYYlY YX-X-X•@X@XVz@W@W@WoWgWc@WA@WA@W(V@VVV$@VrV2 @V }@Uݪ@ŬU(Ub@UU>U@Ug@UG_@U#T@T*@T_W@T_W@sflees@suse.desflees@suse.desflees@suse.desflees@suse.dematwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comopensuse-packaging@opensuse.orgmatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comjsegitz@suse.comopensuse-packaging@opensuse.orgmatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comgmbr3@opensuse.orgmatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.comtchvatal@suse.comg.santomaggio@gmail.commatwey.kornilov@gmail.comgsantomaggio@suse.degsantomaggio@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comdimstar@opensuse.orggsantomaggio@suse.degsantomaggio@suse.degsantomaggio@gmail.comgsantomaggio@suse.degsantomaggio@suse.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comopensuse-packaging@opensuse.orgmliska@suse.czopensuse-packaging@opensuse.orgmatwey.kornilov@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.commchandras@suse.deg.santomaggio@gmail.comdmueller@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comrbrown@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commeissner@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comkruber@zib.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comjengelh@inai.dematwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comkruber@zib.dematwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comro@suse.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comkruber@zib.dekruber@zib.deseife+obs@b1-systems.comkruber@zib.dekruber@zib.dekruber@zib.dedmueller@suse.commatwey.kornilov@gmail.comdmueller@suse.comkruber@zib.dekruber@zib.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comledest@gmail.com- Create a versioned package for SLES- Disable rpmlint tests on SLE-15 where they currently fail- This codestream wasn't affected by bsc#1207113- Changes for 26.2.1: * erts: Removed unnecessary PCRE source tar-ball. * ssh: With this change (being response to CVE-2023-48795), ssh can negotiate "strict KEX" OpenSSH extension with peers supporting it; also 'chacha20-poly1305@openssh.com' algorithm becomes a less preferred cipher. If strict KEX availability cannot be ensured on both connection sides, affected encryption modes(CHACHA and CBC) can be disabled with standard ssh configuration. This will provide protection against vulnerability, but at a cost of affecting interoperability. See Configuring algorithms in SSH. (bsc#1218192, CVE-2023-48795) - Changes for 26.2: * all: Replaced unintentional Erlang Public License 1.1 headers in some files with the intended Apache License 2.0 header. * otp: The removal of the deprecated slave module, originally planned for OTP 27, has been postponed to OTP 29. * asn1: Fix benign warning from gcc 11 about mismatching call to free(). * crypto: Enable engine support for OpenSSL versions 3. * edoc: Emit instead of . - Disable test suite for now, it has many false positives and takes a very long time.- Changes for 26.1.2: * erts: If the external term format encoding of an argument list part of a distributed spawn operation was faulty, the newly spawned remote process could misbehave. The misbehavior included hanging or interpret an incoming message as an argument list to use. This was very unlikely to happen unless using an alternate implementation of the distribution protocol which made a faulty encoding of the argument list. The child process will now detect this error and terminate before executing the user specified code. * erts: Fix bugs where if the body of a matchspec would return a map with a variable ('$1', '$_' etc) as one of the keys or values and the variable was not an immidiate, the term would not be copied to the receiving processes heap. This would later corrupt the term in the table as the GC could place move markers in it, which in turn would cause the VM to crash. Bug has been present for since OTP 17.0. * xmerl: The xmerl version 1.3.32 was released in OTP 26.0.1, but the incorrect version number of 1.3.31.1 was used for it. This incorrect version number continued to appear in OTP 26.0.2, OTP 26.1, and OTP 26.1.1. The actual xmerl code in these OTP versions however corresponds to xmerl version 1.3.32. - Changes for 26.1.1: * wx: The wx application would fail to build on macOS with Xcode 15. * compiler: The compiler could become extremely slow for modules containing huge functions. * stdlib: Garbage collect the shell process when reducing the amount of saved history and results. - Changes for 26.1: * crypto: Fix VM crash caused by crypto being purged and reloaded (by init:restart for example) on OS with musl libc (such as Alpine linux). * crypto: Improved understanding of LibreSSL versions. Support chacha20 and chacha20_poly1305 for LibreSSL 3.7. Reflect removal of support for the DSS/DSA algorithm which was done in LibreSSL 2.6.1. * crypto: FIPS supported by crypto for OpenSSL 3.0.* and 3.1.*. * asn1: The ASN.1 compiler would ignore a constraint such as (SIZE (1..4), ...), causing incorrect behavior of the encoding and decoding function for the PER and UPER backends. Corrected to handle the constraint in the same way as (SIZE (1..4, ...)). * asn1: The JER backend has been internally refactored in a way that is compatible for applications that use the documented API. However, for a group of ASN.1 modules that depend on each other (for example, S1AP-PDU-Descriptions, S1AP-Contents, and so on), all modules in the group must be recompiled if on of the group members is recompiled. * observer: Closing the trace log window via the menu did not work. * erts: maps:put with existing key and identical value was not optimized as a no-op correctly if having the same 32-bit hash as another key in the map. In practice very rare and harmless. * erts: Fixed an issue with truncated crash slogans on failed emulator start. * erts: Fixed a bug where the emulator was unable to determine the current cgroup CPU quota. * erts: A process optimized for parallel signal delivery could under some circumstances lose wakeup information. That is, the processes was not woken up to take care of the signal, so the signal would not be taken care of until the process was woken by another signal. Only processes configured with message_queue_data set to off_heap utilize this optimization. * erts: Function socket:close/1 could cause a VM crash on Windows. * erts: Fixed a bug in the ARM JIT where it could accidentally add garbage trailing bits when creating bitstrings whose size wasn't an even multiple of 8 bits. * erts: Fix erlang:system_info/1 documentation to show correct types. * erts: Expanded the documentation about how to use the standard_io, standard_error and user I/O devices. Added the types io:standard_io/0, io:standard:error/0 and io:user/0. * erts: Fix compilation with GNU termcap. * erts: Delivery time of message signals to a process not executing any receive expressions could become very long, potentially infinite. For example, a process checking for messages using process_info(self(), message_queue_len) or process_info(self(), messages) and avoiding to execute a receive expression matching on messages could be very slow in detecting new messages. Note that you are still discouraged from using process_info() this way. A process that wants to check if there are messages available to handle should execute a receive expression matching on messages. * erts: On AArch64 (ARM64), when calculating both the quotient and remainder with a divisor begin a power two, the remainder could be incorrectly calculated. * erts: Fix bug causing "magic" references in a compressed ETS table to not keep the referred object alive. The symptom would be the referred object being garbage collected prematurely and the reference appearing stale, not referring to anything. Examples of such magically referred objects are atomics and NIF resources. * erts: Matching out short bitstrings with a fixed size not divisible by 8 could could lead to the runtime system terminating with an "Overrun heap and stack" error. * erts: A constant flow of incoming non-message signals could prevent a process needing to execute dirty from doing so. * erts: A BEAM file usually contains a chunk with the tag "Type" containing type information that can be used by the JIT. The beam_lib:strip/1 takes care to preserve that chunk, but a build/release tool that does customized stripping could accidentally remove the chunk. Loading a BEAM file without the "Type" chunk could cause incorrect behavior of the loaded code. * erts: gen_udp:recv/* for Unix Domain Socket in binary mode and passive mode has been fixed to not crash. * erts: The cleanup operation of not yet delivered signals to a terminated process yielded excessively. * erts: Fixed minor hashing issue with the local option of term_to_binary()/term_to_iovec(). * erts: Update gen_tcp_socket and gen_udp_socket to handle 'completion' (socket on Windows). * erts: Add support for Unix Domain Sockets (only for STREAM sockets) on Windows for 'socket'. * erts: In Erlang/OTP 27, by default escripts will be compiled before being executed. That means that the compiler application must be installed. It is possible to force the escript to be interpreted by adding the directive -mode(interpret). to the escript file. In Erlang/OTP 28, support for interpreting an escript will be removed. * erts: Add basic support for socket ioctl on Windows. * erts: Removed erts/etc/darwin/Info.plist, as it is no longer necessary after macos 10.12 * erts: Add support for (Windows) socket option exclusiveaddruse. * erts: [socket] Add support for the 'nopush' option. * erts: Add support for socket option 'BSP STATE'. * erts: Add tcp socket options 'keepcnt', 'keepidle' and 'keepintvl'. * erts: Add support for misc (Windows) socket options ('max_msg_size' and 'maxdg'). * compiler: The compiler could run forever when compiling a call to is_record/3 with a huge positive tuple size. The call is_record(A, a, 0) would crash the compiler when used in a function body. When used in a guard the compiler would emit incorrect code that would accept {a> as a record. * compiler: Fixed a bug that caused dialyzer to crash when analyzing bogus code that contained the literal atom undefined in segment sizes. * compiler: The compiler would crash when compiling some modules that contained a call to erlang:load_nif/2. * compiler: Fixed a bug that caused the compiler to crash on legal code. * compiler: The compiler could crash when attempting to compile a call to is_list/1 in a complex expression. * compiler: A complex guard expression using the or operator could succeed when it was supposed to fail. * compiler: Compiling nested try/catch and catch expression could result in an internal compiler error. * compiler: Using the bnot operator in a complex expression could cause the compiler to terminate with an internal consistency failure diagnostic. * compiler: Fixed a bug that caused the compiler to crash in a binary optimization pass. * compiler: The compiler could terminate with an internal error when attempting to compile a binary pattern that could not possibly match. * compiler: Fixed various performance issues related to the alias optimization pass. * erl_docgen: Expanded the documentation about how to use the standard_io, standard_error and user I/O devices. Added the types io:standard_io/0, io:standard:error/0 and io:user/0. * mnesia: Do not delete old backup file if the new backup fails. * megaco: Make megaco transports handle gen_tcp | gen_udp with socket backend on Windows (completion). * common_test: With this change, ct_hooks manual refers to CTH execution order section in user guide. * common_test: With this change, Config data from pre_end_per_testcase hook is delivered to post_end_per_testcase callback in case of testcase timetrap or linked process crash. * common_test: With this change, remaining references to not supported vts tool in ct_run are removed (mainly relates to docs and ct_run help message). * common_test: With this change, prompt search functionality in ct_telnet handles unicode input. * common_test: Expanded the documentation about how to use the standard_io, standard_error and user I/O devices. Added the types io:standard_io/0, io:standard:error/0 and io:user/0. * stdlib: The compiler could run forever when compiling a call to is_record/3 with a huge positive tuple size. The call is_record(A, a, 0) would crash the compiler when used in a function body. When used in a guard the compiler would emit incorrect code that would accept {a> as a record. * stdlib: Fix bug in ets:tab2file that could make it fail if another Erlang process created the same file at the same time. * stdlib: An {else_clause,Value} exception will now be reported nicely in the shell. * stdlib: Correct return value for error case, so that it matches the documented and intended return value {error, {already_started, pid()} when local registered names are used. * stdlib: sys:get_state/1,2 and sys:replace_state/2,3 has been corrected to handle a state named error as a state name, not as a failed system callback. For the standard server behaviours this was an issue only for gen_statem (and gen_fsm) when the state name was error, and for gen_server if the complete state was {error,_}. * stdlib: Multiple problems were fixed in filelib:safe_relative_path/2. If its second argument was a path that contained symbolic links, an incorrect result patch could be returned. Also, paths were sometimes falsely considered unsafe. * stdlib: Fix deadlock when erl.exe is used as part of a pipe on Windows and trying to set the encoding of the standard_io device. * stdlib: Expanded the documentation about how to use the standard_io, standard_error and user I/O devices. Added the types io:standard_io/0, io:standard:error/0 and io:user/0. * stdlib: Fix h/2,3 to properly render multi-clause documentation. * stdlib: Timers created by timer:apply_after/4, apply_interval/4, and apply_repeatedly/4 would silently fail to do the apply if it was not possible to spawn a process when the timer expired. This has now been corrected, and if the spawn fails, the system will be taken down producing a crash dump. * stdlib: When an Erlang source file lacked a module definition, there would be a spurious "module name must not be empty" diagnostic for each spec in the file. * stdlib: The argument descriptions for option types in argparse have been made less ambiguous. * stdlib: Clarified the documentation of normal shutdown reason on gen_server:call/2,3 * stdlib: Pattern matching and equivalence (=:=, =/=) comparisons on 0.0 will now raise a warning, as it will no longer be considered equivalent to -0.0 in OTP 27. If a match on 0.0 specifically is desired (distinct from -0.0), the warning can be suppressed by writing +0.0 instead. The arithmetic comparison operators are unaffected, including arithmetic equality (==). *** POTENTIAL INCOMPATIBILITY *** * stdlib: The semantics of the gen_{server,statem,event} behaviour's synchronous start behaviour introduced in OTP-26.0 with OTP-18471, has been clarified in the documentation. * stdlib: Added functionality to set a custom multiline prompt. * stdlib: A warning for (accidental use of) Triple-Quoted Strings has been implemented as per EEP 64. *** POTENTIAL INCOMPATIBILITY *** * stdlib: The keyboard shortcuts for the shell are now configurable. * kernel: Fixed an issue with truncated crash slogans on failed emulator start. * kernel: Fix shell:start_interactive function specification. * kernel: Fix code:get_doc/1 to return missing, when it can't find erts instead of crashing. * kernel: Function socket:close/1 could cause a VM crash on Windows. * kernel: Fix deadlock when erl.exe is used as part of a pipe on Windows and trying to set the encoding of the standard_io device. * kernel: Expanded the documentation about how to use the standard_io, standard_error and user I/O devices. Added the types io:standard_io/0, io:standard:error/0 and io:user/0. * kernel: Fix logger's overload protection mechanism to only fetch memory used by messages when needed. * kernel: Fixed a number of socket-related issues causing incompatibilities with gen_tcp and gen_udp respectively. * kernel: gen_tcp:connect with socket address and socket (inet-) backend fails because of missing callback function. * kernel: The DNS RR cache used by `inet_res` has been fixed to preserve insert order, which is beneficial when the DNS server returns RRs in some specific order for e.g load balancing purposes. * kernel: The options `reuseport`, `reuseport_lb` and `exclusiveaddruse` were accidentally not allowed for e.g `gen_udp:open/1,2`, which has now been corrected. * kernel: gen_udp:recv/* for Unix Domain Socket in binary mode and passive mode has been fixed to not crash. * kernel: Fixed issue where cursor would not be placed at the end of the expression when navigating shell history. * kernel: Update gen_tcp_socket and gen_udp_socket to handle 'completion' (socket on Windows). * kernel: Add support for Unix Domain Sockets (only for STREAM sockets) on Windows for 'socket'. * kernel: Add basic support for socket ioctl on Windows. * kernel: The file:location/0 type is now exported. * kernel: Add support for (Windows) socket option exclusiveaddruse. * kernel: [socket] Add support for the 'nopush' option. * kernel: Add support for socket option 'BSP STATE'. * kernel: Add tcp socket options 'keepcnt', 'keepidle' and 'keepintvl'. * kernel: Add support for misc (Windows) socket options ('max_msg_size' and 'maxdg'). * kernel: The keyboard shortcuts for the shell are now configurable. * kernel: Optimized code_server to reduce repeated work when loading the same module concurrently. * debugger: The call int:no_break(Module) did not remove any breakpoints. * debugger: The maybe expression is now supported in the Debugger. * debugger: The maybe expression is now supported in the Debugger. * debugger: The call int:no_break(Module) did not remove any breakpoints. * ssl: Avoid function clause error in ssl:getopts/2 by handling that inet:getopts may return an empty list during some circumstances, such as the socket being in a closing state. * ssl: The API function `ssl:recv/3` has been tightened to disallow negative length, which has never been documented to work, but was passed through and caused strange errors. * ssl: When a client initiated renegotiation was rejected and the client socket was in active mode the expected error message to the controlling process was not sent. * ssl: Add some guidance for signature algorithms configuration in ssl applications users guide. * snmp: Make snmp handle gen_udp with socket backend on Windows (completion). * public_key: Country name comparison shall be case insensitive * public_key: Add check to disallow duplicate certs in a path * inets: With this change, re_write httpd works as expected and does not return error. * inets: Fixed a bug so httpd does not crash when stopped at the wrong time during TLS connection negotiation, or any other theoretically as slow connection setup. * inets: Enhance error handling and avoid that the HTTP client hangs on headers provided on the wrong format. * inets: With this change, error report generated by httpd during connection setup contains socket type information. * inets: Stop and restart of the httpd server in the Inets application has been refactored to a more synchronous and OTP supervisor friendly approach. This should increase stability and for example avoid a supervisor report from httpd_connection_sup about killed child process(es) in some cases when stopping or restarting httpd. * dialyzer: Fixed a bug that caused dialyzer to crash when analyzing bogus code that contained the literal atom undefined in segment sizes. * dialyzer: Dialyzer could crash when attempting to analyze a module that defined a type called product/. - Changes for 26.0.2: * erts: Fix using the IME (Input Method Editor) to enter text in cmd.exe and powershell.exe on Windows. * erts: Multiple socket:accept calls issue. When making multiple accept calls, only the last call is active. * erts: Fix the shell to ignore terminal delay when the terminal capabilities report that they should be used. * erts: Fix "oldshell" to echo characters while typing on Windows. * erts: On Windows, a call to the function socket:close, when there are waiting active calls to read, write or accept functions, could hang. * erts: Fix issues when reading or configuring standard_io on Windows when erl.exe is started using -noshell flag. * erts: The following functions are now much faster when given a long list or binary: * erts: On AArch64 (ARM64), equality and non-equality tests with literal bitstrings could succeed when they should fail and vice versa. * compiler: Fixed a type handling bug that would cause an internal consistence failure for correct code. * compiler: Fixed a bug that could cause the stack trace of throw exceptions to be erroneously optimized out. * compiler: Complex guard expression using 'or' were not always fully evaluated, making guards that were supposed to fail succeed. * stdlib: Fix bug where when you entered Alt+Enter in the terminal, the cursor would move to the last line, instead of moving to the next line. * stdlib: Fix eof handling when reading from stdin when erlang is started using -noshell. * stdlib: Fixed problem where output would disappear if it was received after a prompt was written in the shell. * stdlib: The following functions are now much faster when given a long list or binary: * kernel: Fix bug where when you entered Alt+Enter in the terminal, the cursor would move to the last line, instead of moving to the next line. * kernel: Fix so that the shell does not crash on startup when termcap is not available. * kernel: Multiple socket:accept calls issue. When making multiple accept calls, only the last call is active. * kernel: Fix the shell to ignore terminal delay when the terminal capabilities report that they should be used. * kernel: Fix "oldshell" to echo characters while typing on Windows. * kernel: Fix eof handling when reading from stdin when erlang is started using -noshell. * kernel: On Windows, a call to the function socket:close, when there are waiting active calls to read, write or accept functions, could hang. * kernel: Fix issues when reading or configuring standard_io on Windows when erl.exe is started using -noshell flag. * kernel: gen_udp:connect with inet_backend = socket fails when the Address is a hostname (string or atom). * kernel: Fixed problem which would cause shell to crash if particular escape sequence was written to stdout. * kernel: Fixed problem where output would disappear if it was received after a prompt was written in the shell. * kernel: Fix a crash where the location of erts could not be found in rebar3 dev builds. * kernel: Introduce the KERNEL application parameter standard_io_encoding that can be used to set the default encoding for standard_io. This option needs to be set to latin1 if the application wants to treat all input data as bytes rather than utf-8 encoded characters. * ssl: Added keylog information to all protocol versions in ssl:connection_information/2. * ssl: Add RFC-6083 considerations for DTLS to enable gen_sctp based callback for the transport. * ssh: Added multiline editing support to ssh clients connected through OTP ssh daemon.- Changes for 26.0.1: * erts: Build of the socket nif failed on Solaris 11. * erts: Fixed two reduction-counting bugs relating to binaries. * erts: Constructing a binary segment not aligned with a byte boundary, with a size not fitting in 31 bits, and with a value not fitting in a 64-bit word could crash the runtime system. * erts: When a binary construction failed because of bad size for a segment, the error information was not always correct. * erts: Fixed a crash when calling a fun that was defined in a module that had been upgraded. * kernel: The POSIX error exdev was sometimes incorrectly described as "cross domain link" in some error messages. * kernel: Corrected the socket send function description (send with Timeout = nowait). The send function(s) could not return {ok, {RestData, SelectInfo}} * stdlib: The POSIX error exdev was sometimes incorrectly described as "cross domain link" in some error messages. * ssl: Make sure that selection of client certificates handle both TLS-1.3 and TLS-1.2 names correctly. Could cause valid client certificate to not be selected, and an empty client certificate message to be sent to server. * ssl: Improved ssl:format_error/1 to handle more error tuples. * ssl: Fixed hanging ssl:connect when ssl application is not started. * ssl: Correct handling of retransmission timers, current behavior could cause unwanted delays. * inets: Do not make the default ssl options by calling httpc:ssl_verify_host_options(true) if ssl options are supplied by the user. * xmerl: New options to xmerl_scan and xmerl_sax_parser so one can limit the behaviour of the parsers to avoid some XML security issues. xmerl_scan gets one new option: xmerl_sax_parser gets the following options: The old option skip_external_dtd is still valid and the same as {external_entities, none} and {fail_undeclared_ref, false} but just affects DTD's and not other external references. * compiler: Fixed a bug where a failing bsl expression in a guard threw an exception instead of causing the guard to fail. * compiler: Fixed a bug that would case the validator to reject legal code. * compiler: The compiler could re-order clauses matching binaries so that the incorrect clause would match. That could only happen for code that used the option {error_location,line} or for code without line or column number information (e.g. generated by a parse transform). * compiler: Complex guard expression using the or operator and guard BIFs that can fail could sometimes be miscompiled so that the guard would succeed even if a call to a guard BIF failed. * compiler: With optimizations disabled, a try/catch construct could return an incorrect value. * compiler: In rare circumstance, a combination of binary construction and binary_part/3 would cause the compiler to generate unsafe code that would crash the runtime system. * compiler: The compiler could be very slow when compiling guards with multiple guard tests separated with 'or' or ';'. * compiler: Complex guard expressions using 'or' and map updates could succeed even if the map update failed.- Version 26.0: * Leex has been extended with optional column number support. * The family of enumeration functions in module lists has been extended with enumerate/3 that allows a step value to be supplied. * Update Unicode to version 15.0.0. * proc_lib:start*/* has become synchronous when the started process fails. This requires that a failing process use a new function proc_lib:init_fail/2,3, or exits, to indicate failure. All OTP behaviours have been fixed to do this. * auto-complete of variables, record names, record fields names, map keys, function parameter types and filenames. * Open external editor in the shell to edit the current expression. * defining records (with types), functions, specs and types in the shell. * Creation and matching of binaries with segments of fixed sizes have been optimized. * Creation and matching of UTF-8 segments have been optimized. * Appending to binaries has been optimized. * The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time. * Thanks to the optimizations above the performance of the base64 module has been significantly improved. For example, on an x86_64 system with the JIT both encode and decode are almost three times faster than in Erlang/OTP 25. * Map comprehensions as suggested in EEP 58 has now been implemented. * Some map operations have been optimized by changing the internal sort order of atom keys. This changes the (undocumented) order of how atom keys in small maps are printed and returned by maps:to_list/1 and maps:next/1. The new order is unpredictable and may change between different invocations of the Erlang VM. * Introducing the new function maps:iterator/2 for creating an interator that return the map elements in a deterministic order. There are also new modifiers k and K for the format string in io:format() to support printing map elements ordered. * Added the new built-in type dynamic() introduced in EEP 61, PR introducing EEP 61 improving support for gradual type checkers. * Dialyzer has a new incremental mode that be invoked by giving the --incremental option when running Dialyzer. This new incremental mode is likely to become the default in a future release. * Multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe. * Support for UTF-8 atoms and strings in the NIF interface including new functions enif_make_new_atom, enif_make_new_atom_len and enif_get_string_length. * The BIFs min/2 and max/2 are now allowed to be used in guards and match specs. * Improved the selective receive optimization, which can now be enabled for references returned from other functions. This greatly improves the performance of gen_server:send_request/3, gen_server:wait_response/2, and similar functions. * It is no longer necessary to enable a feature in the runtime system in order to load modules that are using it. It is sufficient to enable the feature in the compiler when compiling it. * inet:setopts/2 has got 3 new options: reuseport, reuseport_lb and exclusiveaddruse. * Fix so that -fno-omit-frame-pointer is applied to all of the Erlang VM when using the JIT so that tools, such as perf, can crawl the process stacks. * In the lists module, the zip family of functions now takes options to allow handling lists of different lengths. * Added the zip:zip_get_crc32/2 function to retrieve the CRC32 checksum from an opened ZIP archive. gen_server optimized by caching callback functions * The modules Erlang DNS resolver inet_res and helper modules have been updated for RFC6891; to handle OPT RR with DNSSEC OK (DO) bit. * Introduced application:get_supervisor/1. * Cache OTP boot code paths, to limit how many folders that are being accessed during a module lookup. Can be disabled with - cache_boot_path false. * Support for Kernel TLS (kTLS), has been added to the SSL application, for TLS distribution (-proto_dist inet_tls), the SSL option {ktls, true}. * Improved error checking and handling of ssl options. * Mitigate memory usage from large certificate chains by lowering the maximum handshake size. This should not effect the common cases, if needed it can be configured to a higher value. * For security reasons the SHA1 and DSA algorithms are no longer among the default values. * Add encoding and decoding of use_srtp hello extension to facilitate for DTLS users to implement SRTP functionality.- Changes for 25.3.2.2: * compiler: The compiler could be very slow when compiling guards with multiple guard tests separated with 'or' or ';'. - Changes for 25.3.2.1: * xmerl: New options to xmerl_scan and xmerl_sax_parser so one can limit the behaviour of the parsers to avoid some XML security issues. xmerl_scan gets one new option: xmerl_sax_parser gets the following options: The old option skip_external_dtd is still valid and the same as {external_entities, none} and {fail_undeclared_ref, false} but just affects DTD's and not other external references. * erts: Fixed a crash during tracing on certain platforms that cannot use the machine stack for Erlang code (mainly OpenBSD and Linux with musl). * erts: Constructing a binary segment not aligned with a byte boundary, with a size not fitting in 31 bits, and with a value not fitting in a 64-bit word could crash the runtime system. * erts: Further robustify implementation of large maps (> 32 keys). Keys that happen to have same internal 32-bit hash values are now put in collision nodes which are traversed with linear search. This removes the demand for the internal hash function when salted to eventually produce different hashes for all possible pairs of unequal terms. * stdlib: Static supervisors are very idle processes after they have started so they will now be hibernated after start to improve resource management. * compiler: Fixed a bug where a failing bsl expression in a guard threw an exception instead of causing the guard to fail. * compiler: Complex guard expression using the or operator and guard BIFs that can fail could sometimes be miscompiled so that the guard would succeed even if a call to a guard BIF failed.- Changes for 25.3.2: * compiler: Fixed type handling bugs that could cause an internal error in the compiler for correct code. * os_mon: Avoid error report from failing erlang:port_close at shutdown of cpu_sup and memsup. Bug exists since OTP 25.3 (os_mon-2.8.1). * erts: If a runtime system which was starting the distribution already had existing pids, ports, or references referring to a node with the same nodename/creation pair that the runtime system was about to use, these already existing pids, ports, or references would not work as expected in various situations after the node had gone alive. This could only occur if the runtime system was communicated such pids, ports, or references prior to the distribution was started. That is, it was extremely unlikely to happen unless the distribution was started dynamically and was even then very unlikely to happen. The runtime system now checks for already existing pids, ports, and references with the same nodename/creation pair that it is about to use. If such are found another creation will be chosen in order to avoid these issues. - Changes for 25.3.1: * snmp: Attempts to minimize the number of the error reports during a failed agent init. * compiler: When a map update such as #{}#{key:=value} that should fail with an exception was unused, the exception would be lost. * compiler: Fixed bug in the validator that made it reject valid code. * crypto: With this change, random errors are fixed for crypto:generate_key calls with OpenSSL 3. * erts: Fixed a bug in the loader that prevented certain modules compiled with no_ssa_opt from being loaded. * erts: Implementations of the call() driver callback that returned a faulty encoded result could cause a memory leak and could cause invalid data on the heap of the processes calling erlang:port_call/3. * erts: Fixed a memory corruption issue when upgrading code. The bug was introduced in OTP 25.3 * erts: Fixed configure tests for a few ARM-specific instructions, which prevented the emulator from being built on some platforms. * erts: Aliases created in combination with a monitor using the {alias, explicit_unalias} option stopped working from remote nodes when a 'DOWN' signal had been received due to the monitor or if the monitor was removed using the erlang:demonitor() BIF. This bug was introduced in OTP 24.3.4.10 and OTP 25.3. * erts: In rare circumstances, bit syntax matching of an invalid code point for a utf32 would crash the runtime system. * erts: Building the runtime system failed when native atomic support was missing. Note that execution on such systems have only been rudimentary tested. * erl_interface: Fixed configure tests for a few ARM-specific instructions, which prevented the emulator from being built on some platforms. * eldap: Added a new function eldap:info/1 that returns the socket and the transport protocol for the eldap connection. * inets: Correct timing related pipelining/keepalive queue bug, that could result in unexpected "socket_remotly_closed" errors. * inets: With this change, upon remote socket closure current request is added to a retried queue (either pipeline or keep_alive, but not both). * ssl: With this change, ssl:connection_information/2 returns correct keylog data after TLS1.3 key update. * ssl: Client signature algorithm list input order is now honored again , it was accidently reversed by a previous fix. * stdlib: The type specs in the erl_parse module has been updated to include the maybe construct and the ! operator. * wx: Improve debug prints from the nifs. Some minor fixes for wxWidgets-3.2. Fixed OpenGL debug functions.- Changes for 25.3: * reltool: Fixed a bug that would cause analysis to crash. * stdlib: Fixed a bug that would cause analysis to crash. * stdlib: Fixed a crash when formatting stack traces for error reports. * stdlib: Instead of crashing, the list_to_integer/1 and list_to_integer/2 BIFs now raise the system_limit exception for overlong lists that can't be converted to integers. Similarly, the string:to_integer/1 BIF now returns {error,system_limit} for overlong lists. * stdlib: Removal of non-necessary undefined types added to the state's supervisor record. * compiler: Fixed a bug that would cause the compiler to hang. * compiler: Fixed a crash when compiling code that contained maybe expressions. * compiler: Constructing a binary with an explicit size of all for a binary segment would crash the compiler. * compiler: The compiler would generate incorrect code for the following type of expression: Pattern = BoundVar1 = . . . = BoundVarN = Expression An exception should be raised if any of the bound variables have different values than Expression. The compiler would generate code that would cause the bound variables to be bound to the value of Expressionwhether the value matched or not. * xmerl: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * megaco: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * debugger: Fixed a bug that would cause analysis to crash. * erts: Fixed a bug on Windows where file:read_file_info/1 would fail for files with corrupt metadata. * erts: Fix process_info(_, binary) to again include "writable binaries" which were lost in OTP-25.0. Writable binaries are an optimization used when binaries are appended upon in a loop. * erts: Fix rare race when receiving fragmented messages on a terminating connection. Could potentially cause memory leaks as well as double free crashes. Bug exists since OTP 22.0. * erts: Fixed bug that could maybe cause problems when a file descriptor number is closed by a linked in driver and then opened (reused) and passed to enif_select by a NIF. No actual symptoms seen, only failed internal assertions in debug build. * erts: The runtime system could crash when tracing a process executing on a dirty scheduler. * erts: In the binary syntax, attempting to match out integers with size exceeding 2 GiB could crash the runtime system. * erts: Fixed edge case in floating-point negation where A = 0.0, B = -A did not produce B = -0.0 on x86_64 JIT. * erts: Fixed an issue in the JIT that could crash the emulator on some platforms. * erts: Added meta data to the windows installer. * erts: Fixed ETS insertion order into bag and duplicate_bag of tuples with identical keys when passed in a list to ets:insert/2. The insert order has been head-to-tail but was accidentally changed in OTP 23.0. For bag it was reverted (tail-to-head), while for duplicate_bag it was sometimes reverted depending on the length of the list and number of "reductions" left for the calling process. This fix changes the insert order of ets:insert/2 back to always be head-to-tail of the list argument. * erts: With the JIT for AArch64 (AMD64), calling bxor in with non-integer arguments in a guard would crash the runtime system. * erts: Fix bug regarding process flag max_heap_size. Could cause strange behavior when a process was killed due to exceeding the limit. * erts: Fixed binary comprehensions to be similar to other creation of binary data with respect to its contribution of triggering garbage collection. * erts: In rare circumstances, when a process exceeded its allowed heap size set by option max_heap_size, it would not be killed as it should be, but instead enter a kind of zombie state it would never get out of. * erts: Instead of crashing, the list_to_integer/1 and list_to_integer/2 BIFs now raise the system_limit exception for overlong lists that can't be converted to integers. Similarly, the string:to_integer/1 BIF now returns {error,system_limit} for overlong lists. * erts: Active process aliases of a process at its termination leaked memory. * erts: Support for fully asynchronous distributed signaling where send operations never block. This functionality is by default disabled and can be enabled per process. For more information see the documentation of process_flag(async_dist, Bool). * erts: Added the +JPperf no_fp option to explicitly disable Erlang frame pointers otherwise added when using the +JPperf map option. * erl_interface: Accept connection setup from OTP 23 and 24 nodes that are not using epmd. * erl_interface: The ei API for decoding/encoding terms is not fully 64-bit compatible since terms that have a representation on the external term format larger than 2 GB cannot be handled. * syntax_tools: erl_syntax_lib:annotate_bindings/1,2 will now properly annotate named functions and their arguments. * kernel: Fixed a bug on Windows where file:read_file_info/1 would fail for files with corrupt metadata. * kernel: Accept connection setup from OTP 23 and 24 nodes that are not using epmd. * public_key: As different solutions of verifying certificate revocation exists move the decode of 'CRLDistributionPoints' so that it will only be decode. When it is actually used in the verification process. This would enable interoperability with systems that use certificates with an invalid empty CRLDistributionPoints extension that they want to ignore and make verification by other means. * public_key: public_key:pkix_path_validation validates certificates expiring after 2050 * public_key: Do not leave exit message in message queue after calling cacerts_load() on MacOS. * public_key: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * ssl: Fixed that new dtls connections from the same client ip port combination works. If there is a process waiting for accept the new connection will connect to that, otherwise it will try to re-connect to the old server connection. * ssl: When shutting down a node that uses SSL distribution (-proto_dist inet_tls), a confusing error message about an unexpected process exit was printed. This particular message is no longer generated. * ssl: fixes the type spec for ssl:format_error/1 * ssl: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * jinterface: Accept connection setup from OTP 23 and 24 nodes that are not using epmd. * os_mon: The port programs used by cpu_sup and memsup are now gracefully shut down when cpu_sup and memsup are shut down. * eunit: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * crypto: A user defined runtime library path configured using - -with-ssl-rpath= could fail to be enabled. * crypto: Ensure that configure fails if a user defined runtime library path has been passed by the user, but cannot set. * mnesia: Improved consistency for dirty writes when a table was added with add_table_copy/3. Fixed a problem with sticky write, which could lead to inconsistent data. * mnesia: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * common_test: Renamed undocumented macro CT_PEER/3 to CT_PEER_REL/3. * ssh: With this change, PKCS8 formatted private key file is properly decoded and SSH daemon with such key can be started. * ssh: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * inets: With this change, handling of URI to a folder, with missing trailing / and a query component present is fixed. * inets: Adds more type information to the inets app, thus improving the errors that static analysis tools can detect. The addition of type information to records and the updates to function heads help static analysis tools to understand that some values in the records cannot be 'undefined', thus making static tools to type check correctly more modules in the inets app * inets: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * snmp: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * ftp: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * dialyzer: Fixed a bug that would cause analysis to crash. * dialyzer: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. * tftp: Replace size/1 with either tuple_size/1 or byte_size/1 The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer. When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred. When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1. - Changes for 25.2.3: * erts: Comparisons between small numbers and pids or ports would in some edge cases say that the number was greater than the pid or port, violating the term order. * erts: process_info(Pid, status) when Pid /= self() could return an erroneous result. * ssl: Maximize compatibility by ignoring change_cipher_spec during handshake even if middle_box_mode is not negotiated (mandated by client) * ssl: Move assert of middlebox message after an hello_retry_request to maximize interoperability. Does not changes semantics of the protocol only allows unexpected message delay from server. * ssh: With this change, ssh application does not crash when formatting some of info reports for unsuccessful connections. * ssh: With this change, ssh does not log extensively long messages. * inets: Ensure graceful shutdown * inets: Return type of the type specification for function httpc:cookie_header/{1,2,3} has been fixed from -spec cookie_header(url()) -> [{ field(), value() }] | {error, Reason} to -spec cookie_header(url()) -> { field(), value() } | {error, Reason} - Changes for 25.2.2: * ftp: Fixes calls to ftp:nlist/2 returning {error, epath} when the file / folder exists - Changes for 25.2.1: * compiler: Fixed a bug that could cause legal code to fail validation. * compiler: Eliminated a rare crash in the beam_types module. * erts: Fixed a bug in selective receive optimization that could crash 32-bit emulators. * erts: A race condition which was very rarely triggered could cause the signal queue of a process to become inconsistent causing the runtime system to crash. * kernel: The tcp connect option 'bind_to_device' could not be used with inet_backend = 'socket'. 'inet' requires value type binarry() and 'socket' requires value type 'string()'. * kernel: Minor issue processing options when calling gen_tcp:connect with a sockaddr() and inet_backend = socket. * common_test: Change timeout to infinity for gen_server calls in cth_log_redirect * inets: fixes a missing case of the type specification for httpd:info/2/3/4 * snmp: Single threaded agent crash when vacm table not properly initiated.- Changes for 25.2: * erts: Fix perf/gdb JIT symbols to not contain CodeInfoPrologue for the JIT internal module erts_beamasm. * erts: Fixed minor memory leaks. * erts: Fix bugs in ets:insert and ets:insert_new when called with a list of tuples to insert while a concurrent process either deletes or renames the table. The table deletion could be done with ets:delete/1 or be caused by termination of the table owning process. Symptoms are either VM crash or strange incorrect behavior from the insert operation. The risk of triggering the bugs increases with the length of the list of tuple to insert. Bugs exist since OTP 23.0. * erts: Boost execution of scheduled thread progress jobs. This to prevent memory exhaustion in extremely rapid allocation/deallocation scenarios, such as repeated ETS table creations/deletions. * erts: Fix segv crash during crash dumping an ETS table doing ets:delete_all_objects. * erts: Spec for function net:if_names/0 incorrect * erts: Fix bug in binary_to_term decoding a binary term 2Gbyte or larger. * erts: Documentation of erlang:module_loaded/1 has been adjusted: * erts: Fix list_to_atom/1 for negative code points. Could either return with a positive code point or fail with an incorrect exception. * erts: Fix rare bug causing VM crash when sending to a pid of a spawning process returned from erlang:processes/0. Only seen when provoked by system process literal_area_collector, triggered by a module purge operation, on a VM started with +Meamin (no customized allocators). * erts: gen_udp:open/2 with option(s) add_membership or drop_membership would drop earlier options. * erts: The inet:setopts/2 {reuseaddr, true} option will now be ignored on Windows unless the socket is an UDP socket. For more information see the documentation of the reuseaddr option part of the documentation of inet:setopts/2. Prior to OTP 25 the {reuseaddr, true} option was ignored for all sockets on Windows, but as of OTP 25.0 this was changed so that it was not ignored for any sockets. *** POTENTIAL INCOMPATIBILITY *** * erts: Fix bug in binary_to_term decoding a list of length 1G or longer. * erts: Fix bug in binary_to_term (and distributed receive) when decoding a large map (>32 keys) with unsorted small maps (<= 32) as keys of the large map. This was only a problem if the term was encoded by erl_interface, jinterface or otherwise, as the VM itself always encodes small maps with sorted keys. The "binary_to_term" would appear as successful but the created large map was internally inconsistent. The smaller key-maps could not be found with maps:get and friends. Other operations such as map compare and merge could probably also give incorrect results. * erts: Fix Windows bug in open_port({spawn, Command}, ..) when Command is found via the OS search PATH and that directory path contains white spaces. The port program would start but the command line arguments to it could be incorrect. * ftp: fix unexpected result ok when calling ftp:nlist repeatedly * inets: This change allows body requests to httpc:request/5 be an iolist() * inets: addition of type specs in httpc.erl * inets: httpc: Add support for HTTP 308 status code * dialyzer: Dialyzer would crash when attempting to analyze a bit syntax segment size having an literal non-integer size such as []. * dialyzer: Dialyzer could crash when trying to analyze a convoluted nested expression involving funs, * kernel: Fixed shutdown crash in gen_tcp socket backend, when the other end closed the socket. * kernel: erl_tar can now read gzip-compressed tar files that are padded. There is a new option compressed_one for file:open/2 that will read a single member from a gzip file, * kernel: Fix os:cmd to not translate all exceptions thrown to badarg. For example emfile from erlang:open_port was translated to badarg. This bug has existed since Erlang/OTP 24. * kernel: Spec for function net:if_names/0 incorrect * kernel: Missing ctrl option name transation for TOS and TTL (on FreeBSD) when using gen_udp with the 'socket' inet_backend. * kernel: gen_udp:open/2 with option(s) add_membership or drop_membership would drop earlier options. * kernel: The inet:setopts/2 {reuseaddr, true} option will now be ignored on Windows unless the socket is an UDP socket. For more information see the documentation of the reuseaddr option part of the documentation of inet:setopts/2. Prior to OTP 25 the {reuseaddr, true} option was ignored for all sockets on Windows, but as of OTP 25.0 this was changed so that it was not ignored for any sockets. *** POTENTIAL INCOMPATIBILITY *** * kernel: The distribution socket option handling in inet_tcp_dist has been cleaned up to clarify which were mandatory and which just had default values. * kernel: Improve warning message format for gen_tcp_socket. * snmp: Explicitly close the socket(s) when terminating (default-) net-if process. * stdlib: erl_tar can now read gzip-compressed tar files that are padded. There is a new option compressed_one for file:open/2 that will read a single member from a gzip file, * stdlib: A concurrent call to ets:rename could cause ets:delete_all_objects to fail halfway through with badarg. * stdlib: It is not allowed to call functions from guards. The compiler failed to reject a call in a guard when done by constructing a record with a default initialization expression that called a function. * stdlib: The compiler could crash when using a record with complex field initialization expression as a filter in a list comprehension. * stdlib: unicode:characters_to_binary() could build unnecessarily large call stack. * stdlib: Improve error message for ets:new/2 name clash. Say "name already exists" instead of less specific "invalid options". * mnesia: Fixed crash which could happen during startup if too many decisions where sent from remote nodes. * os_mon: The disk_space_check_interval configuration parameter of disksup can now be set to values smaller than a minute. * ssh: graceful shutdown of ssh_conection_handler when connection is closed by peer * common_test: Fix starting of peer nodes on old releases when the compile server was active and the current Erlang installation contained non-latin1 characters in its path. * public_key: Disregard LDAP URIs when HTTP URIs are expected. * ssl: With this change, tls_sender process is hibernated after sufficient inactivity. * ssl: Correct handling of legacy schemes so that ECDSA certs using sha1 may be used for some TLS-1.3 configurations. * ssl: With this change, tls_sender does not cause logger crash upon key update. * ssl: Enhance warning message * ssl: Provide server option to make certificate_authorities extension in the TLS-1.3 servers certificate request optional. This will allow clients to send incomplete chains that may be reconstructable and thereby verifiable by the server, but that would not adhere to the certificate_authorities extension. * ssl: If the verify_fun handles four arguments the DER cert will be supplied as one of the arguments. * megaco: A very minor improvement to the measurement tool. * observer: A WX event race could causes a crash in when handling socket or port info. * observer: Improve the nodes menu to include more nodes. * compiler: Line number in compiler messages would be truncated to 4 digits for line numbers greater than 9999. * compiler: In rare circumstance, matching a binary as part of a receive clause could cause the compiler to terminate because of an internal consistency check failure. * compiler: Compiling a function with complex bit syntax matching such as f(<>, <>) -> ok. could crash the compiler. * compiler: It is not allowed to call functions from guards. The compiler failed to reject a call in a guard when done by constructing a record with a default initialization expression that called a function. * compiler: The compiler could crash when using a record with complex field initialization expression as a filter in a list comprehension. * wx: Added environment variable WX_MACOS_NON_GUI_APP to allow user to override OSXIsGUIApplication behavior.- Changes for 25.1.2: * mnesia: Don't fill the logs if mnesia can't connect to all nodes, due to partitioned network. * erts: Add abandon carrier free utilization limit (+Muacful) option to erts_alloc. This option allows the user to mark unused segments in a memory carrier as re-useable by the OS if needed. This functionality was a non-configurable default before Erlang/OTP 25, but removed due to performance issues.- Changes for 25.1.1: * dialyzer: Dialyzer could crash when analyzing Elixir code that used intricate macros. * dialyzer: The --input_list_file option has been added. * ssl: Fixes handling of symlinks in cacertfile option. * eunit: With this change, eunit exact_execution option works with application primitive. * stdlib: peer nodes failed to halt when the process supervising the control connection crashed. When an alternative control connection was used, this supervision process also quite frequently crashed when the peer node was stopped by the node that started it which caused the peer node to linger without ever halting. * asn1: For the per and uper ASN.1 encoding rules, encoding and decoding the SEQUENCE OF and SET OF constructs with 16384 items or more is now supported. * erts: Listen sockets created with the socket module, leaked (erlang-) monitors. * erts: Notifications about available distribution data sent to distribution controller processes could be lost. Distribution controller processes can be used when implementing an alternative distribution carrier. The default distribution over tcp was not effected and the bug was also not present on x86/x86_64 platforms. * kernel: Listen sockets created with the socket module, leaked (erlang-) monitors. * kernel: peer nodes failed to halt when the process supervising the control connection crashed. When an alternative control connection was used, this supervision process also quite frequently crashed when the peer node was stopped by the node that started it which caused the peer node to linger without ever halting. - Changes for 25.1: * dialyzer: Two bugs have been fixed in Dialyzer's checking of behaviors: When a mandatory callback function is present but not exported, Dialyzer would not complain about a missing callback. When an optional callback function was not exported and had incompatible arguments and/or the return values were incompatible, Dialyzer would complain. This has been changed to suppress the warning, because the function might not be intended to be a callback function, for instance if a release added a new optional callback function (such as format_status/1 for the gen_server behaviour added in OTP 25). * dialyzer: The no_extra_return and no_missing_return warnings can now be suppressed through -dialyzer directives in source code. * jinterface: Fix javadoc build error by adding option -encoding UTF-8. * diameter: There is a new configure option, --enable- deterministic-build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non- determinism in several applications. * crypto: Fix configure with --with-ssl and --disable-dynamic- ssl-lib on Windows. * crypto: Remove all references correctly in the garbage collection if an engine handle was not explicit unloaded. * crypto: Changed the behaviour of the engine load/unload functions The engine load/unload functions have got changed semantics to get a more consistent behaviour and work correct when variables are garbage collected. The load functions now don't register the methods for the engine to replace. That will now be handled with the new functions engine_register/engine_unregister if needed. Some functions are removed from the documentation and therefor the API, but they are left in the code for compatibility. *** POTENTIAL INCOMPATIBILITY *** * crypto: Fixed a naming bug for AES-CFB and Blowfish-CFB/OFB when linked with OpenSSL 3.0 cryptolib. * crypto: Sign/verify does now behave as in OTP-24 and earlier for eddsa. * crypto: Pass elliptic curve names from crypto.erl to crypto's nif. * crypto: The configure option --disable-deprecated-warnings is removed. It was used for some releases when the support for OpenSSL 3.0 was not completed. It is not needed in OTP 25. * crypto: Crypto is now considered to be usable with the OpenSSL 3.0 cryptolib for production code. ENGINE and FIPS are not yet fully functional. * crypto: Do not exit if the legacy provider is missing in libcrypto 3.0. * ssl: Reject unexpected application data in all relevant places for all TLS versions. Also, handle TLS-1.3 middlebox compatibility with more care. This will make malicious connections fail early and further, mitigate possible DoS attacks, that would be caught by the handshake timeout. Thanks to Aina Toky Rasoamanana and Olivier Levillain from Télécom SudParis for alerting us of the issues in our implementation. * ssl: With this change, value of cacertfile option will be adjusted before loading certs from the file. Adjustments include converting relative paths to absolute and converting symlinks to actual file path. Thanks to Marcus Johansson * ssl: In TLS-1.3, if chain certs are missing (so server auth domain adherence can not be determined) send peer cert and hope the server is able to recreate a chain in its auth domain. * ssl: Make sure periodical refresh of CA certificate files repopulates cache properly. * ssl: Correct internal CRL cache functions to use internal format consistently. * ssl: Incorrect handling of client middlebox negotiation for TLS-1.3 could result in that a TLS-1.3 server would not use middlebox mode although the client was expecting it too and failing the negotiation with unexpected message. * ssl: If the "User" process, the process starting the TLS connection, gets killed in the middle of spawning the dynamic connection tree make sure we do not leave any processes behind. * ssl: A vulnerability has been discovered and corrected. It is registered as CVE-2022-37026 "Client Authentication Bypass". Corrections have been released on the supported tracks with patches 23.3.4.15, 24.3.4.2, and 25.0.2. The vulnerability might also exist in older OTP versions. We recommend that impacted users upgrade to one of these versions or later on the respective tracks. OTP 25.1 would be an even better choice. Impacted are those who are running an ssl/tls/dtls server using the ssl application either directly or indirectly via other applications. For example via inets (httpd), cowboy, etc. Note that the vulnerability only affects servers that request client certification, that is sets the option {verify, verify_peer}. (bsc#1205318) * eunit: With this change, Eunit can optionally not try to execute related module with "_tests" suffix. This might be used for avoiding duplicated executions when source and test modules are located in the same folder. * erl_docgen: Update DTD to allow XML tag em under pre. * inets: Add httpc:ssl_verify_host_options/1 to help setting default ssl options for the https client. * inets: This change fixes dialyzer warnings generated for inets/httpd examples (includes needed adjustment of spec for ssh_sftp module). * inets: Remove documentation of no longer supported callback. * stdlib: Fixed inconsistency bugs in global due to nodeup/nodedown messages not being delivered before/after traffic over connections. Also fixed various other inconsistency bugs and deadlocks in both global_group and global. As building blocks for these fixes, a new BIF erlang:nodes/2 has been introduced and net_kernel:monitor_nodes/2 has been extended. The -hidden and - connect_all command line arguments did not work if multiple instances were present on the command line which has been fixed. The new kernel parameter connect_all has also been introduced in order to replace the -connect_all command line argument. * stdlib: Fix the public_key:ssh* functions to be listed under the correct release in the Removed Functionality User's Guide. * stdlib: The type spec for format_status/1 in gen_statem, gen_server and gen_event has been corrected to state that the return value is of the same type as the argument (instead of the same value as the argument). * stdlib: If the timer server child spec was already present in kernel_sup but it was not started, the timer server would fail to start with an {error, already_present} error instead of restarting the server. * stdlib: When changing callback module in gen_statem the state_enter calls flag from the old module was used in for the first event in the new module, which could confuse the new module and cause malfunction. This bug has been corrected. With this change some sys debug message formats have been modified, which can be a problem for debug code relying on the format. * ** POTENTIAL INCOMPATIBILITY *** * stdlib: There is a new configure option, --enable- deterministic-build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non- determinism in several applications. * stdlib: The rfc339_to_system_time/1,2 functions now allows the minutes part to be omitted from the time zone. * stdlib: The receive statement in gen_event has been optimized to not use selective receive (which was never needed, and could cause severe performance degradation under heavy load). * stdlib: Add new API function erl_features:configurable/0 * parsetools: There is a new configure option, --enable- deterministic-build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non- determinism in several applications. * public_key: Support more Linux distributions in cacerts_load/0. * public_key: Correct asn1 typenames available in type pki_asn1_type() * public_key: Sign/verify does now behave as in OTP-24 and earlier for eddsa. * snmp: Improved the get-bulk response max size calculation. Its now possible to configure 'empty pdu size', see appendix c for more info. * snmp: Fix various example dialyzer issues * ssh: Handling rare race condition at channel close. * ssh: New ssh option no_auth_needed to skip the ssh authentication. Use with caution! * ssh: This change fixes dialyzer warnings generated for inets/httpd examples (includes needed adjustment of spec for ssh_sftp module). * ssh: The new function ssh:daemon_replace_options/2 makes it possible to change the Options in a running SSH server. Established connections are not affected, only those created after the call to this new function. * ssh: Add a timeout as option max_initial_idle_time. It closes a connection that does not allocate a channel within the timeout time. For more information about timeouts, see the Timeouts section in the User's Guide Hardening chapter. * observer: Fixed units in gui. * xmerl: There is a new configure option, --enable-deterministic- build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non-determinism in several applications. * asn1: There is a new configure option, --enable-deterministic- build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non-determinism in several applications. * erts: Fixed inconsistency bugs in global due to nodeup/nodedown messages not being delivered before/after traffic over connections. Also fixed various other inconsistency bugs and deadlocks in both global_group and global. As building blocks for these fixes, a new BIF erlang:nodes/2 has been introduced and net_kernel:monitor_nodes/2 has been extended. The -hidden and -connect_all command line arguments did not work if multiple instances were present on the command line which has been fixed. The new kernel parameter connect_all has also been introduced in order to replace the -connect_all command line argument. * erts: Fixed IPv6 multicast_if and membership socket options. * erts: Accept funs (NEW_FUN_EXT) with incorrectly encoded size field. This is a workaround for a bug (OTP-18104) existing in OTP 23 and 24 that could cause incorrect size fields in certain cases. The emulator does not use the decoded size field, but erl_interface still does and is not helped by this workaround. * erts: Fixed issue with inet:getifaddrs hanging on pure IPv6 Windows * erts: Fix faulty distribution encoding of terms with either The symptom could be failed decoding on the receiving side leading to aborted connection. Fix OTP-18093 is a workaround for theses bugs that makes the VM accepts such faulty encoded funs. The first encoding bug toward pending connection exists only in OTP 23 and 24, but the second one exists also on OTP 25. * erts: Fixed emulator crash that could happen during crashdump generation of ETS tables with options ordered_set and {write_concurrency,true}. * erts: Retrieval of monotonic and system clock resolution on MacOS could cause a crash and/or erroneous results. * erts: Fix bug where the max allowed size of erl +hmax was lower than what was allowed by process_flag. * erts: On computers with ARM64 (AArch64) processors, the JIT could generate incorrect code when more than 4095 bits were skipped at the tail end of a binary match. * erts: In rare circumstances, an is_binary/1 guard test could succeed when given a large integer. * erts: Fix bug causing ets:info (and sometimes ets:whereis) to return 'undefined' for an existing table if a concurrent process were doing ets:insert with a long list on the same table. * erts: Fix writing and reading of more than 2 GB in a single read/write operation on macOS. Before this fix attempting to read/write more than 2GB would result in {error,einval}. * erts: Fix bug sometimes causing emulator crash at node shutdown when there are pending connections. Only seen when running duel distribution protocols, inet_drv and inet_tls_dist. * erts: Yield when adjusting large process message queues due to The message queue adjustment work will now be interleaved with all other types of work that processes have to do, even other message queue adjustment work. * erts: Add rudimentary debug feature (option) for the inet- driver based sockets, such as gen_tcp and gen_udp. * erts: Introduced the hidden and dist_listen options to net_kernel:start/2. Also documented the -dist_listen command line argument which was erroneously documented as a kernel parameter and not as a command line argument. * erts: New documentation chapter "Debugging NIFs and Port Drivers" under Interoperability Tutorial. * erts: Add new API function erl_features:configurable/0 * kernel: Fixed inconsistency bugs in global due to nodeup/nodedown messages not being delivered before/after traffic over connections. Also fixed various other inconsistency bugs and deadlocks in both global_group and global. As building blocks for these fixes, a new BIF erlang:nodes/2 has been introduced and net_kernel:monitor_nodes/2 has been extended. The -hidden and - connect_all command line arguments did not work if multiple instances were present on the command line which has been fixed. The new kernel parameter connect_all has also been introduced in order to replace the -connect_all command line argument. * kernel: Fixed IPv6 multicast_if and membership socket options. * kernel: Fixed issue with inet:getifaddrs hanging on pure IPv6 Windows * kernel: The type specifications for inet:getopts/2 and inet:setopts/2 have been corrected regarding SCTP options. * kernel: The type specifications for inet:parse_* have been tightened. * kernel: Fix gen_tcp:connect/3 spec to include the inet_backend option. * kernel: Fix bug where using a binary as the format when calling logger:log(Level, Format, Args) (or any other logging function) would cause a crash or incorrect logging. * kernel: Add rudimentary debug feature (option) for the inet- driver based sockets, such as gen_tcp and gen_udp. * kernel: Introduced the hidden and dist_listen options to net_kernel:start/2. Also documented the -dist_listen command line argument which was erroneously documented as a kernel parameter and not as a command line argument. * kernel: Scope and group monitoring have been introduced in pg. For more information see the documentation of pg:monitor_scope(), pg:monitor(), and pg:demonitor(). * kernel: A new function global:disconnect/0 has been introduced with which one can cleanly disconnect a node from all other nodes in a cluster of global nodes. * compiler: The compiler will now forbid using the empty atom '' as module name. Also forbidden are modules names containing control characters, and module names containing only spaces and soft hyphens. * compiler: The bin_opt_info and recv_opt_info options would cause the compiler to crash when attempting to compile generated code without location information. * compiler: In rare circumstances involving floating point operations, the compiler could terminate with an internal consistency check failure. * compiler: In rare circumstances when doing arithmetic instructions on non-numbers, the compiler could crash. * compiler: In rare circumstances, complex boolean expressions in nested cases could cause the compiler to crash. * compiler: Expression similar to #{assoc:=V} = #key=>self()}, V would return the empty map instead of raising an exception. * compiler: Eliminated a crash in the beam_ssa_bool pass of the compiler when compiling a complex guard expression. * compiler: In rare circumstances, the compiler could crash with an internal consistency check failure. * compiler: When compiling with the option inline_list_funcs, the compiler could produce a nonsensical warning. * compiler: When given the no_ssa_opt option, the compiler could terminate with an internal consistency failure diagnostic when compiling map matching. * compiler: Made warnings for existing atoms being keywords in experimental features more precise, by not warning about quoted atoms. * compiler: There is a new configure option, --enable- deterministic-build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non- determinism in several applications. * megaco: Fixed various dialyzer related issues in the examples and the application proper. * megaco: There is a new configure option, --enable- deterministic-build, which will apply the deterministic compiler option when building Erlang/OTP. The deterministic option has been improved to eliminate more sources of non- determinism in several applications. * common_test: Fix cth_surefire to handle when a suite is not compiled with debug_info. This bug has been present since Erlang/OTP 25.0. * common_test: Common Test now preserves stack traces for throws.- Changes for 25.0.4: * kernel: A call to net_kernel:setopts(new, Opts) at the same time as a connection was being set up could cause a deadlock between the net_kernel process and the process setting up the connection. * erts: The monitor/3 BIF did not apply options to the created monitor if the target process or port did not exist. That is, the corresponding down message would get a `DOWN` tag even if a custom tag had been set, and the returned reference was not an alias even if the alias option had been passed. * erts: The erlang:monotonic_time/1, erlang:system_time/1, erlang:time_offset/1, and os:system_time/1 BIFs erroneously failed when passed the argument native.- Changes for 25.0.3: * erts: Distributed exit signals could be lost under the following conditions: * erts: A race could cause process_info(Pid, message_queue_len) on other processes to return invalid results. * erts: Fixed reduction counting for handling process system tasks. * erts: Priority elevation of terminating processes did not work which could cause execution of such processes to be delayed. * erts: An unlink operation made by a process that terminated before the unlink operation completed, i.e., before it had received an unlink-ack signal from the linked process, caused an exit signal to erroneously be sent from the terminating process to the process being unlinked. This exit signal would most often be ignored by the receiver, but if the receiver of the exit signal concurrently set up a new link, it could receive the exit signal with the actual exit reason of the terminating process instead of a noproc exit reason. It is however very hard to detect that this has happened and has no obvious negative consequences, so it should be considered harmless. A distributed unlink-ack signal received by a terminating process was also not properly removed which could cause a minor memory leak. * ssl: The link to crypto:engine_load refered the function with wrong arity.- Changes for 25.0.2: * ssl: Improved handling of unexpected messages during the handshake, taking the right action for unexpected messages. * erts: On computers with the ARM64 (AArch64) architecture (such as Apple Silicon Macs) a rem expression followed by a div expression with the same operands could evaluate to the wrong result if the result of the rem expression was unused. - Changes for 25.0.1: * ssl: When a TLS-1.3 enabled client tried to talk to a TLS-1.2 server that coalesces TLS-1.2 handshake message over one TLS record, the connection could fail due to some message being handled in the wrong state, this has been fixed. * ssl: Correctly handles supported protocol version change from default to something else by sni_fun supplied to ssl:handshake/[2,3] together with a TCP-socket (so called upgrade). * ssl: Also, TLS-1.3 should respond with a protocol version alert if previous versions, that are supported but not configured, are attempted. * kernel: The DNS resolver inet_res has been fixed to ignore trailing dot difference in the request domain between the sent request and the received response, when validating a response. * kernel: A bug in inet_res has been fixed where a missing internal {ok,_} wrapper caused inet_res:resolve/* to return a calculated host name instead of an `{ok,Msg} tuple, when resolving an IP address or a host name that is an IP address string. * kernel: The erlang:is_alive() BIF could return true before configured distribution service was available. This bug was introduced in OTP 25.0 ERTS version 13.0. The erlang:monitor_node() and erlang:monitor() BIFs could erroneously fail even though configured distribution service was available. This occurred if these BIFs were called after the distribution had been started using dynamic node name assignment but before the name had been assigned. * kernel: Added the missing mandatory address/0 callback in the gen_tcp_dist example. * erts: A spawn_reply signal from a remote node could be delayed and be delivered after other signals from the newly spawned process. When this bug triggered, the connection to the node where the process was spawned sometimes could be taken down due to the bug. The following error message would then be logged if this happened: Missing 'spawn_reply' signal from the node detected by on the node . The node probably suffers from the bug with ticket id OTP-17737. This bug only affected processes which had enabled off_heap message_queue_data and parallel reception of signals had been automatically enabled. This bug was introduced in OTP 25.0, ERTS version 13.0. * erts: Fixed type spec of erlang:system_info(dist_ctrl). * erts: The zlib built in to the runtime system has been updated to version 1.2.12. (Note that on most platforms, the platform's own zlib is used.) * erts: The erlang:is_alive() BIF could return true before configured distribution service was available. This bug was introduced in OTP 25.0 ERTS version 13.0. The erlang:monitor_node() and erlang:monitor() BIFs could erroneously fail even though configured distribution service was available. This occurred if these BIFs were called after the distribution had been started using dynamic node name assignment but before the name had been assigned. * crypto: Note in the documentation that MODP (rfc3526) groups and OpenSSL 3.0 can give an error if a call to crypto:generate_key/2 specifies a key length, and that length is to small. * crypto: The cmac now uses only the 3.0 API * crypto: Documentation is now updated with which OpenSSL cryptolib versions that OTP currently is tested. * dialyzer: Fixed the documentation for the missing_return and extra_return options. * mnesia: Fixed add_table_copy which could leave a table lock if the receiving node went down during the operation. * ssh: Binaries can be limited in logs with the parameter max_log_item_len. The default value is 500 bytes. * stdlib: In the initial release of Erlang/OTP 25, the expression bound to the _ pseudo-field in a record initialization would always be evaluated once, even if all other fields in the record were explicitly initialized. That would break the use case of binding the expression error(...) to _ in order to get an exception if not all fields were initialized. The behavior of binding to _ has been reverted to the pre-OTP 25 behavior, that is, to not evaluate the expression if all fields have been bound to explicit values.- Version 25.0: - stdlib * New function filelib:ensure_path/1 will ensure that all directories for the given path exists * New functions groups_from_list/2 and groups_from_list/3 in the maps module * New functions uniq/1 uniq/2 in the lists module * New PRNG added to the rand module, for fast pseudo-random numers. - compiler, kernel, stdlib, syntax_tools: * Added support for selectable features as described in EEP-60. Features can be enabled/disabled during compilation with options (ordinary and +term) to erlc as well as with directives in the file. Similar options can be used to erl for enabling/disabling features allowed at runtime. The new maybe expression EEP-49 is fully supported as the feature maybe_expr. - erts & JIT: * The JIT now works for 64-bit ARM processors. * The JIT now does type-based optimizations based on type information in the BEAM files. * Improved the JIT’s support for external tools like perf and gdb, allowing them to show line numbers and even the original Erlang source code when that can be found. - erts, stdlib, kernel: * Users can now configure ETS tables with the {write_concurrency, auto} option. This option forces tables to automatically change the number of locks that are used at run-time depending on how much concurrency is detected. The {decentralized_counters, true} option is enabled by default when {write_concurrency, auto} is active. * Benchmark results comparing this option with the other ETS optimization options are available here: benchmarks. * To enable more optimizations, BEAM files compiled with OTP 21 and earlier cannot be loaded in OTP 25. * The signal queue of a process with the process flag message_queue_data=off_heap has been optimized to allow parallel reception of signals from multiple processes. This can improve performance when many processes are sending in parallel to one process. See benchmark. * The Erlang installation directory is now relocatable on the file system given that the paths in the installation’s RELEASES file are paths that are relative to the installations root directory. * A new option called short has been added to the functions erlang:float_to_list/2 and erlang:float_to_binary/2. This option creates the shortest correctly rounded string representation of the given float that can be converted back to the same float again. * Introduction of quote/1 and unquote/1 functions in the uri_string module - a replacement for the deprecated functions http_uri:encode and http_uri:decode. * The new module peer supersedes the slave module. The slave module is now deprecated and will be removed in OTP 27. * global will now by default prevent overlapping partitions due to network issues. This is done by actively disconnecting from nodes that reports that they have lost connections to other nodes. This will cause fully connected partitions to form instead of leaving the network in a state with overlapping partitions. * It is possible to turn off the new behavior by setting the the kernel configuration parameter prevent_overlapping_partitions to false. Doing this will retain the same behavior as in OTP 24 and earlier. * The format_status/2 callback for gen_server, gen_statem and gen_event has been deprecated in favor of the new format_status/1 callback. * The new callback adds the possibility to limit and change many more things than the just the state. * The timer module has been modernized and made more efficient, which makes the timer server less susceptible to being overloaded. The timer:sleep/1 function now accepts an arbitrarily large integer. - compiler: * The maybe ... end construction as proposed in EEP-49 has been implemented. It can simplify complex code where otherwise deeply nested cases would have to be used. * To enable maybe, give the option {enable_feature,maybe_expr} to the compiler. The exact option to use will change in a coming release candidate and then it will also be possible to use from inside the module being compiled. * When a record matching or record update fails, a {badrecord, ExpectedRecordTag} exception used to be raised. In this release, the exception has been changed to {badrecord, ActualValue}, where ActualValue is the value that was found instead of the expected record. * Add compile attribute -nifs() to empower compiler and loader with information about which functions may be overridden as NIFs by erlang:load_nif/2. * Improved and more detailed error messages when binary construction with the binary syntax fails. This applies both for error messages in the shell and for erl_error:format_exception/3,4. * Change format of feature options and directives for better consistency. Options to erlc and the -compile(..) directive now has the format {feature, feature-name, enable | disable}. The -feature(..) now has the format -feature(feature-name, enable | disable). - crypto: * Add crypto:hash_equals/2 which is a constant time comparision of hashvalues. - ssl: * Introducing a new (still experimental) option {certs_keys,[cert_key_conf()]}. With this a list of a certificates with their associated key may be used to authenticate the client or the server. The certificate key pair that is considered best and matches negotiated parameters for the connection will be selected. - public_key: * Functions for retrieving OS provided CA-certs added. - dialyzer: * Optimize operations in the erl_types module. Parallelize the Dialyzer pass remote. * Added the missing_return and extra_return options to raise warnings when specifications differ from inferred types. These are similar to, but not quite as verbose as overspecs and underspecs. * Dialyzer now better understands the types for min/2, max/2, and erlang:raise/3. Because of that, Dialyzer can potentially generate new warnings. In particular, functions that use erlang:raise/3 could now need a spec with a no_return() return type to avoid an unwanted warning.- Fix build for Factory. Currently, any Java version is fine for Erlang.- Changes for 24.3.2: * erl_interface: Fix compile error regarding gethostbyaddr_r on Android. Error introduced in OTP 24.3. * kernel: Fix failed accepted connection setup after previous established connection from same node closed down silently. * kernel: Fixed a problem where typing Ctrl-R in the shell could hang if there were some problem with the history log file. - Changes for 24.3.1: * dialyzer: There could be spurious warnings for unknown types when a type was a subtype of an existing type that was a subtype of an unknown type. * ssl: Client certification could fail for TLS-1.3 servers that did not include the certificat_authorties extension in its certificate request message. - Changes for 24.3: * megaco: The compilation time is no longer recorded in BEAM files. There remained several undocumented functions that attempted to retrieve compilation times. Those have now been removed. * megaco: Update the performance and debug chapters of the megaco user's guide. Also some updates to the meas tools. * compiler: The expression <<0/native-float>>=Bin would always fail to match, while <<0/float-native>>=Bin would match (provided that Bin contained the binary representation of 0.0) * compiler: The compiler will now compile huge functions with straight-line code faster. * erl_interface: Add --enable-ei-dynamic-lib configure option that will make erl_interface also release a dynamic library version of libei. * erl_interface: The ei API for decoding/encoding terms is not fully 64-bit compatible since terms that have a representation on the external term format larger than 2 GB cannot be handled. * sasl: Fix bug in systools:make_script/1 documentation. * inets: The compilation time is no longer recorded in BEAM files. There remained several undocumented functions that attempted to retrieve compilation times. Those have now been removed. * inets: Documentation fix for inets:services_info/0, which now describes that Info might be a Reason term() in case when {error, Reason} is returned as service info. * crypto: The crypto app in OTP can since OTP-24.2 be compiled, linked and used with the new OpenSSL 3.0 cryptolib. The crypto app has 3.0 support has been improved, but is still *not recommended* for other usages than experiments and alpha testing. There are not yet any guaranties that it works, not even together with other OTP applications like for example SSL and SSH, although there are no known errors. Since the previous release, OTP-24.2, the following improvements have been done: - It has been tested during nearly every nightly test on the OTP lab - The hash algorithms md4 and ripemd160 have been enabled with OpenSSL 3.0. - The ciphers blowfish_cbc, blowfish_ecb, des_cbc, des_cfb, des_ecb, rc2_cbc and rc4 have been enabled with OpenSSL 3.0. Disabled or unsupported with OpenSSL 3.0 are still: - ENGINE support - FIPS mode - Other providers than the built-in ones - Compiling and linking with OpenSSL 3.0 cryptolib in compatibility modes (for example to behave as 1.1.1) and, the ciphers blowfish_cfb64 and blowfish_ofb64 are not supported and will not be either. Deprecated functions in the OpenSSL 3.0 cryptolib must not be disabled as OTP/crypto still uses some of the deprecated API functions. The gcc flag - Wno-deprecated-declarations is set to prevent deprecation warnings to be printed when compiling. * crypto: Crypto is adapted to LibreSSL 3.5.0 on OpenBSD. * crypto: New configure option ( --disable-otp-test-engine) to prohibit the build of the OTP test engine used in some test suites. The reason is that the test engine could be hard to compile on for instance LibreSSL 3.5.0. For that particular cryptolib version (or higher), this configure option is set automatically. * jinterface: Fix bug in OtpOutputStream.write_pid/4 and write_ref/3 causing faulty encodig. Bug exists since OTP 23.0. * wx: Removed the static_data option from wxImage creation functions, as it was broken and could lead to crashes. Now image data is always copied to wxWidgets as was the default behavior. Removed some non working wxGridEvent event types, which have there own events in newer wxWidgets versions, and added a couple of event types that where missing in wx. * asn1: Add support for the maps option in combination with the jer backend. * snmp: The compilation time is no longer recorded in BEAM files. There remained several undocumented functions that attempted to retrieve compilation times. Those have now been removed. * snmp: [agent] Remove expectation of socket being a port. * common_test: OTP internal test fix. * runtime_tools: Fixed bug in scheduler:utilization(Seconds) that would leave the scheduler_wall_time system flag incorrectly enabled. * runtime_tools: Add scheduler:get_sample/0 and get_sample_all/0. Also clarify scheduler module documentation about how it depends on system flag scheduler_wall_time. * erts: Fixed a bug in the x86 JIT that might cause floating point instructions to wrongly throw an exception. * erts: Preserve correct nodedown_reason if supervised distribution controller processes exit with {shutdown, Reason}. * erts: Handling of send_timeout for gen_tcp has been corrected so that the timeout is honored also when sending 0 bytes. * erts: By default global does not take any actions to restore a fully connected network when connections are lost due to network issues. This is problematic for all applications expecting a fully connected network to be provided, such as for example mnesia, but also for global itself. A network of overlapping partitions might cause the internal state of global to become inconsistent. Such an inconsistency can remain even after such partitions have been brought together to form a fully connected network again. The effect on other applications that expects that a fully connected network is maintained may vary, but they might misbehave in very subtle hard to detect ways during such a partitioning. In order to prevent such issues, we have introduced a prevent overlapping partitions fix which can be enabled using the prevent_overlapping_partitions kernel(6) parameter. When this fix has been enabled, global will actively disconnect from nodes that reports that they have lost connections to other nodes. This will cause fully connected partitions to form instead of leaving the network in a state with overlapping partitions. Note that this fix has to be enabled on all nodes in the network in order to work properly. Since this quite substantially changes the behavior, this fix is currently disabled by default. Since you might get hard to detect issues without this fix you are, however, strongly advised to enable this fix in order to avoid issues such as the ones described above. As of OTP 25 this fix will become enabled by default. * erts: Corrected the type specification of erlang:seq_trace/2. * erts: Fix memory leak when tracing on running on a process that only handle system tasks or non-message signals (for example process_info requests). * erts: Add support for using socket:sockaddr_in() and socket:sockaddr_in6() when using gen_sctp, gen_tcp and gen_udp. This will make it possible to use Link Local IPv6 addresses. * erts: Show on_load failure reasons in embedded mode. * erts: Compile date saved in the Erlang VM executable has been removed. * erts: Improve documentation for the dynamic node name feature. * ssh: Fix makefile dependency bugs. * ssh: Fixed faulty OpenSSH decoding of Ed25519/Ed448 keys in the OpenSSH format openssh_key_v1. * ssh: Correction of ssh_file typing, specially for the experimental openssh-key-v1 encoding. * ssh: Improper tag for private ED keys when encoding with ssh:encode/2. The tuple had ed_priv as first element, but should have had ed_pri. This is now corrected. *** POTENTIAL INCOMPATIBILITY *** * ssh: Add support for Ed25519/Ed448 SSH host keys in the RFC 4716 format ("-----BEGIN EC PRIVATE KEY-----") generated by for example openssl or via Erlang functions (i.e. public_key:generate_key({namedCurve, ed25519})). Ed25519 SSH host keys generated by ssh-keygen was, and are still, supported. * kernel: Handling of send_timeout for gen_tcp has been corrected so that the timeout is honored also when sending 0 bytes. * kernel: By default global does not take any actions to restore a fully connected network when connections are lost due to network issues. This is problematic for all applications expecting a fully connected network to be provided, such as for example mnesia, but also for global itself. A network of overlapping partitions might cause the internal state of global to become inconsistent. Such an inconsistency can remain even after such partitions have been brought together to form a fully connected network again. The effect on other applications that expects that a fully connected network is maintained may vary, but they might misbehave in very subtle hard to detect ways during such a partitioning. In order to prevent such issues, we have introduced a prevent overlapping partitions fix which can be enabled using the prevent_overlapping_partitions kernel(6) parameter. When this fix has been enabled, global will actively disconnect from nodes that reports that they have lost connections to other nodes. This will cause fully connected partitions to form instead of leaving the network in a state with overlapping partitions. Note that this fix has to be enabled on all nodes in the network in order to work properly. Since this quite substantially changes the behavior, this fix is currently disabled by default. Since you might get hard to detect issues without this fix you are, however, strongly advised to enable this fix in order to avoid issues such as the ones described above. As of OTP 25 this fix will become enabled by default. * kernel: Fix bug where logger would crash when logging a report including improper lists. * kernel: Make erlang:set_cookie work for dynamic node names. * kernel: Add support for using socket:sockaddr_in() and socket:sockaddr_in6() when using gen_sctp, gen_tcp and gen_udp. This will make it possible to use Link Local IPv6 addresses. * kernel: A net_tickintensity kernel parameter has been introduced. It can be used to control the amount of ticks during a net_ticktime period. A new net_kernel:start/2 function has also been introduced in order to make it easier to add new options. The use of net_kernel:start/1 has been deprecated. * kernel: Improve documentation for the dynamic node name feature. * erl_docgen: Fix css for large tables and images on small screens * erl_docgen: Fix bug with codeinclude tag that caused it to not include the code if used in a correct, but unexpected way. * observer: Calculate the display width in etop, instead of hard- coding it to 89 characters. * debugger: Fix record index matching, it was broken and could never match. * ssl: Improved error handling. * ssl: Before this change, net_kernel used with TLS distribution might be leaking processes in case of connectivity issues. * ssl: Fix makefile dependency bugs. * ssl: Make sure the TLS sender process handles explicit calls to erlang:disconnect_node properly, avoiding potential hanging problems in net_kernel. * ssl: Add support for TLS-1.3 certificate_authorities extension. And process certificate_authorities field in pre-TLS-1.3 certificate requests. * ssl: Support password fun for protected keyfiles in ssl:connect function. * ssl: Add in some cases earlier detection of possible DoS attacks by malicious clients sending unexpected TLS messages instead of the client hello. Note that such attacks are already mitigated by providing a timeout for the TLS handshake. * eldap: Fix eldap extensibleMatch dnAttributes option. According to the ldap ASN1 the dnAttributes should be a bool, instead it was generated as a string. * eldap: Implemented paged searches according to https://www.rfc- editor.org/rfc/rfc2696.txt * public_key: Support password fun for protected keyfiles in ssl:connect function. * stdlib: The compilation time is no longer recorded in BEAM files. There remained several undocumented functions that attempted to retrieve compilation times. Those have now been removed. * mnesia: Reduce the number of locks taken during table copying, should reduce the startup time on large systems. * diameter: The compilation time is no longer recorded in BEAM files. There remained several undocumented functions that attempted to retrieve compilation times. Those have now been removed.- Changes for 24.2.2: * inets: Avoid intermediate ungraceful shutdown of the HTTP server. * ssh: The ssh sever parallel_login option was missing in OTP-24- Changes for 24.2.1: * ssl: Improve SNI (server name indication) handling so that protocol version can be selected with regards to SNI. Also, make sure that ssl:connection_information/1 returns the correct SNI value. * ssl: Fixed cipher suite listing functions so that the listing of all cipher suites will be complete. Another fix for cipher suite handling in OTP-24.1 accidentally excludes a few cipher suites from the listing of all cipher suites. * ssl: Reenable legacy cipher suite TLS_RSA_WITH_3DES_EDE_CBC_SHA for explicit configuration in TLS-1.2, not supported by default. * ssl: Avoid unnecessary logs by better adjusting the tls_sender process to the new supervisor structure in OTP-24.2 * erts: Fixed a memory leak in file:read_file_info/2 and file:read_file/1 on Windows. * erts: Fix GC emulator crash when spawn_request was used when message tracing was enabled.- Changes for 24.2: * compiler: When the compiler is invoked by Dialyzer, it will no longer apply an optimization of binary patterns that would turn the pattern <<"bar">> into <<6447474:24>>, which would be very confusing when printed out by Dialyzer. * compiler: The compiler would replace known failing calls (such as atom_to_list(42)) with a call to error(badarg). With the extended error information introduced in OTP 24 (EEP 54), those "optimized" calls would not have extended error information. To ensure that as much extended error information as possible is available, the compiler now keeps the original call even when it is known to fail. * sasl: Make release_handler even more resilient against exiting processes during upgrade. Same kind of bug fix as OTP-16744 released in sasl-4.0.1 (OTP 23.1). * ssl: Allow re-connect on DTLS sockets Can happen when a computer reboots and connects from the same client port without the server noticing should be allowed according to RFC. * ssl: Fix tls and non-tls distribution to use erl_epmd:address_please to figure out if IPv4 or IPv6 addresses should be used when connecting to the remote node. Before this fix, a dns lookup of the remote node hostname determined which IP version was to be used which meant that the hostname had to resolve to a valid ip address. * ssl: Use supervisor significant child to manage tls connection process and tls sender process dependency. * ssl: Random generation adjustment for TLS1.3 * ssl: Allow any {03,XX} TLS record version in the client hello for maximum interoperability * mnesia: Documentation and minor code cleanup. * common_test: Before this change, group handling grammar was ambiguous and also group paths did not support test specs. * common_test: Before this change, it was not possible to link to a particular header entry in Common Test log. Change adds right aligned anchor icons in HTML test logs. * parsetools: The default parser include file for yecc (yeccpre) will no longer crash when attempting to print tokens when reporting an error. * tools: Erlang-mode fixed for newer versions of xref using CL- Lib structures instead of EIEIO classes. * inets: Correct HTTP server URI handling to fully rely on uri_string. The server could mistreat some URI paths that in turn could result in incorrect responses being generated. * inets: Extend header values to httpc:request/5 to allow binary() as well. Make error detection of invalid arguments to httpc:request/5 be more precise so an error is returned in more cases instead of causing a hang or function_clause. Be more precise in documentation regarding the types of arguments being accepted. * crypto: Fixed the C-warning "implicit declaration of function 'OpenSSL_version_num'" if compiling with an early LibreSSL version. * crypto: FIPS availability was not checked correctly for AEAD ciphers. * crypto: Fixed that cipher aliases (like aes_cbc etc) could be present even if the aliased cipher(s) (like aes_128_cbc, aes_256_cbc,... etc) was missing. * crypto: The crypto app in OTP can now be compiled, linked and used with the new OpenSSL 3.0 cryptolib. It has not yet been extensively tested and is in this release *not recommended* for other usages than experiments and alpha testing. There are not yet any guaranties that it works, not even together with other OTP applications like for example SSL and SSH, although there are no known errors. Compiling and linking with OpenSSL 3.0 cryptolib in compatibility modes (for example to behave as 1.1.1) are not tested. It is not tested with external providers. The support for FIPS mode does not yet work, and is disabled when compiled with OpenSSL 3.0. Deprecated functions in the OpenSSL 3.0 cryptolib must not be disabled as OTP/crypto still uses some of the deprecated API functions. The gcc flag - Wno-deprecated-declarations is set to prevent deprecation warnings to be printed when compiling. The hash algorithms md4 and ripemd160 are disabled temporarily when compiled with OpenSSL 3.0. The ciphers blowfish_cbc, blowfish_cfb64, blowfish_ecb, blowfish_ofb64, des_cbc, des_cfb, des_ecb, rc2_cbc and rc4 are disabled temporarily when compiled with OpenSSL 3.0. * crypto: The error handling in crypto is partly refactored using the new error reporting support. Errors earlier propagated like exceptions are still so, but when the failing function is called from the terminal - for example during failure hunting - a more descriptive text is produced. * crypto: A new function crypto:info/0 which presents some data about the compilation and linkage of the crypto nif is added. * crypto: Added the pbkdf2_hmac/5 function to the crypto module. It calls the PKCS5_PBKDF2_HMAC function which implements PBKD2 with HMAC in an efficient way. * stdlib: Fix rendering of nbsp on terminals that do not support unicode. * stdlib: Improved the erl_error printout for when re fails to compile a regular expression to also print hints about why the compilation failed. * stdlib: Fixed spec for supervisor_bridge:start_link(). * stdlib: Added missing shutdown clauses in supervisor which could cause erroneous error reports. * stdlib: Add the no_auto_import_types to erl_lint to allow a module to define types of the same name as a predefined type. * erts: When matching and constructing utf16 segments in the binary syntax, the native flag would be ignored. That is, the endian would always be big endian even on a little-endian computer (almost all modern computers). * erts: Fix the help printout of +JPperf. * erts: Fix bug that could cause Erlang to deadlock during creation of an Erlang crash dump. * erts: Fixed C++ build errors on some aarch64 platforms. * erts: For macOS, the Info.plist file embedded in the runtime system now only contains the absolute minimum amount of information needed for the web view in wx to work towards localhost. The other fields have been removed, allowing an application packaged in a bundle to specify the application name and other parameter in its own Info.plist file. * erts: Fix bug in internal stacks (WSTACK and ESTACK) used by term_to_binary/2 to encode terms. The bug could cause a segfault if a very very large map was to be encoded with the deterministic option given. * erts: Improve the error printout when open_port/2 fails because of invalid arguments. * erts: Fix bug in crash dumps where the stackframe of a process would be printed using an incorrect format. Crash dump viewer has also been fixed to be able read the broken stack format. The bug has existed since Erlang/OTP 23.0. * erts: An option for enabling dirty scheduler specific allocator instances has been introduced. By default such allocator instances are disabled. For more information see the documentation of the +Mdai erl command line argument. * erts: Minor optimization of receive markers in message queues. * erts: All predefined types have been added to the erlang module together with documentation. Any reference to a predefined type now links to that documentation so that the user can view it. * erts: Suppress a code checker warning caused by debug builds of YCF. YCF tries to get a conservative estimate of the bottom of the stack by reading and returning a call stack allocated variable. * erts: Add file and product properties to erl.exe and werl.exe. * erts: Micro optimization in bitstring append operations. * erts: Responsiveness of processes executing on normal or low priority could suffer due to code purging or literal area removal on systems with a huge amount of processes. This since during these operations all processes on the system were scheduled for execution at once. This problem has been fixed by introducing a limit on outstanding purge and copy literal requests in the system. By default this limit is set to twice the amount of schedulers on the system. This will ensure that schedulers will have enough work scheduled to perform these operations as quickly as possible at the same time as other work will be interleaved to a much higher degree. Performance of these operations will however be somewhat degraded due to the overhead of enforcing this limit compared to when using a very large limit. This limit can be set by passing the +zosrl command line argument to erl, or by calling erlang:system_flag(outstanding_system_requests_limit, NewLimit). * kernel: socket:which_sockets( pid() ) uses wrong keyword when looking up socket owner ('ctrl' instead of 'owner'). * kernel: In epmd_ntop, the #if defined(EPMD6) conditional was inverted and it was only including the IPv6-specific code when EPMD6 was undefined. This was causing IPv6 addrs to be interpreted as IPv4 addrs and generating nonsense IPv4 addresses as output. Several places were incorrectly using 'num_sockets' instead of 'i' to index into the iserv_addr array during error logging. This would result in a read into uninitialized data in the iserv_addr array. Thanks to John Eckersberg for providing this fix. * kernel: Minor fix of the erl_uds_dist distribution module example. * kernel: A bug has been fixed for the legacy TCP socket adaption module gen_tcp_socket where it did bind to a socket address when given a file descriptor, but should not. * kernel: Improve the error printout when open_port/2 fails because of invalid arguments. * kernel: Calling socket:monitor/1 on an already closed socket should succeed and result in an immediate DOWN message. This has now been fixed. * kernel: Fix the configuration option logger_metadata to work. * kernel: Fix tls and non-tls distribution to use erl_epmd:address_please to figure out if IPv4 or IPv6 addresses should be used when connecting to the remote node. Before this fix, a dns lookup of the remote node hostname determined which IP version was to be used which meant that the hostname had to resolve to a valid ip address. * kernel: Add logger:reconfigure/0. * kernel: Add socket function ioctl/2,3,4 for socket device control. * kernel: Add simple support for socknames/1 for gen_tcp_socket and gen_udp_socket. * kernel: The types for callback result types in gen_statem has bee augmented with arity 2 types where it is possible for a callback module to specify the type of the callback data, so the callback module can get type validation of it. * erl_docgen: Fix codeinclude tag to correctly respect the type attribute. * erl_docgen: The HTML documentation has been updated to collapse better on small screens. * erl_docgen: All predefined types have been added to the erlang module together with documentation. Any reference to a predefined type now links to that documentation so that the user can view it. * snmp: Handling of test config flag when starting "empty". * snmp: Add support for new authentication algorithms (SHA-224, SHA-256, SHA-384 and SHA-512), according to RFC 7860. * snmp: Improve debug info for (snmp) manager. * wx: Fix crash in cleanup code when a gui application is exiting. Fix errors in the OpenGL wrapper that could cause crashes and improve the documentation. * edoc: Add option link_predefined_types that is used to create links to erlang predefined types. This is mainly to be used by erl_docgen when creating the Erlang/OTP documentation. * dialyzer: Fixed a crash when opaque types contained certain unicode characters. * dialyzer: When the compiler is invoked by Dialyzer, it will no longer apply an optimization of binary patterns that would turn the pattern <<"bar">> into <<6447474:24>>, which would be very confusing when printed out by Dialyzer. * observer: Fix bug in crash dumps where the stackframe of a process would be printed using an incorrect format. Crash dump viewer has also been fixed to be able read the broken stack format. The bug has existed since Erlang/OTP 23.0. * ssh: The value of the connect_timeout option is now used as default value for the negotiation timeout. * ssh: Add better error handling in connect/2,3,4. Detect incorrect arguments and return an informative error tuple instead of throwing a function_clause or similar. * ssh: Make ssh algorithm selection better handle dynamic changes changes in crypto fips mode. * megaco: [megaco_tcp] When connect fails, include more info in the error reason. - Changes for 24.1.7: * ssh: Fixed a race condition in the acceptor loop: if a client disconnected immediately after the tcp connect, the server could cease handling connection on that address:port. - Changes for 24.1.6: * ssl: Correct typo of ECC curve name in signature algorithm handling. Will make the signature algorithm ecdsa_secp521r1_sha512 succeed. * ssl: Suppress authenticity warning when option verify_none is explicitly supplied. - Changes for 24.1.5: * erts: The runtime system could call select() with a too large timeout value when executing on MacOS. This could in turn cause the runtime system to crash. * erts: The fix for Linux's behaviour when reconnecting an UDP socket in PR-5120 released in OTP-24.1.2 has been refined to only dissolve the socket's connection before a connect if the socket is already connected, that is: only for a reconnect. This allows code to open a socket with an ephemeral port, get the port number and connect; without the port number changing (on Linux). This turned out to have at least one valid use case (besides test cases). Should one reconnect the socket then the port number may change, on Linux; it is a known quirk, which can be worked around by binding to a specific port number when opening the socket. If you can do without an ephemeral port, that is... * erts: Certain distributed signals that for various reasons must to be forced into the distribution buffer even when it is full would instead be lost if the distribution buffer was full when sent. The effected signals: * kernel: The internal, undocumented, but used, module inet_dns has been fixed to handle mDNS high bit usage of the Class field. Code that uses the previously obsolete, undocumented and unused record field #dns_rr.func will need to be updated since that field is now used as a boolean flag for the mDNS high Class bit. Code that uses the also undocumented record [#]dns_query will need to be recompiled since a boolean field [#]dns_query.unicast_response has been added for the mDNS high Class bit. *** POTENTIAL INCOMPATIBILITY *** * kernel: The fix for Linux's behaviour when reconnecting an UDP socket in PR-5120 released in OTP-24.1.2 has been refined to only dissolve the socket's connection before a connect if the socket is already connected, that is: only for a reconnect. This allows code to open a socket with an ephemeral port, get the port number and connect; without the port number changing (on Linux). This turned out to have at least one valid use case (besides test cases). Should one reconnect the socket then the port number may change, on Linux; it is a known quirk, which can be worked around by binding to a specific port number when opening the socket. If you can do without an ephemeral port, that is... - Changes for 24.1.4: * erts: Fix bug where a gen_tcp write error that happened during a delayed_send would cause a use after free segfault. * erts: Fix x86 JIT bug where a rem instruction could cause a segfault if given values that would cause an badarith exception. - Changes for 24.1.3: * ssl: Fix TLS-1.2 RSA-PSS negotiation and also fix broken certificate request message for pre-TLS-1.3 servers. * ssl: Fix CRL issuer verification that under some circumstances could fail with a function_clause error. * erts: Reduction counter was not updated before and after doing apply operations on the runtime system with the jit enabled. This caused reduction counting to get out of sync if a garbage collection was made as part of the apply operation. * erts: This fixes a bug in erts_factory_undo that caused the heap to not be reset correctly. The erts_factory_undo function is, for example, called when a binary_to_term/1 call fails to reset the heap to its state before the binary_to_term/1 call. This can cause the heap to contain invalid terms which potentially can cause issues (e.g., crashes) when the whole heap is scanned. * erts: When attempting to construct a binary with an segment having an illegal type for the size (e.g. an atom), there could be an unnecessary memory allocation (and subsequent deallocation) before the operation failed. Amended to fail before allocating any memory for the binary. * erts: Fix bug in persistent_term when a key-value pair contains a magic reference that is referred more than once. Magic references are NIF resources or returned from BIFs like ets:new, atomics:new. The bug could cause the memory of the referred resource to be prematurely deallocated. The bug also apply to magic references in message passing on a runtime built with configure option --enable-sharing-preserving. Bug exist for 64-bit since OTP-24.0 and for 32-bit since OTP-20.0. * erts: Fixed a crash when inspecting the stack trace of an exception raised at a very high line number. This bug was introduced in OTP 24. * erts: The following two bugs that caused erlang:demonitor() to behave erroneously have been fixed. The bugs were only triggered if the monitor that was removed by demonitor() had previously been created simultaneously as a monitor and as an alias.- Changes for 24.1.2: * kernel: The undocumented DNS encode/decode module inet_dns has been cleaned up to handle the difference between "symbolic" and "raw" records in a more consistent manner. PR-5145/OTP-17584 introduced a change that contributed to an already existing confusion, which this correction should remedy. * erts: The python scripts that existed in erts/lib_src/yielding_c_fun/lib/tiny_regex_c/scripts had a license that was incompatible with Erlang/OTP's license. This ticket removes these scripts that were not used by us. * ssl: Before that change, TLS downgrade could occasionally fail when data intended for downgraded socket were delivered together with CLOSE_NOTIFY alert to ssl app. * ssl: Avoid re-encoding of decoded certificates. This could cause unexpected failures as some subtle encoding errors can be tolerated when decoding but hence creating another sequence of bytes if the decoded value is re-encoded. * ssl: Fix possible process leak when the process doing ssl:transport_accept dies before initiating the TLS handshake. * ssl: Fix dtls memory leak, the replay window code was broken. * public_key: Avoid re-encoding of decoded certificates. This could cause unexpected failures as some subtle encoding errors can be tolerated when decoding but hence creating another sequence of bytes if the decoded value is re-encoded. * crypto: Fixed minor memory leak at crypto module purge. * crypto: Fix possible inconsistency in fips mode when linking with some cryptolibs. - Changes for 24.1.1: * kernel: Add more info about the socket 'type' ('socket' or 'port') for the DOWN message when monitoring sockets. * stdlib: Fixed a bug that could cause a child to become orphaned when a supervisor died between unlinking and sending the shutdown signal to this child. There was also a possibility for erratic supervisor reports caused by a race between a supervisor shutting down a child and that child exiting by itself at the same time. * erts: A race between an exiting port and handling of simultaneously received signals to that port could cause a runtime system crash. The effected signals are link, monitor and demonitor. On OTP 22 a similiar race could also cause a memory leak when receiving an unlink signal. * erts: A user defined tag on a monitor message could cause the runtime system to crash when the monitor message had been received. * erts: A call to erlang:demonitor(Ref) where the reference Ref referred to an active alias, but not an active monitor, caused the runtime system to crash. * erts: The message queue of a process entered an inconsistent state after a receive expression with an invalid timeout value was executed. If the exception raised due to the invalid timeout value was caught, the following receive expression executed by the process could fail to match messages already present in the message queue. On OTP 24 this could also cause the whole runtime system to crash. * erts: Sending a Port ! {PortOwner, close} signal from a process other than the port owner could erroneously trigger a badsig exit signal being sent to the port owner process even though the correct PortOwner had been passed in the signal. * snmp: Sockets are monitored, but the handling of the 'DOWN' message expected a new style socket ('socket'), old style (port) was not handled. - Changes for 24.1: * kernel: The extended error information has been corrected and improved for the following BIFs: binary_to_existing_atom/2, list_to_existing_atom/1, erlang:send_after/{3,4}, and erlang:start_timer/{3,4}. * kernel: Fixed rare bug that could cause net_kernel process to hang for ever. Have seen to happen with massive number of TLS connections while remote nodes are restarting. Bug exists since OTP-22.0. * kernel: Improve handling of closed sockets for inet:info/1. * kernel: This change fixes a performance problem introduced in pull-request #2675. Pull-request #2675 made so the system tried to start children of already started applications which is unnecessary. This change fixes this performance problem. * kernel: Fix code:get_doc/1 to not crash when module is located in an escript. * kernel: Parsing of the result value in the native DNS resolver has been made more defensive against incorrect results. * kernel: A bug in the option handling for the legacy socket adaptor, that is; when using inet_backend = socket, has been fixed. Now socket options are set before the bind() call so options regarding, for example address reuse have the desired effect. * kernel: inet:ntoa/1 has been fixed to not accept invalid numerical addresses. * kernel: Parsing of DNS records has been improved for records of known types to not accept and present malformed ones in raw format. * kernel: The ip_mreq() type for the {ip,add_membership} and {ip,drop_membership} socket options has been corrected to have an interface field instead of, incorrectly, an address field. * kernel: Add simple utility function to display existing sockets i the erlang shell (socket:i/0). * kernel: gen_udp can now be configured to use the socket inet- backend (in the same way as gen_tcp). * kernel: Functions erlang:set_cookie(Cookie) and erlang:get_cookie(Node) have been added for completeness and to facilitate configuring distributed nodes with different cookies. The documentation regarding distribution cookies has been improved to be less vague. * kernel: A workaround has been implemented for Linux's quirky behaviour to not adjust the source IP address when connecting a connected (reconnecing) UDP socket. The workaround is to, on Linux, always dissolve any connection before connecting an UDP socket. * kernel: Documented our recommendation against opening NFS- mounted files, FIFOs, devices, and similar using file:open/2. * debugger: Improve record handling, print known records with record syntax. * observer: Atoms with Unicode code points greater than 255 (for example Greek or Cyrillic characters) would not be displayed correctly by crashdump_viewer. * observer: Fix the crashdump_viewer to be able to parse monitor_node/2 monitors correctly. * observer: Observer now has a sectiion for new socket. * observer: Added a trace all button to the trace window. * parsetools: Fix a bug in Leex which caused the Erlang Compiler to generate warnings. * parsetools: Fix a bug in Yecc which caused the Erlang Compiler to generate warnings. * mnesia: Fixed that index keys was deleted for set tables when mnesia:delete_object/1 tried to delete a non-existing record. * mnesia: Optimized table loading and added max_transfer_size configuration parameter. * stdlib: Fix io:format with ~p to no longer interpret floats as printable characters. * stdlib: Fix specs for base64 encode/decode functions to also include 0. * stdlib: The failing call io:format("~p\n") would result in a warning for line number 0 instead of the correct line and column numbers. This has been corrected, and all warnings for failing calls to io:format() has been rephrased to make it clearer exactly what the problem is. * stdlib: When the options warn_missing_spec and export_all were given, there would only be warnings for missing specs for functions that had been explicitly exported using an -export attribute. * stdlib: Calling c:ls/1 with an atom whose contents is the the name of a file (as opposed to a directory) would crash. * stdlib: The MODULE and MODULE_STRING macros would always appear to be defined (when tested by -ifdef), even though no -module() declaration had been seen yet. Changed so that -ifdef ?MODULE. will not consider ?MODULE defined if -module() has not been previously seen. * stdlib: Fix bug with rendering of missing types and callbacks in shell_docs. * stdlib: When the deterministic option was given to the compiler, the ?FILE macro would be expanded to full path of the source file before the first include directive and to base part of the filename after include directive. * stdlib: Fixed broken win32reg:delete_key and fixed win32reg:value for default value. * stdlib: Fixed error information for the call maps:get(some_key, [#]{}). * stdlib: Most output functions in the io module now print extra error information when provided with invalid arguments. The functions are: io:format, io:fwrite, io:put_chars, io:nl and io:write. * stdlib: EEP-54 (Provide more information about errors) now includes two new return values for the format_error callback, general and reason. Multi-line error descriptions returned from a format_error callback are now correctly indented. The documentation for erl_error, error/3 and Errors and Error Handling in the Erlang Reference Manual have been extended. * stdlib: In the documentation for the lists module, it has been clarified that predicate funs must return a boolean. * stdlib: The documentation for c:c/1, c:c/2, and c:c/3 has been clarified. * tools: The cover tool would not work on modules compiled with the tuple_calls option. * common_test: Float allowed as multiply_timetraps parameter. * common_test: Remove usage of legacy API macro and functions. * erts: Atoms with Unicode code points greater than 255 (for example Greek or Cyrillic characters) would not be displayed correctly by crashdump_viewer. * erts: Fix rare minor memory leak related to jit code loading. * erts: The extended error information has been corrected and improved for the following BIFs: binary_to_existing_atom/2, list_to_existing_atom/1, erlang:send_after/{3,4}, and erlang:start_timer/{3,4}. * erts: Fix bug provoked when building with gcc 10 and link time optimization (-flto), causing Erlang compiler to crash. Bug exists since OTP-24.0. * erts: Corrected bugs where builds were not reducible even when the deterministic option was given. In particular, modules with map literals with more than 32 elements could cause this problem. As part of this fix, the term_to_binary BIF now accepts the option deterministic. * erts: After an exception has been caught in a process, the stack trace would be kept in the process longer than necessary. * erts: Fix rare race bug in memory management of distribution entries. Have been seen to cause VM crash when massive number of repeated concurrent failing connection attempts. * erts: The configure test for --disable-esock-socket-registry has been corrected so disabling now works. * erts: init:stop() no longer unloads loaded code before terminating the runtime system. On systems with slow CPUs (such as Raspberry PI Zero), that can significantly speed up termination of the runtime system. * erts: Fixed match specifications that use maps in either the guard or the body to work properly. With this fix both keys and values in maps can be expressions. Various other crashes and bugs when using maps in match specifications have also been fixed. * erts: Parsing of the result value in the native DNS resolver has been made more defensive against incorrect results. * erts: When binary_to_term/2 failed, the extended error information would always blame the second argument even if the actual error was in the first argument. * erts: On 32-bit computers, binary_to_term/1,2 is now more resilient against corrupted binaries containing maps in the external format. * erts: A call to process_info(Pid, status) could erroneously report the status running when it should have reported waiting. This occurred when the calling process was executing on a higher priority than the process being inspected. This bug has been present since OTP 21.0 (erts version 10.0). * erts: Optimize memory usage of erts internal processes used during code loading/purging by hibernating them after a long time of inactivity. * erts: Add the type erlang:stacktrace/0. * erts: The arity argument of error/2,3 can now be none to indicate that the calling functions arity should be used. * erts: Optimize match spec compiler for immediate (single word) constant terms. * erts: Functions erlang:set_cookie(Cookie) and erlang:get_cookie(Node) have been added for completeness and to facilitate configuring distributed nodes with different cookies. The documentation regarding distribution cookies has been improved to be less vague. * erts: A workaround has been implemented for Linux's quirky behaviour to not adjust the source IP address when connecting a connected (reconnecing) UDP socket. The workaround is to, on Linux, always dissolve any connection before connecting an UDP socket. * erts: The internal documentation for how to use Yielding C Fun (YCF) has been updated to contain text about best practices for using YCF for ERTS. * erts: Optimize garbage collection for processes with large number of binaries, funs and/or external pids/ports/refs. * erl_docgen: Fix codeinclude tags to work as part of reference manual documentation. * erl_docgen: Fix creation of link elements with anchors in EEP-48 style documentation. * dialyzer: Do not crash if a PLT file no longer exists. * dialyzer: Fix bug in erl_types related to maps. * dialyzer: Fix bugs in erl_types regarding improper lists. * dialyzer: The underspecs and overspecs options will now generate correct warnings for misused opaque types. * eunit: In an eunit test, when a test case times out, include a stacktrace. * snmp: It is now possible to configure the built-in net-if processes (both agent and manager) to use the new (gen_udp-) option 'inet_backend'. * asn1: A parameterized type with a SEQUENCE with extension ("...") made the compiler backend to crash. The previous fix for this in GH-4514 was not complete. * wx: Fix crash when closing an application. * wx: Some functions with overloaded color arguments could not be used. For example the copy constructor wxTextAttr:new(TextAttr) did not work. * wx: Added the Microsoft Edge WebView loader dll to the installer on windows. * wx: Handle specific Mac gui application events. * erl_interface: erl_call now prints an error when the arguments cannot be parsed. * erl_interface: The ei API for decoding/encoding terms is not fully 64-bit compatible since terms that have a representation on the external term format larger than 2 GB cannot be handled. * edoc: Fix broken documentation link in edoc_extract:file/4. * ssl: Fix Makefile dependency generation to work no matter what the ERL_TOP folder is called. * ssl: If trying to downgrade a TLS-1.3 connection to a plain TCP connection, possible TLS-1.3 session ticket messages will be ignored in the "downgrade" state while waiting for the close notify alert. * ssl: Corrected error handling to correctly generate an insufficient security alert when there are no suitable groups that can be negotiated in TLS-1.3 instead of crashing resulting in an internal error alert. * ssl: Properly handle default session data storage. When a client tries to reuse an expired session the default server storage handling would crash loosing other session data. This would cause a error report and possible loss of abbreviated handshakes. * ssl: Add support for RSA-PSS-PSS signatures and signature_algorithms_cert in TLS-1.2. This is a TLS-1.3 RFC requirement to backport this functionality. * ssl: Use inet:monitor/1 to monitor listen-sockets so that we are compatible with the new socket backend for gen_tcp. * ssl: Enhance ssl:prf/4 handling and testing * ssl: Enhanced cipher suite filtering functionality, making sure TLS-1.3 and TLS-1.2 cipher suites can be supported correctly together even when TLS-1.2 anonymous ciphers are included. * ssl: Enhance gracefulness especially in TLS-1.3 * os_mon: On a Mac with Apple Silicon, memsup:get_os_wordsize/0 would return 32 instead of 64. * ssh: Fixed that a slow start (>30s) of a client subsystem could cause a log entry with the password. * ssh: Fixed an error when running as an sftp server and a client requests a directory contents listing. The fix is to handle the error code {error, eacces} as {error, enoent} in the ssh_sftpd:get_attrs/5 internal function; that is, just skip it. * ssh: The "Key exchange failed" Info Report is now more informative. * inets: Before this change hrefs in dir listing page contained percentage encoded forward slashes which did not work properly with httpd. * inets: Restored HTTP headers handling in inets/mod_esi. * inets: inets/httpd dir listing icons and other improvements * inets: httpc: Improve performance by removing redundant URI handling * compiler: If a parse transform raised an exception using throw/1 or exit/1, the compiler would report that as an internal compiler error, which would be confusing. Amended to report that the parse transform failed. * compiler: The failing call io:format("~p\n") would result in a warning for line number 0 instead of the correct line and column numbers. This has been corrected, and all warnings for failing calls to io:format() has been rephrased to make it clearer exactly what the problem is. * compiler: When the options warn_missing_spec and export_all were given, there would only be warnings for missing specs for functions that had been explicitly exported using an -export attribute. * compiler: In rare circumstances, the compiler could emit an incorrect warning for a term that was constructed but never used. * compiler: Corrected bugs where builds were not reducible even when the deterministic option was given. In particular, modules with map literals with more than 32 elements could cause this problem. As part of this fix, the term_to_binary BIF now accepts the option deterministic. * compiler: The MODULE and MODULE_STRING macros would always appear to be defined (when tested by -ifdef), even though no - module() declaration had been seen yet. Changed so that -ifdef ?MODULE. will not consider ?MODULE defined if -module() has not been previously seen. * compiler: In a guard, not (X =:= true) would incorrectly evaluate to false for non-boolean values of X. * compiler: When the deterministic option was given to the compiler, the ?FILE macro would be expanded to full path of the source file before the first include directive and to base part of the filename after include directive. * public_key: public_key:pkix_sign/2 now honors the salt length from the provided input parameters. Earlier this could result in incorrect signatures if not using recommended defaults. * public_key: When decoding an 'ECPrivateKey' unwrap the private key. For more precise information see RFC 8410, section 7. * runtime_tools: Observer now has a sectiion for new socket. * runtime_tools: The dbg docs have been expanded to include the meaning of all the function name acronyms. * megaco: It is now possible to configure the built-in transports (megaco_tcp and megaco udp) to use the new (gen_udp- and gen_tcp-) option 'inet_backend'. * crypto: Fix bug in crypto:ensure_engine_unloaded. Also fixed minor memory leak related to engine unloading. * crypto: Fixes that FIPS enable and disable (or vice versa) on Windows sometimes leads to core dump at the time of process exit. * crypto: Disable fips if cryptolib < 1.0.1 and OTP/crypto is configured with --enable-fips If not, there could be compiling or loading problems with antique OpenSSL versions. * jinterface: Fixed rare race bug that could cause NullPointerException on local close of connection. - Changes for 24.0.6: * erts: A call to the process_info() BIF could end up hanging for ever due to a bug introduced when the new selective receive optimization was introduced in OTP 24.0. Note that this bug only effects process_info(). * erts: Fix buffer overrun problem in the tty driver. The problem happens on some platforms when using the CTRL+R functionality of newshell with very long strings in the history. * erts: Fix race-condition that could cause a crash when tracing scheduling or garbage collections on a process that was running on a dirty scheduler. * erts: Fix rare bug where re:run would crash/return invalid results when given a subbinary as subject. This bug has existed since Erlang/OTP 20.0. * erts: binary_to_term/1,2 is now more resilient against corrupted binaries containing maps in the external format.- Added hardening to systemd service(s) (bsc#1181400). Modified: * epmd.service- Changes for 24.0.5: * kernel: For gen_tcp:connect/3,4 it is possible to specify a specific source port, which should be enough to bind the socket to an address with that port before connecting. Unfortunately that feature was lost in OTP-17216 that made it mandatory to specify the source address to get an address binding, and ignored a specified source port if no source address was specified. That bug has now been corrected. - Changes for 24.0.4: * stdlib: Fix a bug that could cause a crash when formatting tuples using the control sequences p or P and limiting the output with the option chars_limit. * ssl: Handle cross-signed root certificates when old root expired as reported in GH-4877. * ssl: The signature selection algorithm has been changed to also verify if the client supports signatures using the elliptic curve of the server's public/private key pair. This change fixes #4958. * ssl: Slight optimization of certificate decoding. * public_key: Handle cross-signed root certificates when old root expired as reported in GH-4877. * common_test: An incoming NETCONF notification received before a call to ct_netconfc:create_subscription/* caused the connection process to fail with badarg. Unexpected notifications are now logged in the same way as other unexpected messages. * common_test: Add 'receiver' option to ct_netconfc To allow a destination for incoming NETCONF notifications to be specified at sessions creation. Previously, a caller of create_subscription/* became the destination, but RFC 5277 create-subscription is no longer the only way in which NETCONF notifications can be ordered.- Fix more directories not owned by the package (boo#1187546)- Changes for 24.0.3: * erts: A call to erlang:cancel_timer(_, [{info, false}]) could cause the calling process to block forever in the call. Note that only the synchronous version of the call (that is, the async option is false) in combination with the info option set to false was effected by this bug. * erts: Microstate accounting (msacc) and os:perf_counter() unintentionally used system time instead of monotonic time for time measurements on a lot of systems. These systems were all non x86/x86_64 systems or x86/x86_64 systems without a reliable and constant rdtsc instruction. The lock counting (lcnt) built runtime system also unintentionally used system time instead of monotonic time for time measurements on all systems. * erts: Simultaneous calls to erlang:system_flag(schedulers_online, _) could cause callers to end up in a suspended state forever. * dialyzer: Do not expose line number 0 in messages if there are other locations to use. * dialyzer: In rare circumstances, Dialyzer could crash analyzing code with a list comprehension whose value was ignored. (Thanks to Ulf Wiger for reporting this bug.) * ssh: Filter out sensitive data (passwords etc) from progress reports and supervisor reports. * inets: Improved user input handling in inets/mod_esi preventing unnecessary atom creation. * compiler: A compiler optimization pass could crash when given odd but legal code using throw/1. - Changes for 24.0.2: * kernel: Fix a race condition in Global. * kernel: After a node restart with init:restart/0,1, the module socket was not usable because supporting tables had been cleared and not re-initialized. This has now been fixed. Handling of the "." domain as a search domain was incorrect and caused a crash in the DNS resolver inet_res, which has now been fixed. * kernel: Handling of combinations of the fd option and binding to an address has been corrected, especially for the local address family. * kernel: Bug fixes and code cleanup for the new socket implementation, such as: Assertions on the result of demonitoring has been added in the NIF code, where appropriate. Internal state handling for socket close in the NIF code has been reviewed. Looping over close() for EINTR in the NIF code has been removed, since it is strongly discouraged on Linux and Posix is not clear about if it is allowed. The inet_backend temporary socket option for legacy gen_tcp sockets has been documented. The return value from net:getaddrinfo/2 has been corrected: the protocol field is now an atom(), instead of, incorrectly, list(atom()). The documentation has also been corrected about this return type. Deferred close of a socket:sendfile/* file was broken and has been corrected. Some debug code, not enabled by default, in the socket NIF has been corrected to not accidentally core dump for debug printouts of more or less innocent events. * stdlib: Fix a bug that could cause a loop when formatting terms using the control sequences p or P and limiting the output with the option chars_limit. * erts: Not yet handled alias-message signals in the signal queue at the time when a garbage collection was performed could cause a memory corruption which in turn could result in a crash of the runtime system. This bug was introduced in OTP 24.0. * erts: Fixed bug when using external pids/ports in keys of big maps (> 32). Could cause runtime crash. Bug exists since OTP 24.0. * erts: After a node restart with init:restart/0,1, the module socket was not usable because supporting tables had been cleared and not re-initialized. This has now been fixed. Handling of the "." domain as a search domain was incorrect and caused a crash in the DNS resolver inet_res, which has now been fixed. * erts: A call to port_command() could cause a scheduler to end up in an eternal loop if the port was busy and the calling process had incoming signals at the time of the call. This bug was introduced in OTP 23.3.2 (ERTS version 11.2.1), OTP 22.3.4.18 (ERTS version 10.7.2.10), and OTP 21.3.8.23 (ERTS version 10.3.5.18). * erts: Bug fixes and code cleanup for the new socket implementation, such as: Assertions on the result of demonitoring has been added in the NIF code, where appropriate. Internal state handling for socket close in the NIF code has been reviewed. Looping over close() for EINTR in the NIF code has been removed, since it is strongly discouraged on Linux and Posix is not clear about if it is allowed. The inet_backend temporary socket option for legacy gen_tcp sockets has been documented. The return value from net:getaddrinfo/2 has been corrected: the protocol field is now an atom(), instead of, incorrectly, list(atom()). The documentation has also been corrected about this return type. Deferred close of a socket:sendfile/* file was broken and has been corrected. Some debug code, not enabled by default, in the socket NIF has been corrected to not accidentally core dump for debug printouts of more or less innocent events. * erts: Dirty execution of a process in combination with an unlink signal from a port to the process could cause the signal queue of the process to enter into an inconsistent state. The result of the inconsistency typically caused a crash of the runtime system. This bug was introduced in OTP 23.3 (ERTS version 11.2). * erl_docgen: Fix links generated in specs to types in other applications to point to the correct place. This bug was introduced in Erlang/OTP 24.0. * ssl: Fix cache invalidation problem for CA certs provided by the cacertfile option. * ssh: Avoid an extra blank line in the ssh known_hosts file * compiler: Fixed a bug that could cause after blocks to be ignored when erlang:raise/3 was used in a catch block. * compiler: Fixed a bug in the validation pass that could cause it to reject valid code. * crypto: EC keys are now zero-padded to the expected length if needed.- Use sysusers-tools to provide epmd user - Fix directories not owned by the package (boo#1187546)- Install RPM macros file to %{_rpmmacrodir} (boo#1185667)- Changes for 24.0.1: * erl_interface: Commit of generated configure script. * wx: Fix build problems when wxWidgets are built with -enable- std. * wx: Commit of generated configure script. * crypto: Removed a risk for coredump. * crypto: Fixed and documented the DED_LDFLAGS_CONFTEST configuration variable in $ERL_TOP/HOWTO/INSTALL.md. * crypto: Commit of generated configure script. * common_test: Commit of generated configure script. * ssh: Add missing known_hosts and authorized_keys file types to ssh_file:decode/2 and ssh_file:encode/2. * erts: Commit of generated configure script. * snmp: Commit of generated configure script. * megaco: Commit of generated configure script. * odbc: Commit of generated configure script.- Version 24.0: - Highlights compiler: * The compiler will now inline funs that are used only once immediately after their definition. * Compiler warnings and errors now include column numbers in addition to line numbers. * Variables bound between the keywords 'try' and 'of' can now be used in the clauses following the 'of' keyword (that is, in the success case when no exception was raised). * Generators in list and binary comprehensions will now raise a {bad_generator,Generator} exception if the generator has an incorrect type Similarly, when a filter does not evaluate to a boolean, a {bad_filter,Filter} exception will be raised. * Warnings for expressions whose result was ignored that could be suppressed by using the anonymous variable '_' can now be suppressed with a variable beginning with '_'. * Selective receive optimization will now be applied much more often. The new recv_opt_info compile flag can be used to print diagnostics relating to this optimization. You can read more about the selective receive optimization in the Efficiency Guide. - erts, kernel, stdlib: * hex encoding and decoding functions added in the binary module * The BeamAsm JIT-compiler has been added to Erlang/OTP and will give a significant performance boost for many applications. The JIT-compiler is enabled by default on most x86 64-bit platforms that have a C++ compiler that can compile C++17. To verify that a JIT enabled emulator is running you can use erlang:system_info(emu_flavor). * A compatibility adaptor for gen_tcp to use the new socket API has been implemented (gen_tcp_socket). * Extended error information for failing BIF calls as proposed in EEP 54 has been implemented. * Process aliases as outlined by EEP 53 has been introduced. * Implementation of EEP 56 in supervisor. It adds the concept of significant children as well as the auto_shutdown supervisor flag. See the supervisor manual page for more information. - ftp: * Add support for FTPES (explicit FTP over TLS). - ssl: * Make TLS handshakes in Erlang distribution concurrent. * TLS connections now support EdDSA certificates. - wx: * The application has been completely rewritten in order to use wxWidgets version 3 as its base. * Added support for wxWebView. - edoc: * EDoc is now capable of emitting EEP-48 doc chunks. This means that, with some configuration, community projects can now provide documentation for shell_docs the same way that OTP libraries did since OTP 23.0.- Pack doc/chunks into %{_libdir} (boo#1184492)- Use wxWidgets < 3.1 (boo#1180488)- Changes for 23.2.2: * crypto: Fixed usage of AC_CONFIG_AUX_DIRS() macros in configure script sources. * odbc: Fixed usage of AC_CONFIG_AUX_DIRS() macros in configure script sources. * snmp: Fixed usage of AC_CONFIG_AUX_DIRS() macros in configure script sources. * erts: The suspend_process() and resume_process() BIFs did not check their arguments properly which could cause an emulator crash. * erts: The runtime system would get into an infinite loop if the runtime system was started with more than 1023 file descriptors already open. * megaco: Fixed usage of AC_CONFIG_AUX_DIRS() macros in configure script sources. * erl_interface: Integers outside of the range [-(1 bsl 32) - 1, (1 bsl 32) -1] were previously intended to be printed in an internal bignum format by ei_print_term() and ei_s_print_term(). Unfortunately the implementation has been buggy since OTP R13B02 and since then produced results with random content which also could crash the calling program. This fix replaces the printing of the internal format with printing in hexadecimal form and extend the range for printing in decimal form. Currently integers in the range [-(1 bsl 64), (1 bsl 64)] are printed in decimal form and integers outside of this range in Erlang hexadecimal form. * erl_interface: The ei API for decoding/encoding terms is not fully 64-bit compatible since terms that have a representation on the external term format larger than 2 GB cannot be handled. * ssl: Fix CVE-2020-35733 this only affects ssl-10.2 (OTP-23.2). This vulnerability could enable a man in the middle attack using a fake chain to a known trusted ROOT. Also limits alternative chain handling, for handling of possibly extraneous certs, to improve memory management. * ssl: Add support for AES CCM based cipher suites defined in RFC 7251 Also Correct cipher suite name conversion to OpenSSL names. A few names where corrected earlier in OTP-16267 For backwards compatible reasons we support usage of openSSL names for cipher suites. Mostly anonymous suites names where incorrect, but also some legacy suites. - Changes for 23.2.1: * erts: Fix emulator crash when sending small bit-strings over Erlang distribution while the connection is being setup. The fault was introduced in OTP-23.0 - Changes for 23.2: * erl_docgen: Fix links in titles to github and anchors to work. * erl_docgen: Fix some typing errors on variable names in documentation examples. * mnesia: Avoid potential performance issue, if the input queue to mnesia_tm is long. * crypto: Build the supported curves cache in the NIF when crypto is loaded, no matter how it is loaded. This prevents a possible problem with different processes starting the crypto application concurrently. * crypto: It is now possible to build with crypto and openssl gprof-enabled and statically link them into the VM. * crypto: Fixed performance loss in HMAC when using older OpenSSL due to mutex issues. A workaround is implemented to allow fallback from using the EVP API for HMAC operations. On some architectures this may improve the performance, especially with old OpenSSL versions. This fallback to low-level functions is always enabled for openssl versions before 1.0.2. * kernel: The apply call's in logger.hrl are now called with erlang prefix to avoid clashed with local apply/3 functions. * kernel: Fix memory leak in pg. * kernel: Fix crash in logger_proxy due to stray gen_server:call replies not being handled. The stray replies come when logger is under heavy load and the flow control mechanism is reaching its limit. * kernel: Fixed a bug in erl_epmd:names() that caused it to return the illegal return value noport instead of {error, Reason} where Reason is the actual error reason. This bug also propagated to net_adm:names(). This bug was introduced in kernel version 7.1 (OTP 23.1). * kernel: Add export of some resolver documented types. * kernel: Add configurable retry timeout for resolver lookups. * kernel: gen_server:multi_call() has been optimized in the special case of only calling the local node with timeout set to infinity. * public_key: Corrected dialyzer spec for pkix_path_validation/3 * snmp: If an attempt was made to send a v1 trap on a IPv6 transport this could cause a master agent crash (if the agent was *not* multi-threaded). * snmp: The deprecation info for a couple of the deprecated MIB compiler functions where incorrect. Referred to functions in the 'snmpa' module instead of 'snmpc'. * snmp: Make it possible for the agent to configure separate transports (sockets) for request-responder and trap-sender. * snmp: The mib server cache handling has been improved. First, the default gclimit has been changed from 100 to infinity (to ensure the size is as small as possible). Also, the method of removing old elements has been optimized. * snmp: It is now possible to configure the agent in such a way that the order of outgoing notifications are processed in order in the agent. What happens after the notification message has left the agent (been sent) is of course still out of our control. * snmp: Improve handling of the udp_error message. Basically an improved error/warning message. * wx: Add popup menu callback to wxTaskBarIcon:new/1. * dialyzer: Clarify warning option -Wunmatched_returns in dialyzer(3). * tools: Correct the Xref analysis exports_not_used to not report internally generated behaviour_info/1. * syntax_tools: In the syntax_tools application, the igor module and all functions in erl_tidy except file/2 have been deprecated. * compiler: Several minor compiler bugs have been fixed: Constructing a binary with a list as a size of a binary segment could generate a BEAM file that could not be loaded. When matching a binary segment of type float and ignoring the matched out value, the match would always succeed, even if the size was invalid or the value of the float was NaN or some other non-numeric float value. Attempting to construct an invalid external fun (e.g. fun m:f:bad) is supposed to raise a 'badarg' exception, but if the value was never used, no exception would be raised. * compiler: Fixed multiple bugs in the validator that could cause it to reject valid code. * compiler: The compiler could crash when a binary comprehension had a generator that depended on another generator. * compiler: Fixed a bug in the type optimization pass that could yield incorrect values or cause the wrong clauses to be executed. * erts: Fixed bug which could cause VM crash when a NIF is loaded at the same time as the Erlang implementation of the NIF is called. Bug exists since OTP 23.0. * erts: Fixed enif_make_map_* functions in debug build when given environment from enif_alloc_env. * erts: Fixed broken configuration option --disable-pie. * erts: Fixed rare distribution bug in race between received signal (link/monitor/spawn_request/spawn_reply) and disconnection. Symptom: VM crash. Since: OTP 21.0. * erts: Fixed a performance issue when extremely many items were stored in the process dictionary. (Fixing this bug also eliminates a compiler warning emitted by the latest version of Clang.) * erts: Remove -ftree-copyrename from flags passed to compiler when building erts. The flag is not used by modern gcc's and is not supported by clang. * erts: Modules using complicated nested binary comprehensions could fail to load. * erts: Fixed a race in file:read_file/1 were an incomplete file could be returned if another OS process swapped the file out while reading. * erts: The call list_to_integer("10", true) would return 4 instead of raising an exception. Certain other atoms would also be interpreted as a number base. * erts: On macOS 11 (Big Sur), erl would not start if the maximum number of file descriptors were unlimited (ulimit -n unlimited). * erts: Add manifest to all executables and dynamic libraries. * xmerl: Corrected namespace and expanded name in the old dom backend example module. * xmerl: Corrected a bug that in some cases didn't allow unresolved references when skip_external_dtd option used. * ssh: Fixed problems in the ssh cli/shell handling. Most important are: 1) the ssh:shell function did sometimes cause the input to be echoed twice, 2) the ssh:shell function didn't transfer the LANG and LC_ALL shell variables to the connected server which sometimes made Unicode handling erroneous, 3) Unicode was not always transferred correctly to and from the peer. * ssh: The SSH protocol message SSH_MSG_DISCONNECT was sometimes sent instead of SSH_MSG_CHANNEL_FAILURE * ssh: The ssh_cli module now always sends the exit-status to connected clients so they can use that to check for successful command execution. * ssh: A new option pk_check_user enables checking of the client's user name in the server when doing public key authentication. * stdlib: This change fixes the handling of deep lists in the path component when using uri_string:recompose/1. * stdlib: Fix shell_docs to clear shell decorations (bold/underline) when paginating output. Fix various small renderings issues when integrating shell_docs with edoc. * stdlib: Improved the API and documentation of the uri_string module. Added a new chapter to the Users Guide about Uniform Resource Identifiers and their handling with the new API. Added two new API functions: uri_string:allowed_characters/0 and uri_string:percent_decode/1. This change has been marked as potentially incompatible as uri_string:normalize/2 used to decode percent-encoded character triplets that corresponded to characters not in the reserved set. After this change, uri_string:normalize/2 will only decode those percent-encoded triplets that correspond to characters in the unreserved set (ALPHA / DIGIT / "-" / "." / "_" / "~"). *** POTENTIAL INCOMPATIBILITY *** * stdlib: The shell_docs module has been expanded with the possibility to configure unicode, ansi and column size for the rendered text. * megaco: Empty statistics descriptor (now) allowed in both encode and decode for version 3. * ssl: SSL's Erlang Distribution Protocol modules inet_tls_dist and inet6_tls_dist lacked a callback function, so the start flag "-dist_listen false" did not work, which has now been fixed. * ssl: Correct OpenSSL names for newer cipher suites using DHE in their name that accidentally got the wrong value when fixing other older names using EDH instead. * ssl: This change improves the handling of DTLS listening dockets, making it possible to open multiple listeners on the same port with different IP addresses. * ssl: Fix a bug that causes cross-build failure. This change excludes the ssl.d dependency file from the source tarballs. * ssl: This change fixes ssl:peername/1 when called on a DTLS client socket. * ssl: Retain emulation of active once on a closed socket to behave as before 23.1 * ssl: Corrected server session cache entry deletion pre TLS-1.3. May increase session reuse. * ssl: Handle extraneous certs in certificate chains as well as chains that are incomplete but can be reconstructed or unordered chains. The cert and certfile options will now accept a list of certificates so that the user may specify the chain explicitly. Also, the default value of the depth option has been increased to allow longer chains by default. * ssl: This change implements optional NSS-style keylog in ssl:connection_information/2 for debugging purposes. The keylog contains various TLS secrets that can be loaded in Wireshark to decrypt TLS packets. * ssl: Use new gen_statem feature of changing callback mode to improve code maintainability. * ssl: The handling of Service Name Indication has been aligned with RFC8446. * ssl: Add explicit session reuse option to TLS clients for pre TLS-1.3 sessions. Also, add documentation to Users Guide for such sessions. * inets: Fix an issue about HTML-escaped filename in inets. * common_test: Add behaviour for test suites - Changes for 23.1.5: * ssh: An ssh-client can take an accepted socket from a listening socket and do an ssh:connect/2 on it. Multiple clients on sockets accepted from the same listening socket had stopped working. This is corrected now. - Changes for 23.1.4: * ssh: The inet option raw was not passed on from the ssh option list to inet.- Changes for 23.1.3: * erts: Fixed a crash when exceptions were thrown during call time tracing. * ssh: A supervisor sub-tree could be left if the connection handler process is brutally killed. This will make the max_sessions checking option to count the existing sessions erroneously and could finally block further sessions. - Changes for 23.1.2: * compiler: Fixed a bug in the boolean optimization pass that caused the compiler to confuse different clauses. * erts: Fixed bugs causing issues when enabling the ERTS internal allocators on a system built with the undocumented and unsupported SMALL_MEMORY feature. * erts: The inet driver used to use 16 as maximum elements in an I/O vector passed to writev() (and WSASend() on Windows). When the data to send contained lots of elements, this caused a performance degradation since repeated calls to writev() had to be made to a much larger extent. The inet driver now looks up actual maximum amount of elements that can be used on the system, instead of just assuming 16. On most systems this will result in a maximum amount of I/O vector elements of 1024. As of OTP 23.0 the term encoding of signals to send over the distribution are encoded into I/O vectors of buffers instead of into a single buffer. Reference counted binaries are referred to directly from the I/O vector instead of being copied into the single buffer. That is, Erlang signals containing huge amounts of reference counted binaries was effected by this performance degradation. * erts: In the distributed case, a faulty reply option in a call to the spawn_request() BIF erroneously caused a badarg exception instead of a badopt error message reply.- Changes for 23.1.1: * erts: inet:setopts([{active,once}]) wakes up IO polling thread unnecessarily, leading to lock contention and visibly higher CPU utilization. * erts: Two bugs in the ERTS internal thread wakeup functionality have been fixed. These bugs mainly hit when all threads in the system tried to go to sleep. When the bugs were triggered, certain operations were delayed until a thread woke up due to some other reason. Most important operations effected were code loading, persistent term updates, and memory deallocation. * erts: Fixed bug in ets:select_replace/2 on compressed tables that could produce faulty results or VM crash. Bug exists since OTP 20. * erts: When compiling Erlang/OTP on macOS using Xcode 12, the performance of the BEAM interpreter would be degraded. * erts: As of OTP 22, the allocator specific memory carrier pools were replaced by a node global carrier pool. This unfortunately caused substantial memory fragmentation in some cases due to long lived data being spread into carriers used by allocators mainly handling short lived data. A new command line argument +Mcp has been introduced with which one can enable the old behavior as well as configuring other behaviors for the carrier pools. In order to configure the old behavior, with allocator specific carrier pools for all allocators, pass +Mucp : (including the colon character) as a command line argument to erl when starting the Erlang system. The default configuration for carrier pools will be changed to +Mucp : some time in the future, but not in this patch. * os_mon: The configuration parameter memsup_improved_system_memory_data has been introduced. It can be used to modify the result returned by memsup:get_system_memory_data(). For more information see the memsup documentation. Note that the configuration parameter is intended to be removed in OTP 24 and the modified result is intended to be used as of OTP 24. * ssh: Fix decoder bug. * compiler: Fixed a performance bug that could be triggered by tuple matching in very large functions. * public_key: Fix the issue that pem_decode will crash with an invalid input. - Changes for 23.1: * kernel: A fallback has been implemented for file:sendfile when using inet_backend socket * kernel: Make default TCP distribution honour option backlog in inet_dist_listen_options. * kernel: Raw option handling for the experimental gen_tcp_socket backend was broken so that all raw options were ignored by for example gen_tcp:listen/2, a bug that now has been fixed. Reported by Jan Uhlig. * kernel: Accept fails with inet-backend socket. * kernel: Fixed various minor errors in the socket backend of gen_tcp. * kernel: Correct disk_log:truncate/1 to count the header. Also correct the documentation to state that disk_log:truncate/1 can be used with external disk logs. * kernel: Fix erl_epmd:port_please/2,3 type specs to include all possible error values. * kernel: Fix erl -erl_epmd_port to work properly. Before this fix it did not work at all. * kernel: Fix typespec for internal function erlang:seq_trace_info/1 to allow term() as returned label. This in turn fixes so that calls to seq_trace:get_token/1 can be correctly analyzer by dialyzer. * kernel: Fix erroneous double registration of processes in pg when distribution is dynamically started. * kernel: Make (use of) the socket registry optional (still enabled by default). Its now possible to build OTP with the socket registry turned off, turn it off by setting an environment variable and controlling in runtime (via function calls and arguments when creating sockets). * kernel: erl -remsh nodename no longer requires the hostname to be given when used together with dynamic nodenames. * observer: Fix graph windows flickering on windows. * mnesia: FIx mnesia delete object handling in transaction storage. In a transaction mnesia:read/1 could indicate that exiting objects did not exist after another object was deleted. * mnesia: Fixed crash during startup, which could happen if a table was deleted on another node. * stdlib: The functions digraph:in_edges/2 and digraph:out_edges/2 would return false edges if called for a vertex that had a '_' atom in its name term. * stdlib: filelib:wildcard("not-a-directory/..") should return an empty list. On Windows it returned "not-a-directory/..". * stdlib: Fix the typespec of shell_docs:render to use the correct type for an MFA. * stdlib: Fix uri_string:recompose/1 when host is present but input path is not absolute. This change prevents the recompose operation to change the top level domain of the host when the path does not start with a slash. * stdlib: The epp module would return a badly formed error term when an 'if' preprocessor directive referenced an undefined symbol. epp:format_error/1 would crash when called with the bad error term. * stdlib: lists:sublist(List, Start, Len) failed with an exception if Start > length(List) + 1 even though it is explicitly documented that "It is not an error for Start+Len to exceed the length of the list". * tools: Correct the Xref analysis locals_not_used to find functions called exclusively from on_load functions. * erts: Update the documentation of the abstract format to use ANNO instead of LINE. * erts: The emulator will no longer revert to the default number of schedulers when running under a CPU quota lower than 1 CPU. * erts: Fixed a problem with crash dumps. When a process that contained reference to literals internally created by the runtime system (such as the tuple returned by os:type/0), the literal would not be included in the crash dump and the crashdump viewer would complain about the heap being incomplete. * erts: Fix configure detection of PGO for clang. * erts: The to_erl program has been fixed to correctly interpret newline as only newline and not newline+return. This bug would cause the terminal to behave strangely when using lines longer than the terminal size. * erts: A race condition when changing process priority by calling process_flag(priority, Prio) could cause elevation of priority for a system task to be ignored. This bug hit if the system task was scheduled on the process calling process_flag() at the same time as the priority was changed. The bug is quite harmless and should hit very seldom if ever. * erts: Adjust /bin/sh to /system/bin/sh in scripts when installing on Android. * erts: In rare circumstances, when loading a BEAM file generated by an alternative code generator (not the Erlang compiler in OTP) or from handwritten or patched BEAM code, the loader could do an unsafe optimization. * erts: A memory and file descriptor leak in socket has been fixed. (When a newly opened socket that had not entered the fd into the VM's poll set (neither received, sent, accepted nor connected) was abandoned without closing (process died), after assigning a different controlling process, then a memory block and the file descriptor could be leaked.) * erts: The documentation of statistics(run_queue) erroneously stated that it returns the total length of all normal run queues when it is the total length of all normal and dirty CPU run queues that is returned. The documentation has been updated to reflect the actual behavior. * erts: Changes in order to build on the Haiku operating system. Thanks to Calvin Buckley * erts: When building the inet driver on Windows, there where many compiler warnings regarding type casting (used when calling the debug macro). This has now been resolved. * erts: Make (use of) the socket registry optional (still enabled by default). Its now possible to build OTP with the socket registry turned off, turn it off by setting an environment variable and controlling in runtime (via function calls and arguments when creating sockets). * erts: Change default filename encoding on android to UTF-8. * erts: Clarification of the format of the atom cache header used by the distribution. * erl_docgen: Repaired lost function "since" versions in the right margin of the module reference HTML documentation. * erl_docgen: Remove erlang compilation warnings and trailing whitespaces. * ftp: Avoid timing issue when setting active once on a socket that is being closed by the peer. * ftp: Avoid timing issue when setting active once on a socket that is being closed by the peer. * dialyzer: In rare circumstance, dialyzer wold crash when analyzing a list comprehension. * eunit: Fixed compiler warning. * snmp: For agent fix PrivParams for SNMPv3 USM with AES privacy, as earlier fixed for the manager in OTP_16541. * snmp: The SNMP Agent missed to re-activate datagram reception in an odd timeout case and went deaf. This bug has been fixed. * snmp: Use of deprecated functions in example 2 has been removed (no more compiler warnings). * snmp: A file descriptor leak has been plugged. When calling the reconfigure function of a mib, it opened the config file(s) but never closed them on successful read. * asn1: Changes in order to build on the Haiku operating system. Thanks to Calvin Buckley * syntax_tools: Minor documentation fix of erl_syntax:operator/1. * erl_interface: Fix erl_interface on windows to be compiled with correct flags to make internal primitives reentrant. * erl_interface: Fixed ei_get_type to set *size to zero for floats, pids, port and refs according to documentation. * erl_interface: Fix ei_connect when using a dynamic node name to force usage of distribution version 6. This bug caused erl_call - R -address to not work properly. * erl_interface: Changes in order to build on the Haiku operating system. Thanks to Calvin Buckley * erl_interface: The ei API for decoding/encoding terms is not fully 64-bit compatible since terms that have a representation on the external term format larger than 2 GB cannot be handled. * ssl: If a passive socket is created, ssl:recv/2,3 is never called and then the peer closes the socket the controlling process will no longer receive an active close message. * ssl: Data deliver with ssl:recv/2,3 could fail for when using packet mode. This has been fixed by correcting the flow control handling of passive sockets when packet mode is used. * ssl: This change fixes a potential man-in-the-middle vulnerability when the ssl client is configured to automatically handle session tickets ({session_tickets, auto}). * ssl: Fix the internal handling of options 'verify' and 'verify_fun'. This change fixes a vulnerability when setting the ssl option 'verify' to verify_peer in a continued handshake won't take any effect resulting in the acceptance of expired peer certificates. * ssl: This change fixes the handling of stateless session tickets when anti-replay is enabled. * ssl: Fix a crash due to the faulty handling of stateful session tickets received by servers expecting stateless session tickets. This change also improves the handling of faulty/invalid tickets. * ssl: Correct flow ctrl checks from OTP-16764 to work as intended. Probably will not have a noticeable affect but will make connections more well behaved under some circumstances. * ssl: Distribution over TLS could exhibit livelock-like behaviour when there is a constant stream of distribution messages. Distribution data is now chunked every 16 Mb to avoid that. * ssl: Implement the cookie extension for TLS 1.3. * ssl: Experimental OCSP client support. * ssl: TLS 1.0 -TLS-1.2 sessions tables now have a absolute max value instead of using a shrinking mechanism when reaching the limit. To avoid out of memory problems under heavy load situations. Note that this change infers that implementations of ssl_session_cache_api needs to implement the size function (introduce in OTP 19) for session reuse to be optimally utilized. * os_mon: memsup now returns the correct amount of system memory on macOS. * os_mon: Fix memsup:get_os_wordsize/0 to return the current size on aarch64. * ssh: Fixed a bug when a message to ssh-agent was divided into separate packets. * ssh: Fix a bug that could crash the cli server if a too large cli-window was requested from the client. * ssh: Increased test coverage. * ssh: A chapter about hardening the OTP SSH is added to the User's Guide. * ssh: The internal Diffie-Hellman high level API for key generation was slow in old and by OpenSSL now unsupported cryptolib versions (1.0.1 and earlier). If such a cryptolib is used anyhow, the low-level API is used internally in the crypto application. * ssh: A new timeout is defined for daemons: hello_timeout. The timeout is supposed to be used as a simple DoS attack protection. It closes an incoming TCP-connection if no valid first SSH message is received from the client within the timeout limit after the TCP initial connection setup. The initial value is 30s by compatibility reasons, but could be lowered if needed, for example in the code or in a config file. * inets: Clarify the handling of percent encoded characters in http client. * inets: fix crash for undefined port in uri. * inets: Avoid timing issue when setting active once on a socket that is being closed by the peer. * inets: Handle message body of response with 1XX status code as next http message. * inets: Fix a crash in http server when setopts is called on a socket closed by the peer. * inets: A vulnerability in the httpd module (inets application) regarding directory traversal that was introduced in OTP 22.3.1 and corrected in OTP 22.3.4.6. It was also introduced in OTP 23.0 and corrected in OTP 23.1 The vulnerability is registered as CVE-2020-25623 (boo#1177354) The vulnerability is only exposed if the http server (httpd) in the inets application is used. The vulnerability makes it possible to read arbitrary files which the Erlang system has read access to with for example a specially prepared http request. * inets: Add support of PATCH method in mod_esi. * compiler: If the update of a map with the 'Map#{Key := Value}' syntax failed, the line number in the stack backtrace could be incorrect. * compiler: Fixed a performance bug that slowed down compilation of modules with deeply nested terms. * compiler: The compiler could in rare circumstances do an an unsafe optimization that would result in a matching of a nested map pattern would fail to match. * compiler: Fixed a bug in the validator that caused it to reject valid code. * public_key: Fixed an insignificant whitespace issue when decoding PEM file. * public_key: Experimental OCSP client support. * public_key: Use user returned path validation error for selfsigned cert. It allows users of the ssl application to customize the generated TLS alert, within the range of defined alerts. * public_key: add API function to retrieve the subject-ID of an X509 certificate * runtime_tools: Fixed a crash in appmon_info triggered by trying to read port info from a port that was in the process of terminating. appmon_info is used by observer to get information from the observed node. * megaco: The expected number of warnings when (yecc) generating v2 and v3 (text) parser's was incorrect. * hipe: Fixed a warning issued when building the hipe application. * odbc: Changes in order to build on the Haiku operating system. Thanks to Calvin Buckley * crypto: Fix type spec bug in crypto for crypto_init and crypto:one_time * crypto: The deprecation message for crypto:rand_uniform/2 indicated a non-existent function. The correct one (rand:uniform/1) is now suggested. * crypto: Implemented a workaround to allow fallback from using the EVP API for Diffie-Hellman key generation * crypto: The internal Diffie-Hellman high level API for key generation was slow in old and by OpenSSL now unsupported cryptolib versions (1.0.1 and earlier). If such a cryptolib is used anyhow, the low-level API is used internally in the crypto application. * sasl: Make release_handler more resilient against exiting processes during upgrade. - Changes for 23.0.4: * stdlib: When a temporary child of a simple_one_for_one supervisor died, the internal state of the supervisor would be corrupted in a way that would cause the supervisor to retain the start arguments for subsequent children started by the supervisor, causing unnecessary growth of the supervisor's heap. There state corruption could potentially cause other problems as well. * erts: The ERTS internal I/O poll implementation could get into an inconsistent state causing input events to be ignored. * megaco: The v2 and v3 parsers could not properly decode some IPv6 addresses.- Changes for 23.0.3: * erts: Fixed bug in erlang:load_nif/2 that could cause it to throw badarg exception if a concurrent code change operation was in progress. Bug existed since OTP 23.0. * erts: Minor fix of debug compiled VM. * erts: An unintentional reuse of an already used emulator internal event object could cause a wakeup signal to a thread to be lost. In worst case this could cause the runtime system to hang. This hang was however quite rare. * erts: NIF threads and driver threads on non-Linux systems leaked internal resources when terminating. On Windows these resources were one event per thread. On most other systems one mutex and one condition variable per thread. On these other systems that also lacked pthread_cond_timedwait() also a pipe with its file descriptors was leaked. * compiler: When calls to is_map_key were repeated, the compiler could terminate with an internal consistency failure. * compiler: Fixed a bug in the type inference pass that could cause the compiler to hang.- Changes for 23.0.2: * erts: Fixed bug when sending an export fun (eg lists:reverse/1) on a not yet established connection. It could cause VM crash. Bug exists since OTP 23.0. * megaco: The mini parser could not properly decode some IPv6 addresses. - Changes for 23.0.1: * erts: The functionality utilized by BIFs for temporary disabling of garbage collection while yielding could cause system task queues to become inconsistent on a process executing such a BIF. Process system tasks are for example utilized when purging code, garbage collecting literal data, and when issuing an ordinary garbage collection from another process. The bug does not trigger frequently. Multiple code purges in direct sequence makes it more likely that this bug is triggered. In the cases observed, this has resulted in a hanging code purge operation. * erts: SCTP and UDP recv/2,3 hangs indefinitely if socket is closed while recv is called (socket in passive mode). * compiler: In rare circumstances, a guard using 'not' could evaluate to the wrong boolean value. * compiler: A guard expression that referenced a variable bound to a boolean expression could evaluate to the wrong value.- Version 23.0: - Potential Incompatibilities: * SSL:Support for SSL 3.0 is completely removed. TLS 1.3 is added to the list of default supported versions. * erl_interface: Removed the deprecated parts of erl_interface (erl_interface.h and essentially all C functions with prefix erl_). * The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace. erlang:get_stacktrace/0 is scheduled for removal in OTP 24. - Improvements and new features: * ssh: OpenSSH 6.5 introduced a new file representation of keys called openssh-key-v1. This is now supported with the exception of handling encrypted keys. * Algorithm configuration could now be done in a .config file. This is useful for example to enable an algorithm that is disabled by default without need to change the code. * SSL: Support for the middlebox compatibility mode makes the TLS 1.3 handshake look more like a TLS 1.2 handshake and increases the chance of successfully establishing TLS 1.3 connections through legacy middleboxes. * Add support for key exchange with Edward curves and PSS-RSA padding in signature verification * The possibility to run Erlang distribution without relying on EPMD has been extended. * A first EXPERIMENTAL socket backend to gen_tcp and inet has been implemented. gen_udp and gen_sctp will follow. * Putting {inet_backend, socket} as first option to listen() or connect() makes it easy to try this for existing code * A new module erpc in kernel which implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when possible. * Scalability and performance Improvements plus new functionality regarding distributed spawn operations. * In binary matching, the size of the segment to be matched is now allowed to be a guard expression (EEP-52) * When matching with maps the keys can now be guard expressions (EEP-52). * ssh: support for TCP/IP port forwarding, a.k.a tunnelling a.k.a as tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R. * Allow underscores in numeric literals to improve readability. Examples: 123_456_789, 16#1234_ABCD. * New functions in the shell for displaying documentation for Erlang modules, functions and types. * kernel: The module pg with a new implementation of distributed named process groups is introduced. The old module pg2 is deprecated and scheduled for removal in OTP 24.- Changes for 22.3: * compiler: A 'receive' with an 'after 0' clause would prevent the optimization that can avoid scanning the entire receive queue when matching on a newly created reference. * compiler: HiPE can again handle modules with catch and try constructs. * compiler: Fixed a bug in bit-syntax optimization that could crash the compiler. * crypto: Fixed potential memory leaks involving calls to the crypto ng_api. * common_test: Document incl_apps cover option * common_test: The ct_property_test has now a report function for results of stateful testing. * common_test: Don't hide error reasons from user * stdlib: Fix type specification for uri_string:normalize/2 that may also return error(). * stdlib: Improve error handling in uri_string:normalize/2. This change fixes a crash when the input URI has faulty percent- encoding. * stdlib: Fix minor bugs in the Erlang pretty printer (erl_pp). * stdlib: Fix the Erlang parser regarding consecutive unary operators. * stdlib: Let calendar:rfc3339_to_system_time() crash when the time offset is missing. * stdlib: Implement uri_string:resolve/{2,3} that can be used to resolve a URI reference against a base URI. * stdlib: In gen_statem it is now possible to change the callback module for a running server. See gen_statem's documentation for change_callback_module, push_callback_module, and pop_callback_module. * ssl: Correct handling of TLS record limit in TLS-1.3. The max value differs from previous versions. Also the payload data max record check was broken, that is record overflow problems could occur if user sent large amounts of data. * ssl: Correct close handling for DTLS * ssl: Fix ssl:getstat/1-2 to also work for DTLS sockets * ssl: Correct internal handling och socket active mode to avoid reviving TCP data aimed for a downgraded TLS socket. * ssl: When using the host name as fallback for SNI (server name indication) strip a possible trailing dot that is allowed in a host name but not in the SNI. Also if the server receives a SNI with a trailing dot send an UNRECOGNIZED_NAME alert. * ssl: Immediately remove session entries if handshake is abruptly closed at transport level. * ssl: Implementation of the key and initialization vector update feature, and general hardening of TLS 1.3. There are cryptographic limits on the amount of plaintext which can be safely encrypted under a given set of keys. This change enforces those limits by triggering automatic key updates on TLS 1.3 connections. * ssl: Add support for TLS 1.3 Session Tickets (stateful and stateless). This allows session resumption using keying material from a previous successful handshake. * ssl: Add support for key exchange with Edward curves and PSS- RSA padding in signature verification. * megaco: The documented function megaco:get_sdp_record_from_PropertGroup/2 was a wrapper for megaco_sdp:get_sdp_record_from_PropertGroup/2 but did not actually exist. This has now been fixed. * megaco: Test suite completely reworked. Add (timestamp) utility functions for debugging and testing. * erl_interface: Fix link error "multiple definition of `ei_default_socket_callbacks'" for gcc version 10 or when built with gcc option -fno-common. Error exists since OTP-21.3. * asn1: Fix 'DEFAULT' with 'OCTET STRING' and 'SEQUENCE OF CHOICE' with extensions. * erts: gen_udp:recv(S, N, 0) corrupted the internal state for the socket so after receive with {active, once} it always returned {error, timeout}, and wasted the received UDP packets. This bug has now been fixed. Reported and pinpointed by Alexander Petrovsky. * erts: The atom esock_atom_user and esock_atom_kernel was never actually created. This has now been corrected. * erts: Fixed bug in socket module that could potentially lead to scheduler deadlocks. * erts: Fix bug causing VM crash if down or stop callback of a NIF resource is called after the NIF module has been purged. The fix will postpone unloading until all such resource objects have been garbage collected. * erts: Fixed bug in ets:update_counter/4, when called with an invalid UpdateOp and a Key that does not exist, causing ets:info(T,size) to return incorrect values. Bug exists since OTP-19.0.2. * erts: Fix potential heap corrupting bugs when a process calls a BIF that blocks other normal schedulers and then writes to its own heap without the main process lock. A NIF running on a dirty scheduler trying to interact with such a process could corrupt its heap. The fixed BIFs were related to code loading and tracing. * erts: Fixed bug in erlang:list_to_ref/1 when called with a reference created by a remote note. Function list_to_ref/1 is intended for debugging and not to be used in application programs. Bug exist since OTP 20.0. * erts: The prim_net nif (net/kernel) made use of an undefined atom, notsup. This has now been corrected. * erts: Corrected the valid range of the erl command line argument +SDio from 0..1024 to 1..1024. +SDio 0 was erroneously allowed which just caused the VM to crash on the first dirty I/O job scheduled. * erts: Fix a crash when attempting to log faults when loading files during early boot. * erts: For socket, not all send and receive flags are supported on all platforms. In order to (at least) simplify testing, the socket:supports/0,1,2,3 functions has been extended with send_flags and recv_flags items, which indicates what the current platform can manage. * erts: Add a "full featured" version of getifaddrs in the net module. * erts: The options busy_limits_port and busy_limits_msgq have been added to the BIF erlang:open_port/2. The busy_limits_port option can be used for controlling the busy state of a port executing the spawn_driver or the fd_driver. The busy_limits_msgq option can be used for controlling the busy state of the port message queue. * erts: A socket "registry" has been added making it possible to list current open sockets. * erts: The counters managed by the socket nif has been extended. Their "size" has been increased from 32 bit to 64. Two max package size (for read and write) has been added. And four accept counters has been added. * erts: Add gcc option -fno-common to detect accidental name clashes of global variables. * erts: New dynamic lock checker that verifies locking orders and detects potential deadlock bugs in drivers and NIFs. Enabled together with the old static lock checker (for ERTS internal locks) in emulator started with -emu_type debug or built with configuration option --enable-lock-checking. * snmp: A simple supervision of the snmp manager net-if process has been added. Also, a way to forcibly restart the net-if process has been added. This could be useful if the net-if process hangs for some reason. * snmp: Misc documentation corrections * mnesia: Fixed a timing issue in uninstall fallback functionality. * eunit: Backport of PR-2316: Strip control codes from eunit_surefire output to avoid generation of invalid xml * ssh: Unicode problems for ssh_sftp:write fixed. * ssh: Changes to the internal api of the experimental ssh_dbg tool. * ssh: The new functions ssh:set_sock_opts/2 and ssh:get_sock_opts/2 sets and reads option values for the underlying TCP stream. * hipe: HiPE can again handle modules with catch and try constructs. * hipe: When the return value for try/catch was ignored, the native code compiler could crash. * public_key: Add support for key exchange with Edward curves and PSS-RSA padding in signature verification. * diameter: Add the 'first' tuple to type diameter:peer_filter/0. The filter was added in OTP-17.5.6.8 and OTP-18.3, but neither release updated the type specification. * tools: An Emacs warning due to lacking type in defcustom declaration has been fixed. * tools: Improve emacs indentation. * tools: The cover tool could generate instrumented code for a module that would cause warnings to be issued. * tools: Fixed generated fprof analysis format to also handle data in maps. * sasl: A socket "registry" has been added making it possible to list current open sockets. * kernel: The DNS resolver `inet_res` has been fixed to return the last intermediate error when subsequent requests times out. * kernel: The prim_net nif (net/kernel) made use of an undefined atom, notsup. This has now been corrected. * kernel: Fix a crash when attempting to log faults when loading files during early boot. * kernel: Fix crash in logger when logging to a remote node during boot. * kernel: Improved net_kernel debug functionality. - Changes for 22.2.8: * diameter: The possibility of choosing a handler process for an incoming Diameter request with a configured MFA was documented in OTP 20.0, but counters (with {traffic_counters, true}) were not incremented when this process was on a remote node. Counters are now incremented on the node that configures the transport in question. Introduced in OTP 21.3. * diameter: Transport options differing from those passed to diameter:add_transport/2 were used in several situations: when starting a transport process after connect_timer expiry after an initial connection attempt has failed, when starting a transport process after a connection has been accepted, when sending events, when returning options in diameter:service_info/2, and possibly more. In particular, the following configuration options to diameter:add_transport/2 were dropped: avp_dictionaries, incoming_maxlen, spawn_opt, strict_mbit. Moreover, any service options mistakenly passed to diameter:add_transport/2 were interpreted as such, instead of being ignored as the documentation states, with the consequence that outgoing and incoming requests saw different values of some options, some were always taken from transport options, and others from service options. diameter:add_transport/2 must be called in new code for the fix to have effect. Introduced in OTP 20.1.- Remove conditions and support for openSUSE/SLE < 15 - Remove not really needed service file _service - Convert the dependencies to pkgconfig style ones- Changes for 22.2.7: * compiler: Fixed a bug that could cause the compiler to reject valid code that used the is_map_key/2 BIF. * compiler: Fixed a bug that could cause the compiler to reject valid code that matched the same map key several times. * compiler: The compiler could crash when compiling a convoluted receive statement. * compiler: The compiler could crash when a fun was created but never used. The compiler could crash when compiling the expression true = 0 / X. - jsc#SLE-10913- Changes for 22.2.6: * erts: A process could get into an inconsistent state where it was runnable, but never scheduled for execution. This could occur when a mix of normal and low priority processes where scheduled on the same type of dirty scheduler simultaneously.- Changes for 22.2.5: * erts: A process could end up in a state where it got endlessly rescheduled without making any progress. This occurred when a system task, such as check of process code (part of a code purge), was scheduled on a high priority process trying to execute on a dirty scheduler. * erts: Improved signal handling for processes executing dirty. For example, avoid busy wait in dirty signal handler process when process is doing garbage collection on dirty scheduler. * stdlib: A directory traversal vulnerability has been eliminated in erl_tar. erl_tar will now refuse to extract symlinks that points outside the targeted extraction directory and will return {error,{Path,unsafe_symlink}}. (Thanks to Eric Meadows-Jönsson for the bug report and for suggesting a fix.)- Changes for 22.2.4: * ssl: Enhance error handling, all ALERTS shall be handled gracefully and not cause a crash. * ssl: Enhance alert logging, in some places the role indication of the alert origin was missing. So the log would say undefined instead of client or server. * ssl: Two different optimizations did not work together and resulted in the possible breakage of connections using stream ciphers (that is RC4). Reworked the implementation to avoid this.- Changes for 22.2.3: * ssl: Fix the handling of GREASE values sent by web browsers when establishing TLS 1.3 connections. This change improves handling of GREASE values in various protocol elements sent in a TLS 1.3 ClientHello. * ssl: Correct DTLS listen emulation, could cause problems with opening a new DTLS listen socket for a port previously used by a now closed DTLS listen socket. * compiler: Fixed a bug in the compiler that could cause it to reject valid code.- Changes for 22.2.2: * erts: Taking a scheduler offline could cause timers set while executing on that scheduler to be delayed until the scheduler was put online again. This bug was introduced in ERTS version 10.0 (OTP 21.0). * erts: The ets:update_counter/4 core dumped when given an ordered_set with write_concurrency enabled and an invalid position. This bug has been fixed. * erts: A process calling erlang:system_flag(multi_scheduling, block) could end up blocked waiting for the operation to complete indefinitely. * erts: Duplicate entries for [socket:]getopt and [socket:]setopt in man page. * stdlib: The ets:update_counter/4 core dumped when given an ordered_set with write_concurrency enabled and an invalid position. This bug has been fixed. * crypto: Constant time comparisons added. * ssh: Fixed that ssh_connection:send could allocate a large amount of memory if given an iolist() as input data. * ssh: Safe atom conversions. * ssh: Constant time comparisons added. - Changes for 22.2.1: * erts: Corrected an issue with the new socket api which could cause a core dump. A race during socket close could cause a core dump (an invalid nif environment free). * erts: Corrected an issue with the new socket api which could cause a core dump. When multiple accept processes waiting for a connect a connect could cause a core dump. * snmp: Its now possible to remove selected varbinds (from the final message) when sending a notification. This is done by setting the 'value' (in the varbind(s) of the varbinds list) to '?NOTIFICATION_IGNORE_VB_VALUE'. * snmp: Its now possible to specify that an oid shall be "truncated" (trailing ".0" to be removed) when sending an notification. * ssl: Add missing alert handling clause for TLS record handling. Could sometimes cause confusing error behaviors of TLS connections. * ssl: Fix handling of ssl:recv that happens during a renegotiation. Using the passive receive function ssl:recv/[2,3] during a renegotiation would fail the connection with unexpected msg.- BuildRequire pkgconfig(libsystemd) instead of systemd-devel: Allow OBS to shortcut through the -mini flavors.- Changes for 22.2 * http://erlang.org/download/OTP-22.2.README * Highlights: * erts: The Kernel application's User's Guide now contains a Logger Cookbook with common usage patterns. * erts: Numerous improvements in the new socket and net modules * Standard libraries: common_test: ct_property_test logging is improved * Standard libraries: ssl: Correct handling of unordered chains so that it works as expected * Tools: Emacs erlang-mode function that lets the user open the documentation for an Erlang/OTP function in an Emacs buffer has been improved. Users will be asked if they want the man pages downloaded if they are not present in the system.- Changes for 22.1.8 * http://erlang.org/download/OTP-22.1.8.README * erts: Large amounts of quickly executed dirty work could cause heavy contention on an internal spin lock. The spin lock was replaced by a mutex which behaves much better under these conditions.- Changes for 22.1.7 * http://erlang.org/download/OTP-22.1.7.README * compiler: Fixed a performance bug that caused repeated matches of large records to take a very long time to compile. * erts: A literal area could prematurely be released before all uses of it had been removed. This occurred either when a terminating process had a complex exit reason referring to a literal that concurrently was removed, or when a terminating process continued executing a dirty NIF accessing a literal (via the heap) that concurrently was removed. * erts: Fix bug causing VM crash due to memory corruption of distribution entry. Probability of crash increases if Erlang distribution is frequently disconnected and reestablished towards same node names. Bug exists since OTP-21.0. * erts: Fixed bug causing crash of VM built with configuration - -enable--sharing-preserving. Provoked when a sent message contains both a bit string and the heap binary (< 65 bytes) which the bit string was matched from. Bug exists since OTP-19.0 but has seen to be easier to provoke since OTP-22.1. - Changes for 22.1.6 * http://erlang.org/download/OTP-22.1.6.README * compiler, erts: The compiler could do an unsafe optimization of receives, which would cause a receive to only scan part of the message queue. * crypto: The AEAD tag was not previously checked on decrypt with chacha20_poly1305 * erts:Fix bug where the receive marker used by the runtime to do the receive queue optimization could be incorrectly set. The symptom of this would be that a message that should match in a receive never matches. * snmp: Agent discovery cleanup. If there is no receiver of INFORM then #state.reqs in snmpa_net_if keeps on growing for DISCOVERY.- Changes for 22.1.5 * http://erlang.org/download/OTP-22.1.5.README * snmp: Application(s): snmp Related Id(s): ERIERL-427 The agent discovery process has been made to work with snmptrapd..- Changes for 22.1.4 * http://erlang.org/download/OTP-22.1.4.README * compiler: Fixed a bug where the compiler could generate incorrect code for a 'receive' statement inside a 'try'. * crypto: FIxed a bug if the erlang emulator was linked with a very old cryptolib version (1.0.1 or earlier). The bug now fixed could have triggered a core dump if an unknown cipher name was used in crypto functions. * erts: Erlang/OTP can now be built on macOS Catalina (10.15).- Changes for 22.1.3: * inets: Add HTTP server error logging vi logger - Changes for 22.1.2: * erts: Added the environment variable ERLC_SERVER_ID, which allows multiple compile servers to run separately under the same user. - Changes for 22.1.1: * erts: A terminating process sending distributed 'EXIT' or 'DOWN' signals while terminating could end up in a state where no progress at all was made. This was triggered by a distribution channel that the terminating process was sending on got busy. This bug has existed since ERTS version 10.4 (OTP 22.0). * erts: When communicating with a simultaneously exiting port via the erlang:port_*() BIFs one could sometimes get stray {Ref, What} messages. Where Ref was a reference and What usually were the atom badarg. * snmp: Made it possible to add 'extra socket options' to the (gen_udp) socket open call (for both manager and agent). A new option has been added, extra_sock_opts, which makes it possible for the user to add a list of extra socket options that will be appended to the other socket options for the open call. See the snmp application config man page (erl -man 6 snmp) or the "Configuring the application" chapter of the Users Guide for more info. * compiler: Fixed a bug in the bit-syntax optimization pass that could crash the compiler.- Changes for 22.1: * kernel: The type specification for gen_sctp:connect/4,5 has been corrected. * kernel: Extra -mode flags given to erl are ignored with a warning. * kernel: Fix type spec for seq_trace:set_token/2. * kernel: logger:compare_levels/2 would fail with a badarg exception if given the values all or none as any of the parameters. This is now corrected. * kernel: Fix bug where the log file in logger_std_h would not be closed when the inode of the file changed. This would in turn cause a file descriptor leak when tools like logrotate are used. * kernel: Fix a race condition in the debugging function net_kernel:nodes_info/0. * kernel: Fix race condition when closing a file opened in compressed or delayed_write mode. * kernel: The possibility to send ancillary data, in particular the TOS field, has been added to gen_udp:send/4,5. * kernel: If the log file was given with relative path, the standard logger handler (logger_std_h) would store the file name with relative path. If the current directory of the node was later changed, a new file would be created relative the new current directory, potentially failing with an enoent if the new directory did not exist. This is now corrected and logger_std_h always stores the log file name as an absolute path, calculated from the current directory at the time of the handler startup. * kernel: Support local sockets with inet:i/0. * observer: Fix bug after a user followed link on a pid from an expanded term window. * observer: Improved dark mode colors on Linux. * mnesia: mnesia:add_table_copy/3 could cause a deadlock if called when a new node was starting. * mnesia: Transactions with sticky locks could with async_asym transactions be committed in the wrong order, since asym transaction are spawned on the remote nodes. To fix this bug the communication protocol between mnesia nodes had to be updated, thus mnesia will no longer be able to connect to nodes earlier than mnesia-4.14 , OTP-19.0. *** POTENTIAL INCOMPATIBILITY *** * stdlib: re:run() now yields when validating utf8 in a large subject. * stdlib: Upgraded the ERTS internal PCRE library from version 8.42 to version 8.43. See http://pcre.org/original/changelog.txt for information about changes made to PCRE. This library implements major parts of the re regular expressions module. * stdlib: The bug with ID ERL-717 has been fixed. The functions io:columns() and io:rows() only worked correctly inside interactive erlang shells before this fix. These functions returned {error,enotsup} before this fix even if stdout and stdin were connected to a terminal when they were invoked from an escript or a program started with e.g., erl -noshell. * stdlib: Fixed handling of ".." and "@" in wildcards. ".." would only work when preceded by a literal pattern such as in "a/..", not when preceded by wildcard characters such as in "*/..". The combination "@/.." was also broken, and in addition "@" in a pattern could degrade performance of the wildcard matching. * stdlib: Make sure ets:fun2ms() can handle ++/2 in the head of functions when called from the shell. * stdlib: Debugging of time-outs in gen_statem has been improved. Starting a time-out is now logged in sys:log and sys:trace. Running time-outs are visible in server crash logs, and with sys:get_status. Due to this system events {start_timer, Action, State} and {insert_timout, Event, State} have been added, which may surprise tools that rely on the format of these events. New features: The EventContent of a running time-out can be updated with {TimeoutType, update, NewEventContent}. Running time-outs can be cancelled with {TimeoutType, cancel} which is more readable than using Time = infinity. *** POTENTIAL INCOMPATIBILITY *** * stdlib: re:run() now avoids validating utf8 in the subject more than once in the same call. This validation could previously be performed multiple times when the global option was passed. * stdlib: ETS ordered_set tables with write_concurrency enabled has got a performance issue fixed. There were no limits for the values of internal statistics counters before this fix. This could result in that the data structure sometimes reacted slowly to a change in how many parallel processes were using it. * stdlib: The ordsets:union/1 is now faster when passed a long list of ordsets. * stdlib: unicode:characters_to_binary() could return very small binaries as reference counted off heap binaries. This could cause an unnecessary large memory usage and an unnecessary load on the binary allocator. Small binaries are now always returned as heap binaries. * stdlib: Display a more meaningful error message when a bad I/O server is used in a script written in Erlang (escript). * stdlib: New feature ets:info(_, binary) to get information about all reference counted binaries kept by a table. This is the same kind of debug information that process_info(_, binary) returns for a process. * stdlib: Corrected ETS documentation about the behavior of compiled match specifications when serialized through external format. * tools: cover would fail to start if two processes tried to start it at the exact same time. * common_test: If a ct hook is installed in the suite/0 function in a test suite, then the hook's terminate/1 function would be called several times without it's init/2 function being called first. This is now corrected. * common_test: If init_per_testcase fails, the test itself is skipped. According to the documentation, it should be possible to change the result to failed in a hook function. The only available hook function in this case is post_init_per_testcase, but changing the return value there did not affect the test case result. This is now corrected. * common_test: Add ct_netconfc support for NETCONF 1.1 (RFC 6241). The 1.1 base capability can be sent in hello, and RFC 6242 chunk framing is applied when both client and server advertise 1.1 support. * common_test: Correct lib_dir paths in common_tests opaque data structure that is passed to ct_release_test callback modules in functions upgrade_init/2, upgrade_upgraded/2 and upgrade_downgraded/2. The incorrect paths may cause confusion when debugging although it will not cause any incorrect behavior on the part of common_test as it is currently not used. * erts: If you set {linger,{true,0}} on a gen_tcp listen socket, accept a connection on that socket, and then close the accepted socket, now the linger zero setting is transferred to the accepted socket. Before this correction that information was lost and the close behaviour on the accepted socket incorrect. * erts: Sending ancillary data implemented in OTP-15747 accidentally left behind test code that caused all UDP sends to fail on Windows. This has now been fixed. * erts: In the socket nif, used invalid flags when if-def'ing for supported TCP flags: TCP_MAXSEG and TCP_NODELAY (the support function). * erts: Fixed memory leaks in experimental socket module. * erts: re:run() now yields when validating utf8 in a large subject. * erts: Fixed bug in seq_trace:set_token(label,Term) which could cause VM crash if Term was heap allocated (not an atom, small integer, local pid or port). Bug exists since OTP 21.0 when terms other than small integers were first allowed as labels. * erts: Extra -mode flags given to erl are ignored with a warning. * erts: Don't loop indefinitely when --enable-pgo is given to configure, but compiler does not support pgo. * erts: Fix seq_trace:print/2 not to raise badarg exception if label is not a small integer. Bug exists since OTP 21.0. * erts: Fixed hipe_flush_icache_range for non-Linux OS on ARM. * erts: The fix in OTP-15871 was too conservative and disabled the offending load-time optimization in some cases where it was safe. * erts: Upgraded the ERTS internal PCRE library from version 8.42 to version 8.43. See http://pcre.org/original/changelog.txt for information about changes made to PCRE. This library implements major parts of the re regular expressions module. * erts: Fix race condition when closing a socket while using {active,N} on Windows. * erts: Allow more than one -config command line option to erl on Windows to conform with other OS. * erts: Fix so that ERL_FLAGS environment variable does not interfere with command line arguments. Before this fix you could write: ERL_FLAGS="10" erl +S and erlang would start as if +S had been given the argument 10. * erts: The bug with ID ERL-717 has been fixed. The functions io:columns() and io:rows() only worked correctly inside interactive erlang shells before this fix. These functions returned {error,enotsup} before this fix even if stdout and stdin were connected to a terminal when they were invoked from an escript or a program started with e.g., erl -noshell. * erts: Do not use named label in ethread.c inline assemble. This allows erts to be compiled using gcc 9.1.0 with LTO enabled. * erts: erlang:fun_to_list/1 will now escape the module and function name when necessary. * erts: process_info(P,binary) would neglect to look through heap fragments, potentially missing a few binaries associated with the process. * erts: HiPE is now automatically disabled on systems with non- glibc implementation (for instance musl). This is because musl does not provide the API's for guaranteeing that signals are delivered on the correct native stack. * erts: Fixed bug triggered if a process is killed during call to persistent_term:put or persistent_term:erase. * erts: Add units to all memory slogans in the crash dump documentation. * erts: Fix a bug in binary_to_term that would crash the emulator if a term larger than 16GB was to be decoded. * erts: Fixed bug related to an exiting process sending EXIT and DOWN signals to remote linked/monitored processes. Bugs exists since OTP 22.0. * erts: erlc can now automatically use a compile server to avoid starting an Erlang system for each file to be compiled in a multi-file project. See the documentation for how to enable it. * erts: The possibility to send ancillary data, in particular the TOS field, has been added to gen_udp:send/4,5. * erts: The net module has been split into 'net' (kernel) and prim_net (preloaded). * erts: Socket counters now works as expected and can also be extracted with the (new) info function. * erts: re:run() now avoids validating utf8 in the subject more than once in the same call. This validation could previously be performed multiple times when the global option was passed. * erts: The un-documented function erlang:dist_get_stat/1 now returns the real value of what the distribution queue contains instead of a boolean. * erts: ETS ordered_set tables with write_concurrency enabled has got a performance issue fixed. There were no limits for the values of internal statistics counters before this fix. This could result in that the data structure sometimes reacted slowly to a change in how many parallel processes were using it. * erts: Optimize the reception of large distribution messages. * erts: Binary matching and functions like split_binary/2 will now create heap binaries when the results are small enough, reducing the chances of small sub-binaries keeping large binaries alive. * erts: Fixed rare emulator crash in instrument:allocations/0-1. * erts: Ports could pass very small binaries as reference counted off heap binaries to processes. This could cause an unnecessary large memory usage and an unnecessary load on the binary allocator. Small binaries are now always passed as heap binaries to processes. * erts: unicode:characters_to_binary() could return very small binaries as reference counted off heap binaries. This could cause an unnecessary large memory usage and an unnecessary load on the binary allocator. Small binaries are now always returned as heap binaries. * erts: Improved erl_nif documentation regarding on_load and Erlang stub/fallback functions. * erts: New feature ets:info(_, binary) to get information about all reference counted binaries kept by a table. This is the same kind of debug information that process_info(_, binary) returns for a process. * erl_docgen: Update the documentation build support to handle FOP 2.1 . * ftp: A possibly infinite loop when receiving messages divided in parts is removed. * dialyzer: Allow native compilation when using Dialyzer from Erlang. The options native (defaults to false) and native_cache have been added. * eunit: Handle get_until request with explicit encoding in the implementation of the I/O protocol. * snmp: Fix various minor issues related to Dialyzer. Mostly these are dialyzer warnings, but there was also some minor bugs detected by Dialyzer. * snmp: Fixed a dets usage problem detected by dialyzer. * snmp: The function snmp:print_version_info() prints various version info. For each module a number of items are printed, such as app vsn and md5 digest. And an attempt was also made to print "compile time". This used to be available in the module_info for each module, but has now been removed. * snmp: The use of the deprecated random module has been replaced the with rand module. * snmp: Removed use of the deprecated function erlang:get_stacktrace(). Instead make use of the 'catch Class:Error:Stacktrace' feature. * syntax_tools: Add missing calls to erl_syntax:unwrap/1. The nodes concerned represent names and values of maps and map types. * wx: Fix a driver bug that could crashes when allocating memory. * erl_interface: Fix bugs in ei_print_term for binaries and bit strings causing incorrect output. * erl_interface: Fixed bug in ei_decode_fun for very old fun encoding format. Bug exist since OTP 22.0. * erl_interface: ei_print_term() now supports printing of maps and funs. * xmerl: xmerl_sax_parser crashed during charset detection when the xml declarations attribute values was missing the closing quotation (' or "). * ssl: Handling of zero size fragments in TLS could cause an infinite loop. This has now been corrected. * ssl: DTLS record check needs to consider that a resent hello message can have a different version than the negotiated. * ssl: Basic support for TLS 1.3 Client for experimental use. For more information see the Standards Compliance chapter of the User's Guide. * ssl: Correct solution for retaining tcp flow control OTP-15802 (ERL-934) as to not break ssl:recv as reported in (ERL-938) * ssl: Enhance dialyzer specs to reflect implementation better and avoid dialyzer warnings for the user that wants to use TLS with unix domain sockets. * ssl: Add support for ECDSA signature algorithms in TLS 1.3. * ssl: Correct error handling of TLS downgrade, possible return values form ssl:close/2 when downgrading is {ok, Port} or {error, Reason}, it could happen that only ok was returned instead of {error, closed} when downgrade failed due to that the peer closed the TCP connection. * os_mon: Fix disk_sup to ignore squashfs on Linux when determining if a mounted filesystem is full or not. * os_mon: Fix bug where cpu_sup:util() always returned 100% on systems not using gnu libc, for example Alpine OS. * ssh: Fixed wrong type definition for the daemon option subsystems. * ssh: Fixed a possible SSH logging crash if there was a problem in an early stage of session setup. * ssh: The documentation for the modules ssh_connection, ssh_sftp and ssh_sftpd are now generated from the -spec:s. * ssh: Internal cleanup including removal of the internal file ssh_userauth.hrl. * ssh: Removed unused definitions in ssh.hrl. * ssh: Removed unused fields in the internal #connection{} record. * ssh: To get information of a connection_ref() from for example ssh:connect/3, there was previously one function available namely ssh:connection_info/2. This ticket adds ssh:connection_info/1 which returns all information. For daemons (servers) started with for example ssh:daemon/2 the function ssh:daemon_info/1 returning all information was available. This ticket adds ssh:daemon_info/2 which returns only the information specified in the second argument. The info of connections and of daemons now also includes the item 'options'. Only those options that does not have their default values are returned. For a connection also the items 'algorithms' and 'channels' are added. * inets: httpd - Accept singel LF as line terminator * inets: mod_esi will now always propagate the actual HTTP status code that it answered with, to later mod-modules, and not in some cases hardcode 200. * compiler: Code such as the following would crash the compiler in OTP 22: [some_atom = fun some_function/1] * compiler: Compilation could get really slow (in the order of minutes instead of seconds) when compiling huge functions. (Thanks to Kostis Sagonas for reporting this bug.) * compiler: Fixed a bug in the validator that could reject valid code. * compiler: In rare circumstances, when two clauses had identical bodies and guard tests that tested a single boolean variable, the guard test for the second clause could be discarded, executing the second clause unconditionally if the first clause was not executed. * compiler: Fixed extremely slow compilation for huge functions doing predominantly pattern matching. * compiler: The compiler could generate unsafe code (that would crash the runtime system) for map pattern matching. The code could be unsafe if the matched key was not present in the map at runtime. * compiler: Correct code using try/after could fail to compile when using the option 'no_type_opt'. * compiler: The compiler could crash when compiling code that called 'length/1' on a binary extracted using the binary syntax. * compiler: Fixed a bug where the compiler could fail with an internal consistency failure error when compiling receive statements. * compiler: Fixed a problem where the compiler would crash when compiling binary matching in a function head. * public_key: Support Password based encryption with AES * public_key: Change dialyzer spec to avoid confusion * runtime_tools: Fix dbg:stop_clear/0 to also clear trace events (send and 'receive'). * megaco: Fix various minor issues related to Dialyzer. Mostly these are dialyzer warnings, but there was also some minor bugs detected by Dialyzer. * crypto: The implementation of crypto_one_time/4 is adjusted to match the type specification. The spec and the black-box behaviour of the function are unchanged. Some details: Both the spec and the implementation were correct seen separately. But with both of them combined simultaneously with crypto_one_time/5 which was called by the implementation of crypto_one_time/4, an (obvious) error was detected by a Dialyzer with more thorough checking than usual. * crypto: When using crypto with FIPS mode enabled, the digests were not correctly handled. * crypto: A memory leak in error handling code in ng_crypto_init_nif is fixed. * crypto: Fixed the broken static build of the crypto nifs * crypto: The Message Authentication Codes (MAC) CMAC, HMAC and Poly1305 are unified into common functions in the New Crypto API. See the manual for CRYPTO. * sasl: The net module has been split into 'net' (kernel) and prim_net (preloaded). * jinterface: Replaced deprecated with in documentation.- Rebased patches: + 0001-erts-Do-not-use-named-no_cpuid-label-in-asm.patch dropped (merged upstream)- Udate -ffat-lto-objects in order to properly build static libraries provided by the package (boo#1142645). - Use %make_build macro.- Add patch 0001-erts-Do-not-use-named-no_cpuid-label-in-asm.patch: fix boo#1142913 - Changes for 22.0.7: * compiler: Fixed a compiler crash introduced in 22.0.6 (OTP-15952). - Changes for 22.0.6: * compiler: Fixed an unsafe optimization when matching tuple_size/1 outside of guards, which could crash the emulator if the argument was not a tuple. * compiler: Fixed a rare bug that could cause the wrong kind of exception to be thrown when a BIF failed in a function that matched bitstrings. * compiler: Fixed a bug where receive statements inside try/catch blocks could return incorrect results. * ssl: Enhance error handling for erroneous alerts from the peer. * hipe: The HiPE compiler would badly miscompile certain try/catch expressions, so it will now refuse to compile modules containing try or catch. As a consequence of this, dialyzer will no longer compile key modules to native code. *** POTENTIAL INCOMPATIBILITY *** * dialyzer: The HiPE compiler would badly miscompile certain try/catch expressions, so it will now refuse to compile modules containing try or catch. As a consequence of this, dialyzer will no longer compile key modules to native code. *** POTENTIAL INCOMPATIBILITY *** - Changes for 22.0.5: * inets: Fix a regression in http client that causes a crash when request URI has no scheme. * ssl: Fix handling of certificate decoding problems in TLS 1.3 similarly as in TLS 1.2. * ssl: Hibernation now works as expected in all cases, was accidently broken by optimization efforts. * ssl: Fix interoperability problems with openssl when the TLS 1.3 server is configured wirh the option signature_algs_cert. * dialyzer: Make sure Dialyzer does not crash if the formatting of results fails. Instead of crashing, an unformatted version of the results is returned. * erts: An invalid value test caused the socket:setopt(Socket, ip, add_membership, ip_mreq()) to fail with badarg. The same for drop_membership. * erts: Fixed bug causing VM crash when doing textual dump of a process containing an unhandled monitor down signal. Textual process dumps can be done with erlang:system_info(procs), trace feature process_dump, Erlang shell break menu and a crashdump. Bug exist since OTP 21.0. * erts: lists:subtract/2 would produce incorrect results for some inputs on 64-bit platforms. * erts: Fixed a bug in the loader that was similar to OTP-15938, yielding incorrect code for some inputs on 64-bit platforms. * erts: Fixed bug causing scheduler threads in rare cases to block spinnning indefinitely. Bug exists since OTP 21.0.- Drop priv/obj directories: boo#1140404- Version 22.0.4: * http://erlang.org/download/OTP-22.0.4.README - Bug Fixes * erts: Fixed a buffer overflow when binary_to_existing_atom/2 and list_to_existing_atom/2 was used with the latin1 encoding. * erts: The runtime system disconnected a connection if it received an exit/2 signal where the recipient was a process on an old incarnation of the current node. That is, the receiving node had the same node name, but another "creation" number. The signal will now just be dropped since the receiving process no longer exists. * kernel: user/user_drv could respond to io requests before they had been processed, which could cause data to be dropped if the emulator was halted soon after a call to io:format/2, such as in an escript. * ssl: Correct handshake handling, might cause strange symptoms such as ASN.1 certificate decoding issues. * ssl: Fix handling of the signature_algorithms_cert extension in the ClientHello handshake message. * ssl:Handle new ClientHello extensions when handshake is paused by the {handshake, hello} ssl option.- Version 22.0: - Potential Incompatibilities: * gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report. * reltool: A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}. * All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node. * The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library. * VxWorks is deprecated as of OTP 22 and will be removed in OTP 23. - New Features: * Support for Erlang Distribution protocol to split the payload of large messages into several fragments. * ETS option write_concurrency now also effects and improves scalability of ordered_set tables. * The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists. * A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface. * Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability. * The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * All compiler options that can be given in the source file can now be given in the option list on the command line for erlc. * In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are new BEAM instructions for binary matching that the HiPE native code compiler does not support. If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code. * Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover. * A simple socket API is provided through the socket module. This is a low level API that does *not* replace gen_[tcp|udp|sctp]. It is intended to *eventually* replace the inet driver. It also provides a basic API that facilitates the implementation of other protocols than TCP, UDP and SCTP. Known issues are; No support for the Windows OS (currently), a small term leakage. This feature will be classed as experimental in OTP 22. * SSL: now uses the new logger API, including log levels and verbose debug logging. * SSL: Basic support for TLS 1.3 Server for experimental use. * crypto: The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument. - The application otp_mibs has been removed from OTP.- Update to 21.3.8.1: - Changes for 21.3.8.1: * http://erlang.org/download/OTP-21.3.8.1.README * erts: Fixed a buffer overflow when binary_to_existing_atom/2 and list_to_existing_atom/2 was used with the latin1 encoding. * ssl: Correct solution for retaining tcp flow control OTP-15802 (ERL-934) as to not break ssl:recv as reported in (ERL-938) * tools: cover would fail to start if two processes tried to start it at the exact same time. - Update to 21.3.8: - Changes for 21.3.8: * http://erlang.org/download/OTP-21.3.8.README * common_test: The test result when a hook function fails is in general the same as if the function that the hook is associated with fails. For example, if post_init_per_testcase fails the result is that the test case is skipped, as is the case when init_per_testcase fails.This, however, was earlier not true for timetrap timeouts or other error situations where the process running the hook function was killed. This is now corrected, so the error handling should be the same no matter how the hook function fails. Related Id(s): ERIERL-334 * common_test: In some rare cases, when two common_test nodes used the same log directory, a timing problem could occur which caused common_test to crash because it's log cache file was unexpectedly empty. This is now corrected. Related Id(s): ERIERL-342 * common_test: Two new common_test hook functions are introduced: post_groups/2, which is called after Suite:groups/0 post_all/3, which is called after Suite:all/0 A new term, {testcase,TestCase,RepeatProperties} is now also allowed in the return from all/0. This can be used for repeating a single test case a specific number of times, or until it fails or succeeds once. * eldap, public_key, ssl: Back port of bug fix ERL-893 from OTP-22 and document enhancements that will solve dialyzer warnings for users of the ssl application. This change also affects public_key, eldap (and inet doc). Related Id(s): ERL-893, ERL-929, PR-2215 * erl_interface: erl_interface/ei refused to use node names with an alive name (the part of the node name preceding the @ sign) longer than 63 characters and a host name longer than 64 characters. The total amount of characters allowed in a node name (alivename@hostname) was thus limited to 128 characters. These limits applied both to the own node name as well as node names of other nodes. Ordinary Erlang nodes limit the node name length to 256 characters, which meant that you could not communicate with certain Erlang nodes due to their node name used. erl_interface/ei now allow the total amount of characters in a node name to be up to 256 characters. These characters may be distributed between alive name and host name in whatever way needed. That is, the maximum amount of characters in the alive name may be 254 and the maximum amount of characters in the host name may be 254, but in total the node name must not exceed 256 characters. * erts: Fixed more bugs in process_info(reductions) causing it to sometimes behave non-monotonic. That is, a subsequent call toward the same process could return a lower reduction value. Related Id(s): ERIERL-337, OTP-15709 * ssl: Missing check of size of user_data_buffer made internal socket behave as an active socket instead of active N. This could cause memory problems. * eldap, public_key, ssl: Back port of bug fix ERL-893 from OTP-22 and document enhancements that will solve dialyzer warnings for users of the ssl application. This change also affects public_key, eldap (and inet doc). * stdlib: A bug in gen_statem has been fixed where the internal timeout message could arrive as an info to the callback module during high load due to incorrect use of asynchronous timer cancel.- Update to 21.3.7: - Changes for 21.3.7: * http://erlang.org/download/OTP-21.3.7.README * ssh: When an SSH server receives the very first message on a new TCP connection, and that message is not the expected one, the 64 first bytes of the received message are now dumped in the INFO REPORT that reports the Protocol Error. This facilitates the debugging of who sends the bad message or of detecting a possible port scanning- Update to 21.3.6: - Changes for 21.3.6: * http://erlang.org/download/OTP-21.3.6.README * ssl: With the default BEAST Mitigation strategy for TLS 1.0 an empty TLS fragment could be sent after a one-byte fragment. This glitch has been fixed.- Update to 21.3.5: - Changes for 21.3.5: * http://erlang.org/download/OTP-21.3.5.README * diameter: Fix inadvertently broad monitor that resulted in gen_server cast messages to hidden nodes from module diameter_dist. * erts: Add missing documentation of new external tags NEW_PID, NEW_PORT and NEWER_REFERENCE introduced in OTP 19. These new tags are planned to be "activated" in OTP 23 when distribution capability flag DFLAG_BIG_CREATION becomes mandatory. Older nodes (>= 19) are able to decode these new tags and send them back to the new node. Nodes older than OTP 23 will however never encode their own local pids, ports and references using the new tags. * inets: Fix the internal handling of the option erl_script_timeout in httpd. If explicit erl_script_timeout value was supplied in seconds it was not correctly converted to millisecond units for internal usage. This change fixes the handling of erl_script_timeout in all possible configuration scenarios.- Update to 21.3.4: - Changes for 21.3.4: * http://erlang.org/download/OTP-21.3.4.README * crypto: Fixed build link error on Windows. Unresolved symbol 'bcmp'. * erl_interface: Fix handling of Makefile dependencies so that parallel make works properly. * erts: Fix erlang:open_port/2 with the fd option to correctly cleanup the pollset when the port is closed. Before this fix there would be error printouts sent to logger when the same fd was reused in a new port. * ssh: The callback ssh_channel:init/1 was missing in OTP-21 * ssh: If a client was connected to an server on an already open socket, the callback fun(PeerName,FingerPrint) in the accept_callback option passed the local name in the argument PeerName instead of the remote name. * common_test: OTP internal test improvements.- Update to 21.3.3: - Changes for 21.3.3: * http://erlang.org/download/OTP-21.3.3.README * erts: Fixed a bug in seq_trace:reset_trace/0 that could crash the emulator. * erts: Fixed bug in process_info(reductions) causing it to sometimes return invalid results. * kernel/stdlib: Fixed a performance regression when reading files opened with the compressed flag.- Update to 21.3.2: - Changes for 21.3.2: * http://erlang.org/download/OTP-21.3.2.README * erts: If a suspend/resume signal pair was sent to a process while it was executing dirty, the receiving process could later end up in a suspended state indefinitely. This bug was introduced in ERTS version 10.0 (OTP 21.0). * etrs: Fix a possible deadlock when terminating the ERTS caused by a dirty scheduler not releasing it's run-queue lock when terminating. * xmerl: Handling of character references in attributes are fixed. * xmerl: Normalization of whitespace characters in attributes are fixed so it works when character references are used.- Update to 21.3.1: - Changes for 21.3.1: * http://erlang.org/download/OTP-21.3.1.README * erl_interface: Fixed two bugs in the erl_call program. A missing initialization (introduced in erl_interface-3.11) which either caused a crash or failure to connect to or start a node, and an incorrectly calculated timeout which could cause failure to start an erlang node. These bugs only caused failures on some platforms. * ssl: The timeout for a passive receive was sometimes not cancelled and later caused a server crash. This bug has now been corrected. * ssl: Add tag for passive message (active N) in cb_info to retain transport transparency. - Update to 21.3: - Changes for 21.3: * http://erlang.org/download/OTP-21.3.README * Erlang/OTP 21.3 is the third service release for the 21st major release with improvements, as well as a few features * Highlights * Kernel: The standard logger handler, logger_std_h, now has a new internal feature for log rotation. For full information see the documentation. * SSL:The Reason part of the error return from the functions connect and handshake has a better and documented format. This is a potential incompatibility. See the documentation. Refactoring of state handling has improved the TLS application data throughput and reduced CPU overhead Code optimizations has reduced CPU load for encryption/decryption, especially for Erlang's distribution protocol over TLS Now supports active N * Erl_interface: Support for plugin of a user supplied socket implementation has been added. * OTP:The HTML reference documentation now shows the OTP version where modules and functions were first introduced. Versions of OTP older than R13B04 is not shown in the reference documentation * For a full list of details see: http://erlang.org/download/otp_src_21.3.readme - Update to 21.2.7: - Changes for 21.2.7: * http://erlang.org/download/OTP-21.2.7.README * erts, otp: Fixes of install/release phase in build system. - - The source tree was modified when installing/releasing and/or applying a patch. - - Some files were installed with wrong access rights. - - If applying a patch (using otp_patch_apply) as another user (except root) than the user that built the source, the documentation was not properly updated. * erts, kernel: Setting the recbuf size of an inet socket the buffer is also automatically increased. Fix a bug where the auto adjustment of inet buffer size would be triggered even if an explicit inet buffer size had already been set. * erts: Reading from UDP using active true or active N mode has been optimized when more packets than specified by read_packets are available on the socket. * erts, kernel: Setting the recbuf size of an inet socket the buffer is also automatically increased. Fix a bug where the auto adjustment of inet buffer size would be triggered even if an explicit inet buffer size had already been set.- Update to 21.2.6: - Changes for 21.2.6: * http://erlang.org/download/OTP-21.2.6.README * erts: When using the {linger,{true,T}} option; gen_tcp:listen/2 used the full linger time before returning for example eaddrinuse. This bug has now been corrected. * stdlib: Optimize pretty printing of terms. The slower behaviour was introduced in Erlang/OTP 20.- Drop unsupported openSUSE versions- Update to 21.2.5: - Changes for 21.2.5: * http://erlang.org/download/OTP-21.2.5.README * inets: Fixed bug that causes a crash in http client when using hostnames (e.g. localhost) with the the option ipv6_host_with_brackets set to true. This change also fixes a regression: httpc:request fails with connection error (nxdomain) if option ipv6_host_with_brackets set to true and host component of the URI is an IPv6 address.- update to 21.2.4: - Changes for 21.2.4: * http://erlang.org/download/OTP-21.2.4.README * erts: Fix bug where doing a gen_tcp:send on a socket with delay_send set to true could cause a segfault if the other side closes the connection. Bug was introduced in erts-10.2 (OTP-21.2). * erts: Fix a race condition when a port program closes that could result in the next started port to hang during startup. Bug was introduced in erts-10.0 (OTP-21.0). * erts: Fix a bug where polling for external events could be delayed for a very long time if all active schedulers were 100% loaded. Bug was introduced in erts-10.2 (OTP-21.2). * inets: Make sure ipv6 addresses with brackets in URIs are converted correctly before passing to lower level functions like gen_tcp and ssl functions. Could cause connection to fail. - update to 21.2.3: - Changes for 21.2.3: * http://erlang.org/download/OTP-21.2.3.README * compiler: An optimization that avoided allocation of a stack frame for some case expressions was introduced in OTP 21. (ERL-504/OTP-14808) It turns out that in rare circumstances, this optimization is not safe. Therefore, this optimization has been disabled. * erts: Fixed a crash when dangling files were closed after init:restart/0. * erts: A bug that could cause dirty schedulers to become unresponsive has been fixed. * ssl: Fix encoding of the SRP extension length field in ssl. The old encoding of the SRP extension length could cause interoperability problems with third party SSL implementations when SRP was used. * ssl: Guarantee active once data delivery, handling TCP stream properly. Correct gen_statem returns for some error cases * xmerl: The charset detection parsing crash in some cases when the XML directive is not syntactic correct.- update to 21.2.2: - Changes for 21.2.2: * http://erlang.org/download/OTP-21.2.2.README * ssh: Fixed port leakage if a ssh:daemon call failed. - update to 21.2.1: - Changes for 21.2.1: * http://erlang.org/download/OTP-21.2.1.README * erts: Fixed bug on big endian architectures when changing file permissions or ownership with file:change_mode, change_owner, change_group or write_file_info. Bug exists since OTP-21.0. * erts: Fixed bug in operator band of two negative operands causing erroneous result if the absolute value of one of the operands have the lowest N*W bits as zero and the other absolute value is not larger than N*W bits. N is an integer of 1 or larger and W is 32 or 64 depending on word size. * ssl: Fixed renegotiation bug. Client did not handle server initiated renegotiation correctly after rewrite to two connection processes, due to ERL-622 commit d87ac1c55188f5ba5cdf72384125d94d42118c18. This could manifest it self as a " bad_record_mac" alert. Also included are some optimizations - update to 21.2: - Changes for 21.2: * http://erlang.org/download/OTP-21.2.README * HIGHLIGHTS * erts, sasl: New counters and atomics modules supplies access to highly efficient operations on mutable fixed word sized variables. * erts: There is a new module persistent_term that implements a term storage suitable for terms that are frequently used but never or infrequently updated. Lookups are done in constant time without copying the terms. * ssh: Requires OpenSSL 1.1.1 or higher as cryptolib under the OTP application crypto. * ssl: *** POTENTIAL INCOMPATIBILITY *** ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6). * erts: Add a new pollset that is made to handle sockets that use {active, true} or {active, N}. The new pollset will not be polled by a pollthread, but instead polled by a normal scheduler. This change was made because of the overhead associated with constantly having to re-apply the ONESHOT mechanism on fds that all input events were interesting. The new pollset is only active on platforms that support concurrent kernel poll updates, i.e. Linux and BSD. * POTENTIAL INCOMPATIBILITIES: kernel: A new function, logger:update_handler_config/3 is added, and the handler callback changing_config now has a new argument, SetOrUpdate, which indicates if the configuration change comes from set_handler_config/2,3 or update_handler_config/2,3. This allows the handler to consistently merge the new configuration with the old (if the change comes from update_handler_config/2,3) or with the default (if the change comes from set_handler_config/2,3). The built-in handlers logger_std_h and logger_disk_log_h are updated accordingly. A bug which could cause inconsistency between the handlers' internal state and the stored configuration is also corrected. * ssl: ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6). * full relase notes here: http://erlang.org/download/OTP-21.2.README- Drop crypto.patch: isn't required anymore Reported by Gabriele Santomaggio- update to 21.1.4: - Changes for 21.1.4: * http://erlang.org/download/OTP-21.1.4.README * kernel: Fix bug causing net_kernel process crash on connection attempt from node with name identical to local node. - update to 21.1.3: - Changes for 21.1.3: * http://erlang.org/download/OTP-21.1.3.README * erts: Added an optional ./configure flag to compile the emulator with spectre mitigation: - -with-spectre-mitigation Note that this requires a recent version of GCC with support for spectre mitigation and the - -mindirect-branch=thunk flag, such as 8.1.- Pack /etc/init.d/epmd only for systemd-less cases (boo#1116009)- update to 21.1.2: - Changes for 21.1.2: * http://erlang.org/download/OTP-21.1.2.README * compiler: Fixed a bug where incorrect code was generated following a binary match guard. * erts: Fixed a rare bug where files could be closed on a normal instead of an IO scheduler, resulting in system instability if the operation blocked. * public_key: Add DSA SHA2 oids in public_keys ASN1-spec and public_key:pkix_sign_types/1- Fix instructions for changing address for epmd.socket service. The ListenStream option needs to be completely overriden otherwise the socket will be started with multiple ListenStream options and it will fail.- update to 21.1.1: - Changes for 21.1.1: - http://erlang.org/download/OTP-21.1.1.README * erts: Fixed a memory leak on errors when reading files. * ssl: From ssl-9.0.2. CLOSE ALERTS could under some circumstances be encoded using an incorrect cipher state. This would cause the peer to regard them as unknown messages. * ssl: Correct handling of socket packet option with new TLS sender process, from ssl-9.0.2. When changing the socket option {packet, 1|2|3|4} with ssl:setopts/2 the option must internally be propagated to the sender process as well as the reader process as this particular option also affects the data to be sent. * eldap: A race condition at close could cause the eldap client to exit with a badarg message as cause. - Changes for 21.1: - http://erlang.org/download/OTP-21.1.README * ssh: The key exchange methods 'curve25519-sha256@libssh.org', 'curve25519-sha256' and 'curve448-sha512' are implemented. The last two are defined in https://tools.ietf.org/html/draft-ietf-curdle-ssh-curves They all depends on that OpenSSL 1.1.1 or higher is used as cryptolib. * crypto: The typing in the CRYPTO and PUBLIC_KEY applications are reworked and a few mistakes are corrected. The documentation is now generated from the typing and some clarifications are made. A new chapter on Algorithm Details such as key sizes and availability is added to the CRYPTO User's Guide. * erts: The socket options recvtos, recvttl, recvtclass and pktoptions have been implemented in the socket modules. See the documentation for the gen_tcp, gen_udp and inet modules. Note that support for these in the runtime system is platform dependent. Especially for pktoptions which is very Linux specific and obsoleted by the RFCs that defined it. * ssh: The cipher 'chacha20-poly1305@openssh.com' is now supported if OpenSSL 1.1.1 or higher is used as cryptolib. - Changes for 21.0.9: - http://erlang.org/download/OTP-21.0.9.README * compiler: Fix a regression in OTP-15204 that removed .beam file metadata that some external build tools relied on. * erts: As of ERTS version 10.0 (OTP 21.0) the erl_child_setup program, which creates port programs, ignores TERM signals. This setting was unintentionally inherited by port programs. Handling of TERM signals in port programs has now been restored to the default behavior. That is, terminate the process. * erts: The fix made for OTP-15279 in erts-10.07 (OTP-21.0.8) was not complete. It could cause a new connection attempt to be incorrectly aborted in certain cases. This fix will amend that flaw. - Changes for 21.0.8: - http://erlang.org/download/OTP-21.0.8. * erts: A process could get stuck in an infinite rescheduling loop between normal and dirty schedulers. This bug was introduced in ERTS version 10.0. * erts: Garbage collection of a distribution entry could cause an emulator crash if net_kernel had not brought previous connection attempts on it down properly. * kernel: Fixed bug in net_kernel that could cause an emulator crash if certain connection attempts failed. Bug exists since kernel-6.0 (OTP-21.0). - Changes for 21.0.7: - http://erlang.org/download/OTP-21.0.7. * erts: A race between termination of a process and resume of the same process via erlang:resume_process/1 could cause the VM to crash. This bug was introduced in erts version 10.0 (OTP 21.0). * erts: When tracing on running, in trace events could be lost when a process was rescheduled between a dirty and a normal scheduler. - Changes for 21.0.6: - http://erlang.org/download/OTP-21.0.6.README * crypto: Update the crypto engine functions to handle multiple loads of an engine. * inets: Change status code for no mod found to handle request to 501 * ssl: Correct cipher suite handling for ECDHE_*, the incorrect handling could cause an incorrrect suite to be selected and most likly fail the handshake. - Changes for 21.0.5: - http://erlang.org/download/OTP-21.0.5.README * POTENTIAL INCOMPATIBILITIES erts: Fixed a bug causing some Erlang references to be inconsistently ordered. This could for example cause failure to look up certain elements with references as keys in search data structures. This bug was introduced in R13B02. * compiler: Fixed an issue where files compiled with the +deterministic option differed if they were compiled in a different directory but were otherwise identical. * crypto: Fixed a node crash in crypto:compute_key(ecdh, ...) when passing a wrongly typed Others argument. * erts: Fixed a bug which caused an emulator crash when enif_send() was called by a NIF that executed on a dirty scheduler. The bug was either triggered when the NIF called enif_send() without a message environment, or when the process executing the NIF was send traced. - Changes for 21.0.4: - http://erlang.org/download/OTP-21.0.4.README * erts: Fixed a crash when matching directly against a literal map using a single key that had been saved on the stack. * erts: Fix node crash when passing a bad time option to file:read_file_info/2. - Changes for 21.0.3: - http://erlang.org/download/OTP-21.0.3.README * otp: Build support for the erlang/corba repository. * erts: Fixed a scheduler bug that caused normal schedulers to run dirty code. * erts: Fixed a bug in erlang:trace_info/2 which caused the emulator to crash when a bad argument was passed. The bug was introduced in ERTS version 10.0. - Changes for 21.0.2: - http://erlang.org/download/OTP-21.0.2.README * compiler: In rare cases involving matching of binary literal strings, the compiler could optimize away code that should be executed. * compiler:There could be an internal consistency check failure when compiling code that called map_get(Key, Map) and then updated the same map. * compiler: In rare circumstances, the compiler could crash in beam_jump when compiling a floating point operation. * erts: Fixed a rare bug that could cause processes to be scheduled after they had been freed * erts: Fixed a race condition in the inet driver that could cause receive to hang when the emulator was compiled with gcc 8. * public_key: Fix some of the keylengths in the newly generated moduli file in public_key are not universally supported. This could cause the SSH key exchange diffie-hellman-group-exchange-sha* to fail. Those keylengths are now removed. * stdlib: Fix a bug that could cause a crash when formatting a list of non-characters using the control sequences p or P and limiting the output with the option chars_limit. - Changes for 21.0.1: - http://erlang.org/download/OTP-21.0.1. * compiler:The compiler could crash when compiling a complicated function that used the binary syntax. - Changes for 21.0: - http://erlang.org/download/otp_src_21.0.readme * Erlang/OTP 21 is a new major release with new features, improvements as well as incompatibilities. * Potential Incompatibilities: - All Corba applications are now moved from the OTP repository - A new Corba repository will be created https://github.com/erlang - New applications ftp and tftp, moved from inets - ssl no longer supports 3_DES cipher suites or RSA-key exchange cipher suites by default - Erlang:monitor on a primitive node (erl_interface, jinterface, etc) will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node. * Highlights: * Erts: - Enhanced IO scalability - Support for usage of distribution controller processes for alternative transports, routing etc - compact instructions on 64bit systems for code below 4GB 20% less memory for loaded code - Rewrite of the efile-driver with NIFs and "Dirty schedulers" resulting in faster file operations non-smp VM removed - link and monitor optimized for scalability- update to 20.3.8.9: - Changes for 20.3.8.9: - http://erlang.org/download/OTP-20.3.8.9.README * Fix a regression in OTP-15204 that removed .beam file metadata - Changes for 20.3.8.8: - http://erlang.org/download/OTP-20.3.8.8.README * inets: Do not use chunked-encoding with 1xx, 204 and 304 responses when using mod_esi * inets: Add robust handling of chunked-encoded HTTP responses with an empty body (1xx, 204, 304) - Changes for 20.3.8.7: - http://erlang.org/download/OTP-20.3.8.7.README * crypto: Update the crypto engine functions to handle multiple loads of an engine * mnesia: Fixed a bug where the bag table index data was not deleted when objects were deleted.- Update to 20.3.8.6: * inets: Change status code for no mod found to handle request to 501- Update to 20.3.8.5. - Changes for 20.3.8.5: * erts: Fixed a bug causing some Erlang references to be inconsistently ordered. This could for example cause failure to look up certain elements with references as keys in search data structures. This bug was introduced in R13B02. Thanks to Simon Cornish for finding the bug and supplying a fix. * compiler: Fixed an issue where files compiled with the +deterministic option differed if they were compiled in a different directory but were otherwise identical. * crypto: Fixed a node crash in crypto:compute_key(ecdh, ...) when passing a wrongly typed Others argument. * erts: Fixed a bug which caused an emulator crash when enif_send() was called by a NIF that executed on a dirty scheduler. The bug was either triggered when the NIF called enif_send() without a message environment, or when the process executing the NIF was send traced. * erts: Fixed a bug causing some Erlang references to be inconsistently ordered. This could for example cause failure to look up certain elements with references as keys in search data structures. This bug was introduced in R13B02. Thanks to Simon Cornish for finding the bug and supplying a fix. * mnesia: When master node is set do not force a load from ram_copies replica when there are no available disc_copies, since that would load an empty table. Wait until a disk replica is available or until user explicitly force_loads the table. * mnesia: Allow to add replicas even if all other replicas are down when the other replicase are not stored on disk. * ssl: Correct handling of empty server SNI extension * ssl: Correct cipher suite handling for ECDHE_*, the incorrect handling could cause an incorrrect suite to be selected and most likly fail the handshake. - Changes for 20.3.8.4: * asn1: A bug in ASN.1 BER decoding has been fixed. When decoding a recursively enclosed term the length was not propagated to that term decoding, so if the length of the enclosed term was longer than the enclosing that error was not dectected. A hard coded C stack limitation for decoding recursive ASN.1 terms has been introduced. This is currently set to 8 kWords giving a nesting depth of about 1000 levels. Deeper terms can not be decoded, which should not be much of a real world limitation. - Changes for 20.3.8.3: * erts: Fixed a race condition in the inet driver that could cause receive to hang when the emulator was compiled with gcc8. * erts: Fix bug in generation of erl_crash.dump, which could cause VM to crash. Bug exist since erts-9.2 (OTP-20.2). * ic: Fixed potential buffer overflow bugs in oe_ei_encode_long/ulong/longlong/ulonglong functions on 64-bit architectures. These functions expect 32 bit integers as the IDL type "long" is defined as 32 bits. But there is nothing preventing user code from "breaking" the interface and pass larger values on 64-bit architectures where the C type "long" is 64 bits. * inets: Enhance error handling, that is mod_get will return 403 if a path is a directory and not a file. * kernel: Non semantic change in dist_util.erl to silence dialyzer warning. * ssl: Improve cipher suite handling correcting ECC and TLS-1.2 requierments. Backport of solution for ERL-641 * ssl: Option keyfile defaults to certfile and should be trumped with key. This failed for engine keys. - Changes for 20.3.8.2: * erl_interface: Make ei_connect and friends also accept state ok_simultaneous during handshake, which means the other node has initiated a connection setup that will be cancelled in favor of this connection. * erts: Fixed a rare bug that could cause processes to be scheduled after they had been freed. * ic: Fixed bug in ic causing potential buffer overrun in funtion oe_ei_encode_atom. Bug exists since ic-4.4.4 (OTP-20.3.4). * kernel: Fix some potential buggy behavior in how ticks are sent on inter node distribution connections. Tick is now sent to c-node even if there are unsent buffered data, as c-nodes need ticks in order to send reply ticks. The amount of sent data was also calculated wrongly when ticks were suppressed due to unsent buffered data. - Changes for 20.3.8.1: * inets: Options added for setting low-level properties on the underlying TCP connections. The options are: sock_ctrl, sock_data_act and sock_data_pass. See the manual for details. * ssh: SFTP clients reported the error reason "" if a non-OTP sftp server was killed during a long file transmission. Now the signal name (for example "KILL") will be the error reason if the server's reason is empty. The documentation also lacked type information about this class of errors. * ssh: Fix ssh_sftp decode error for sftp protocol version 4 * syntax_tools: Fix a bug regarding reverting map types. - Changes for 20.3.8: * erts: Fixed bug in ets that could cause VM crash if process A terminates after fixating a table and process B deletes the table at "the same time". The table fixation could be done with ets:safe_fixtable or if process A terminates in the middle of a long running select or match call. * snmp: The Snmp MIB compiler now allows using a TEXTUAL-CONVENTION type before defining it. - Changes for 20.3.7: * erl_docgen: Update makefile so db_funcs.xsl is a part of the installed application. * erts: Fixed bug in enif_binary_to_term which could cause memory corruption for immediate terms (atoms, small integers, pids, ports, empty lists). * erts: Fixed bug in erlang:system_profile/2 that could cause superfluous {profile,_,active,_,_} messages for terminating processes. * inets: The option max_headers operated on the individual header length instead of the total length of all headers. Also headers with empty keys are now discarded. - Changes for 20.3.6: * crypto: If OPENSSL_NO_EC was set, the compilation of the crypto nifs failed. * crypto: C-compile errors for LibreSSL 2.7.0 - 2.7.2 fixed * ssh: Host key hash erroneously calculated for clients following draft-00 of RFC 4419, for example PuTTY * ssh: Renegotiation could fail in some states - Changes for 20.3.5: * erts: Fixed a crash in heart:get_cmd/0 when the stored command was too long. * ssl: Proper handling of clients that choose to send an empty answer to a certificate request. - Changes for 20.3.4: * erl_interface: Fix bug in ei_connect functions that may cause failure due to insufficient buffer space for gethostbyname_r. * erl_interface, ic: Optimize encoding/decoding for pure 7-bit ascii atoms. * inets: Fix broken options handling in httpc (ERL-441). * ssh: An ssh_sftp server (running version 6) could fail if it is told to remove a file which in fact is a directory. * ssh: Fix rare spurios shutdowns of ssh servers when receiveing {'EXIT',_,normal} messages. - Changes for 20.3.3: * sasl: When upgrading with instruction 'restart_new_emulator', the generated temporary boot file used 'kernelProcess' statements from the old release instead of the new release. This is now corrected.- Update to 20.3.2 * ssl: Added new API functions to facilitate cipher suite handling * erts, observer: More crash dump info such as: process binary virtual heap stats, full info for process causing out-of-mem during GC, more port related info, and dirty scheduler info. * inets: Add support for unix domain sockets in the http client.- Update to 20.2.2. - Changes for 20.2.2: * mnesia: Removed a quadratic behavior in startup. This change implies that backend plugins (if used) must be set when the schema is created or via configuration parameters before mnesia is started. * mnesia: Bad timing could crash mnesia after a checkpoint was deactivated and reactivated with the same checkpoint name on different tables. - Changes for 20.2.1: * ssh: Fix problem with OpenSSH 7.2 (and later) clients that has used sha1 instead of sha2 for rsa-sha-256/512 user's public keys. - Highlighted changes for 20.2: * crypto, ssl: The crypto API is extended to use private/public keys stored in an Engine for sign/verify or encrypt/decrypt operations. The ssl application provides an API to use this new engine concept in TLS. * ssh: SSH can now fetch the host key from the private keys stored in an Engine. See the crypto application for details about Engines. * ssl: A new command line option -ssl_dist_optfile has been added to facilitate specifying the many options needed when using SSL as the distribution protocol. * stdlib: Improve performance of the new string functionality when handling ASCII characters.- Update to 20.1.5: * erts: Fixed a regression in zlib:gunzip/1 that prevented it from working when the decompressed size was a perfect multiple of 16384. This regression was introduced in 20.1.1 * erts: Fixed a memory corruption bug in enif_inspect_iovec; writable binaries stayed writable after entering the iovec. * erts: Fixed a crash in enif_inspect_iovec on encountering empty binaries. * erts: zlib:deflateParams/3 will no longer return buf_error when called after zlib:deflate/2 with zlib 1.2.11. * inets: Correct the handling of location headers so that the status code is not hard coded. This should have been fixed by commit 2cc5ba70cbbc6b3ace81a2a0324417c3b65265bb but unfortunately was broken during a code refactoring and unnoticed due to a faulty placed test case. - Update to 20.1.4: * inets: Fix broken handling of POST requests * inets: Make sure ints:stop/2 of the service httpd is synchronous * inets: Honor status code returned by ESI script and modernize "location" header handling. - Update to 20.1.3: * diameter: A fault introduced in diameter 2.1 could cause decode errors to be ignored in AVPs following the header of aGrouped AVP. * erts: Added zlib:set_controlling_process/2 to move a zstream() between processes. * erts: Fix so that schedulers are bound correctly when the first available cpu is not the first detected cpu. e.g. when using "taskset -c X..Y" when X is not equal to 0. * snmp: The recbuf configuration option was not propagated correctly to the socket for the SNMP Manager.- Replace references to /var/adm/fillup-templates with new %_fillupdir macro (boo#1069468)- Update to 21.1.2: * diameter: An inadvertently removed monitor in diameter 2.1 caused the ets table diameter_reg to leak entries, and caused service restart and more to fail. * erts: Fixed bug that could cause a VM crash when a corrupt message is received on distribution channel from other node. - Update to 20.1.1: * compiler: The compiler could issue an incorrect internal consistency failure diagnostic for some complicated bit syntax maches. * erts: The new zlib module returned a data_error when inflating concatenated streams, which was incompatible with the old module's behavior of returning the uncompressed data up to the end of the first stream. * erts: zlib:gunzip/1 will no longer stop at the end of the first stream when decompressing concatenated gzip files. * ssh: Fixed broken printout * ssh: Disable aes_gcm ciphers if peer is OpenSSH 6.2 which is known to have trouble with them in some cases. - Update to 20.1: * crypto, public_key: Extend crypto and public_key functions sign and verify with: support for RSASSA-PS padding for signatures and for saltlength setting X9.31 RSA padding. sha, sha224, sha256, sha384, and sha512 for dss signatures as mentioned in NIST SP 800-57 Part 1. ripemd160 to be used for rsa signatures. A new tuple in crypto:supports/0 reports supported MAC algorithms. * diameter: Add service option decode_format to allow incoming messages to be decoded into maps instead of records. Decode performance has been improved. Add service/transport option avp_dictionaries to give better support for dictionaries only defining AVPs. * erts: Upgraded the ERTS internal PCRE library from version 8.40 to version 8.41. * erts, kernel, tools: Profiling with lock counting can now be fully toggled at runtime in the lock counting emulator (-emu_type lcnt). Everything is enabled by default to match the old behavior, but specific categories can be toggled at will with minimal runtime overhead when disabled. Refer to the documentation on lcnt:rt_mask/1 for details. * lcnt:collect and lcnt:clear will no longer block all other threads in the runtime system. This makes it possible to run the lock counting under heavier load. * erts: The zlib module has been refactored and all its operations will now yield appropriately, allowing them to be used freely in concurrent applications. * erts, tools: Add erlang:iolist_to_iovec/1, which converts an iolist() to an erlang:iovec(), which is suitable for use with enif_inspect_iovec(). * erts: Add new nif API functions for managing an I/O Queue. The added functions are: enif_ioq_create(), enif_ioq_destroy(), enif_ioq_enq_binary(), enif_ioq_enqv(), enif_ioq_deq(), enif_ioq_peek(), enif_inspect_iovec(), enif_free_iovec() * observer/crashdump_viewer: Reading of crash dumps with many binaries is optimized. A progress bar is shown when the detail view for a process is opened. The cdv script now sets ERL_CRASH_DUMP_SECONDS=0 to avoid generating a new crash dump from the node running the Crashdump Viewer. * observer: Add system statistics and limits to frontpage in observer. * public_key, ssl**: Improved error propagation and reports * ssh: A new option modify_algorithms is implemented. It enables specifying changes on the default algorithms list. See the reference manual and the SSH User's Guide chapter "Configuring algorithms in SSH". * tools/xref: The predefined Xref analysis locals_not_used now understands the -on_load() attribute and does not report unused functions. * tools/fprof: When sampling multiple processes and analyzing with totals set to true, the output now sums together all caller and callee entries which concerns the same function. Previous behaviour was to report each contributing entry separately.- Only Java 1.6 is supported by Erlang since 18.0 release- Update to 20.0.5: * erts: Fixed bug in binary_to_term and binary_to_atom that could cause VM crash. Typically happens when the last character of an UTF8 string is in the range 128 to 255, but truncated to only one byte. Bug exists in binary_to_term since ERTS version 5.10.2 (OTP_R16B01) and binary_to_atom since ERTS version 9.0 (OTP-20.0). * inets: http_uri aligned to follow RFC 3986 and not convert "+" to space when decoding URIs. * inets: Added new option max_client_body_chunk to httpd server to allow chunked delivery of PUT and POST data to mod_esi callback. Note, new mod_esi callback implementation is required. Also correct value provided by server_name environment variable.- Update to 20.0.4: * dializer: Fix a bug where merging PLT:s could lose info. The bug was introduced in Erlang/OTP 20.0. * erts: A timer internal bit-field used for storing scheduler id was too small. As a result, VM internal timer data structures could become inconsistent when using 1024 schedulers on the system. Note that systems with less than 1024 schedulers are not effected by this bug. This bug was introduced in ERTS version 7.0 (OTP 18.0). * erts: Automatic cleanup of a BIF timer, when the owner process terminated, could race with the timeout of the timer. This could cause the VM internal data structures to become inconsistent which very likely caused a VM crash. This bug was introduced in ERTS version 9.0 (OTP 20.0). - Update to 20.0.3: * asn1: Default values now work in extension for PER, so if you give the atom asn1_DEFAULT instead of a value it will become the default value. * compiler: Fail labels on guard BIFs weren't taken into account during an optimization pass, and a bug in the validation pass sometimes prevented this from being noticed when a fault occurred. * erts: Binary append operations did not check for overflow, resulting in nonsensical results when huge binaries were appended. * ssh: All unknown options are sent to the transport handler regardless of type.- Update to 20.0.2: * asn: Fixed compilation error of generated code caused by a missing quotation of function names as part of an external call for encoding. * erts: Added missing release notes for OTP-14491 ("performance bug in pre-allocators") which was included in erts-9.0.1 (OTP-20.0.1). * erts: Fixed a bug that prevented TCP sockets from being closed properly on send timeouts. * erts: Fixed bug in operator bxor causing erroneuos result when one operand is a big *negative* integer with the lowest N*W bits as zero and the other operand not larger than N*W bits. N is an integer of 1 or larger and W is 32 or 64 depending on word size. * kernel: The documentation for the 'quiet' option in disk_log:open/1 had an incorrect default value.- erlang-gs application has been depricated- Update to 20.0.1: * erts: Fixed a bug in gen_tcp:send where it never returned when repeatedly called on a remotely closed TCP socket. * erts: Fixed segfault that could happen during cleanup of aborted erlang:port_command/3 calls. A port_command is aborted if the port is closed at the same time as the port_command was issued. This bug was introduced in erts-8.0. * erts: Fixed implementation of statistics(wall_clock) and statistics(runtime) so that values do not unnecessarily wrap due to the emulator. Note that the values returned by statistics(runtime) may still wrap due to limitations in the underlying functionality provided by the operating system. * erts: Fix performance bug in pre-allocators that could cause them to permanently fall back on normal more expensive memory allocation. Pre-allocators are used for quick allocation of short lived meta data used by messages and other scheduled tasks. Bug exists since OTP_R15B02. * runtime_tools: A faulty encoding comment was added when saving trace patterns to file. This is now corrected. * stdlib: A bug in proc_lib:format() introduced in Erlang/OTP 20.0 is corrected. * stdlib: Fix string:len/1 to be compatible with previous versions. * stdlib: In OTP-20.0, the behavior of c, make, and ct_make was changed so that in some cases the beam files by default would be written to the directory where the source files were found. This is now changed back to the old behavior so beam files are by default written to current directory. - Update to 20.0.0: * Potential Incompatibilities * ERTS: * The non SMP Erlang VM is deprecated and not built by default * Remove deprecated erlang:hash/2 * erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers. * The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs * see erlang:check_process_code/3. * The NIF library reload is not supported anymore. * Atoms can now contain arbitrary unicode characters which means that the DFLAG_UTF8_ATOMS capability in the distribution protocol must be supported if an OTP 20 node should accept the connection with another node or library. Third party libraries which uses the distribution protocol need to be updated with this. * Asn1: Deprecated module and functions removed (asn1rt, asn1ct:encode/3 and decode/3) * Ssh: client only option in a call to start a daemon will now fail * Highlights * Erts: * Dirty schedulers enabled and supported on VM with SMP support. * support for “dirty” BIFs and “dirty” GC. * erlang:garbage_collect/2 for control of minor or major GC * Erlang literals are no longer copied when sending messages. * Improved performance for large ETS tables, >256 entries (except ordered_set) * erlang:system_info/1 atom_count and atom_limit * Reduced memory pressure by converting sub-binaries to heap-binaries during GC * enif_select, map an external event to message * Improvements of timers internally in the VM resulting in reduced memory consumption and more efficient administration for timers * Compiler: * Code generation for complicated guards is improved. * Warnings for repeated identical map keys. #{'a'=>1, 'b'=>2, 'a'=>3} will warn for the repeated key a. * By default there is now a warning when export_all is used. Can be disabled * Pattern matching for maps is optimized * New option deterministic to omit path to source + options info the BEAM file. * Atoms may now contain arbitrary unicode characters. * compile:file/2 has an option to include extra chunks in the BEAM file. * Misc other applications: * Significantly updated string module with unicode support and many new functions * crypto now supports OpenSSL 1.1 * Unnamed ets tables optimized * gen_fsm is deprecated and replaced by gen_statem * A new event manager to handle a subset of OS signals in Erlang * Optimized sets add_element, del_element and union * Added rand:jump/0-1 * When a gen_server crashes, the stacktrace for the client will be printed to facilitate debugging. * take/2 has been added to dict, orddict, and gb_trees. * take_any/2 has been added to gb_trees * erl_tar support for long path names and new file formats * asn1: the new maps option changes the representation of SEQUENCE to be maps instead of records * A TLS client will by default call public_key:pkix_verify_hostname/2 to verify the hostname * ssl: DTLS documented in the API, experimental * ssh: improving security, removing and adding algorithms * New math:fmod/2- Disable global PIE for erlang, code is currently not fully ready.- Update to 19.3.2: * erts: The +Bi command line argument of erl erroneously caused SIGTERM to be ignored by the VM as well as of all its child processes. This bug was introduced in erts version 8.3.- Update to 19.3.1: * crypto: Fix a bug with AES CFB 128 for 192 and 256 bit keys. Thanks to kellymclaughlin ! * erts: Trying to open a directory with file:read_file/1 on Unix leaked a file descriptor. This bug has now been fixed. * erts: Invoking init:stop/0 via the SIGTERM signal, in a non-SMP BEAM, could cause BEAM to terminate with fatal error. This has now been fixed and the BEAM will terminate normally when SIGTERM is received. * inets: Fixed a bug in ftp that made further operations after a recv_chunk operation impossible. * ssh: ssh:daemon_info/1 crashed if the listening IP was not 'any' * ssl: Correct active once emulation, for TLS. Now all data received by the connection process will be delivered through active once, even when the active once arrives after that the gen_tcp socket is closed by the peer.- Changes since 19.2: * crypto, ssh: The implementation of the key exchange algorithms diffie-hellman-group-exchange-sha* are optimized, up to a factor of 11 for the slowest ( = biggest and safest) group size. * dialyzer: The peak memory consumption is reduced. Analyzing modules with binary construction with huge strings is now much faster. * erts: A received SIGTERM signal to beam will generate a 'stop' message to the init process and terminate the Erlang VM nicely. This is equivalent to calling init:stop/0. * kernel: The functions in the file module that take a list of paths (e.g. file:path_consult/2) will now continue to search in the path if the path contains something that is not a directory. * kernel: Two OTP processes that are known to receive many messages are rex (used by rpc) and error_logger. Those processes will now store unprocessed messages outside the process heap, which will potentially decrease the cost of garbage collections. * public_key: New function pkix_verify_hostname/2,3 implements certificate hostname checking. See the manual and RFC 6125.- * public_key, ssh: The ssh host key fingerprint generation now also takes a list of algorithms and returns a list of corresponding fingerprints. See public_key:ssh_hostkey_fingerprint/2 and the option silently_accept_hosts in ssh:connect. * ssl: Move PEM cache to a dedicated process, to avoid making the SSL manager process a bottleneck. This improves scalability of TLS connections. * stdlib: filename:safe_relative_path/1 to sanitize a relative path has been added.- Add missed scripts requires for erlang-epmd package- Update to 19.2.2: * mnesia: Fixed crash in checkpoint handling when table was deleted during backup.- Update to 19.2: * stdlib: The new behaviour gen_statem has been improved with 3 new features: the possibility to use old style non-proxy timeouts for gen_statem:call/2,3, state entry code, and state timeouts. These are backwards compatible. Minor code and documentation improvements has been performed including a borderline semantics correction of timeout zero handling. * ssl: Experimental version of DTLS. It is runnable but not complete and cannot be considered reliable for production usage. To use DTLS add the option {protocol, dtls} to ssl:connect and ssl:listen. * ssh: Extended the option silently_accept_hosts for ssh:connect to make it possible for the client to check the SSH host key fingerprint string. Se the reference manual for SSH. * ~40 contributions since the previous service release OTP 19.1- Update to 19.1: * erts: Improved dirty scheduler support. A purge of a module will not have to wait for completion of all ongoing dirty NIF calls * erts: Improved accuracy of timeouts on MacOS X * kernel: Add net_kernel:setopts/2 and net_kernel:getopts/2 to control options for distribution sockets in runtime * asn1: Compiling multiple ASN.1 modules in the same directory with parallel make (make -j) should now be safe * httpd: support for PUT and DELETE in mod_esi * ~30 contributions since 19.0- Update to 19.0.4: * erts: Fixed a race that could cause a lost wakeup of a process that timed out in a receive ... after. This bug was introduced in ERTS version 7.0. * erts: Fixed segfault after writing an erl crash dump.- Update to 19.0: * compiler, stdlib: New preprocessor macros *?FUNCTION_NAME, ?FUNCTION_ARITY*. New preprocessor directives -error(Term) and - warning(Term) to cause a compilation error or warning, respectively. * gen_statem: a new state machine behavior * mnesia_ext: plugin of external storage solutions to mnesia * crypto: uses EVP interface in OpenSSL resulting in generally better performance and support for HW acceleration * ssh: performance improvements, uses the new gen_statem behavior * ssl: enhanced error log messages * dialyzer: the support for maps is very much extended both the type specification syntax and the type analysis. * erts: erlang:open_port(spawn, ...) 3-5 times faster * erts/kernel: Experimental support for Unix Domain Sockets * ose: Deprecated application has been removed * webtool: Deprecated application has been removed * test_server: Deprecated application has been removed, use common_test instead- Do not suppress errors from useradd/groupadd - Orthographic/typographical fixes- Update to 18.3.4: * inets: Handle multiple \t in mime types file * ssl: Correct ssl:prf/5 to use the negotiated cipher suite's prf function in ssl:prf/5 instead of the default prf. * ssl: Timeouts may have the value 0, guards have been corrected to allow this * ssl: Change of internal handling of hash sign pairs as the used one enforced to much restrictions making some valid combinations unavailable. * ssl: Create a little randomness in sending of session invalidation messages, to mitigate load when whole table is invalidated.- Return diameter application: as for 18.3.3 it is distributed under APL license- Update to 18.3.3: * common_test: The nodelay option used to be enabled (true) by default for sockets opened by the Common Test telnet client. * common_test: Fix bug in cth_surefire * common_test: The ct:get_timetrap_info/0 function has been updated to return more information about timetrap scaling. * common_test: A problem with stylesheet HTML tags getting incorrectly escaped by Common Test has been corrected. * common_test: The ct_run start flag -no_esc_chars and ct:run_test/1 start option {esc_chars,Bool} have been introduced. * inets: Put back unused module inets_regexp * ssl: Correct cipher suites conversion and gaurd expression.- Update to 18.3.2: * inets: Add environment information item peer_cert to mod_esi * ssl: Corrections to cipher suite handling using the 3 and 4 tuple format * ssl: Make values for the TLS-1.2 signature_algorithms extension configurable- Update to 18.3: * New statistics info about runnable and active processes & ports. Call erlang:statistics with: total_run_queue_lengths | run_queue_lengths | total_active_tasks | active_tasks. * Time warp improvements: dbg:p/2 and erlang:trace/3 with monotonic_timestamp |strict_monotonic_timestamp. * Introduced a validation callback for heart. * The module overload in sasl has been deprecated. * several bug fixes- Update to 18.2.3: * inets: mod_alias now traverses all aliases picking the longest match and not the first match.- Update to 18.2.2: * ssh: The authentication method 'keyboard-interactive' failed in the Erlang client when the server after successful authentication continued by asking for zero more passwords.- Update to 18.2.1: * Due to a bug in the handling of paths on windows none of the following would work with paths containing a space: ct_run dialyzer erlc escript typer This also contains a fix for HiPE enabled emulator for FreeBSD. - Update to 18.2: * ssl: Add configurable upper limit for session cache. erts: Add function enif_getenv to read OS environment variables in a portable way from NIFs. * kernel: Add {line_delim, byte()} option to inet:setopts/2 and decode_packet/3 * ssh: The 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384' and 'ecdsa-sha2-nistp521' signature algorithms for ssh are implemented. See RFC5656. * ssh: The ssh:daemon option dh_gex_groups is extended to read a user provided ssh moduli file with generator-modulus pairs. The file is in openssh format.- disable hipe on s390/s390x to fix build- Update to 18.1.3: * ssl: Add possibility to downgrade an SSL/TLS connection to a tcp connection, and give back the socket control to a user process. * ssh: The following new key exchange algorithms are implemented:'ecdh-sha2-nistp256', 'ecdh-sha2-nistp384', 'ecdh-sha2-nistp521','diffie-hellman-group14-sha1', 'diffie-hellman-group-exchange-sha1' and 'diffie-hellman-group-exchange-sha256'. This raises the security level considerably. * kernel,stdlib,sasl: A mechanism for limiting the amount of text that the built-in error logger events will produce has been introduced. It is useful for limiting both the size of log files and the CPU time used to produce them. This mechanism is experimental in the sense that it may be changed based on feedback. See config parameter error_logger_format_depth in the Kernel application. - Removed erts_fix_unlock_status_lock.patch: fixed in upstream- Rework wxWidgets BuildRequire: fix build for Leap 42.1- update to 18.0.3: * erts: Fixed a binary memory leak when printing to shell using the tty driver (i.e. not -oldshell). * erts: Fix a bug where the standard error port sometimes crashes with eagain as the reason.- add erts_fix_unlock_status_lock.patch to fix a rare deadlock in erts- fix RHEL/CentOS 7 build- update to 18.0.2: * Fix processes ending up in an inconsistent half exited state in the runtime system without SMP support * Remove unnecessary copying of data when retrieving corrected Erlang monotonic time. * POTENTIAL INCOMPATIBILITY: Change default OS monotonic clock source chosen at build time. This in order to improve performance. The behavior will now on most systems be that (both OS and Erlang) monotonic time stops when the system is suspended. (changeable via the - -enable-prefer-elapsed-monotonic-time-during-suspend configure parameter) * Fix erlang:system_info(end_time) returning a faulty value on 32-bit architectures. * Fix the trace_file_drv not handling EINTR correctly which caused it to fail when the runtime system received a signal.- update to 18.0.1: * Fix a rare hanging of the VM seen to happen just after emulator start. Bug exists since R14.- update to 18.0: * new license: APL 2.0 (Apache Public License) * erts: The time functionality has been extended. This includes a new API for time, as well as "time warp" modes which alters the behavior when system time changes. You are strongly encouraged to use the new API instead of the old API based on erlang:now/0. erlang:now/0 has been deprecated since it is a scalability bottleneck. See http://www.erlang.org/doc/apps/erts/time_correction.html * erts: Beside the API changes and time warp modes a lot of scalability and performance improvements regarding time management has been made. Examples are: + scheduler specific timer wheels, + scheduler specific BIF timer management, + parallel retrieval of monotonic time and system time on OS:es that support it. * erts: The previously introduced "eager check I/O" feature is now enabled by default. * erts/compiler: enhanced support for maps. Big maps new uses a HAMT (Hash Array Mapped Trie) representation internally which makes them more efficient. There is now also support for variables as map keys. * dialyzer: The -dialyzer() attribute can be used for suppressing warnings in a module by specifying functions or warning options. It can also be used for requesting warnings in a module. * ssl: Remove default support for SSL-3.0 and added padding check for TLS-1.0 due to the Poodle vulnerability. * ssl: Remove default support for RC4 cipher suites, as they are consider too weak. * stdlib: Allow maps for supervisor flags and child specs * stdlib: New functions in ets: + take/2: Works the same as ets:delete/2 but also returns the deleted object(s). + update_counter/4 with a default object as argument- update to 17.5.6: * Fix broken relay counters * Fix diameter_sctp listener race - fix build for SLE_12- Update to 17.5.4- fix systemd service files for epmd: * fix stop of epmd (epmd -kill is deprecated and ignored, so stop hangs)- Update to 17.5: * ERTS: Added command line argument option for setting the initial size of process dictionaries. * Diameter: configurable incoming_max len and string_decode for diameter messages * Bugfixes and minor small features in applications such as compiler, common_test, crypto, debugger, eldap, erts, hipe, inets, ssh, ssl, ... - remoce ct-fix_incl-dirs.patch (included upstream)- add ct-fix_incl-dirs.patch (upstream patch for common test)- Version 17.4: * eldap: Nearly all TCP options are possible to give in the eldap:open/2 call. * ssh: Added API functions ptty_alloc/3 and ptty_alloc/4, to allocate a pseudo tty. * ssl: Handle servers that may send an empty SNI extension to the client.- use wxWidgets 3.0- fix bashisms in pre scripth02-armsrv1 1717990444  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'():;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~klmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY26.2.1-150300.7.5.126.2.1-150300.7.5.1  !!!!!!!"""""""""""""""""""""""""""""""""""""""""""""#######$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&'((')))))))))))))))))))))))))))'**********************'++',,,,,,,'--------------------------'..../00000000000000000000000000000000122133334555555555556777789999999999999:;;;;;;;;;;;;<==================>?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?AAAA?BBBBBBBBBBB?CCCCCCCCCCCCCCCCCCCC?DDDDDDDDDDDDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKLLLLLLLLLMNNNNNNNNNOPPPPPPPPPPPPPPPPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRc_srcasn1_erl_nif.csrcasn1.app.srcasn1.appup.srcasn1_db.erlasn1_records.hrlasn1ct.erlasn1ct_check.erlasn1ct_constructed_ber_bin_v2.erlasn1ct_constructed_per.erlasn1ct_eval_ext.erlasn1ct_func.erlasn1ct_gen.erlasn1ct_gen_ber_bin_v2.erlasn1ct_gen_check.erlasn1ct_gen_jer.erlasn1ct_gen_per.erlasn1ct_imm.erlasn1ct_name.erlasn1ct_parser2.erlasn1ct_pretty_format.erlasn1ct_rtt.erlasn1ct_table.erlasn1ct_tok.erlasn1ct_value.erlasn1rt_nif.erlsrcct.erlct_config.erlct_config_plain.erlct_config_xml.erlct_conn_log_h.erlct_cover.erlct_default_gl.erlct_event.erlct_framework.erlct_ftp.erlct_gen_conn.erlct_groups.erlct_hooks.erlct_hooks_lock.erlct_logs.erlct_make.erlct_master.erlct_master_event.erlct_master_logs.erlct_master_status.erlct_netconfc.erlct_netconfc.hrlct_property_test.erlct_release_test.erlct_repeat.erlct_rpc.erlct_run.erlct_slave.erlct_snmp.erlct_ssh.erlct_suite.erlct_telnet.erlct_telnet_client.erlct_testspec.erlct_util.erlct_util.hrlcth_conn_log.erlcth_log_redirect.erlcth_surefire.erlerl2html2.erltest_server.erltest_server_ctrl.erltest_server_gl.erltest_server_io.erltest_server_node.erltest_server_sup.erlunix_telnet.erlsrcbeam_a.erlbeam_asm.erlbeam_asm.hrlbeam_block.erlbeam_bounds.erlbeam_call_types.erlbeam_clean.erlbeam_dict.erlbeam_digraph.erlbeam_disasm.erlbeam_disasm.hrlbeam_flatten.erlbeam_jump.erlbeam_kernel_to_ssa.erlbeam_listing.erlbeam_opcodes.erlbeam_opcodes.hrlbeam_ssa.erlbeam_ssa.hrlbeam_ssa_alias.erlbeam_ssa_bc_size.erlbeam_ssa_bool.erlbeam_ssa_bsm.erlbeam_ssa_check.erlbeam_ssa_codegen.erlbeam_ssa_dead.erlbeam_ssa_lint.erlbeam_ssa_opt.erlbeam_ssa_opt.hrlbeam_ssa_pp.erlbeam_ssa_pre_codegen.erlbeam_ssa_private_append.erlbeam_ssa_recv.erlbeam_ssa_share.erlbeam_ssa_throw.erlbeam_ssa_type.erlbeam_trim.erlbeam_types.erlbeam_types.hrlbeam_utils.erlbeam_validator.erlbeam_z.erlcerl.erlcerl_clauses.erlcerl_inline.erlcerl_trees.erlcompile.erlcore_lib.erlcore_lint.erlcore_parse.erlcore_parse.hrlcore_parse.yrlcore_pp.erlcore_scan.erlerl_bifs.erlrec_env.erlsys_core_alias.erlsys_core_bsm.erlsys_core_fold.erlsys_core_fold_lists.erlsys_core_inline.erlsys_core_prepare.erlsys_messages.erlsys_pre_attributes.erlv3_core.erlv3_kernel.erlv3_kernel.hrlv3_kernel_pp.erlsrccrypto.erlcrypto_ec_curves.erlsrcedoc.erledoc.hrledoc_cli.erledoc_data.erledoc_doclet.erledoc_doclet.hrledoc_doclet_chunks.erledoc_extract.erledoc_layout.erledoc_layout_chunks.erledoc_lib.erledoc_macros.erledoc_parser.erledoc_parser.yrledoc_refs.erledoc_report.erledoc_run.erledoc_scanner.erledoc_specs.erledoc_tags.erledoc_types.erledoc_types.hrledoc_wiki.erlsrceldap.erlsrcdocgen_edoc_xml_cb.erldocgen_otp_specs.erldocgen_xmerl_xml_cb.erldocgen_xml_to_chunk.erlsrcMakefileMakefile.inREADMEREADME.internalauxdirconnectei_connect.cei_connect_int.hei_resolve.cei_resolve.heirecv.ceirecv.heisend.hsend.csend_exit.csend_reg.cdecodedecode_atom.cdecode_big.cdecode_bignum.cdecode_binary.cdecode_boolean.cdecode_char.cdecode_double.cdecode_fun.cdecode_intlist.cdecode_iodata.cdecode_list_header.cdecode_long.cdecode_longlong.cdecode_pid.cdecode_port.cdecode_ref.cdecode_skip.cdecode_skip.hdecode_string.cdecode_trace.cdecode_tuple_header.cdecode_ulong.cdecode_ulonglong.cdecode_version.ceidefs.mkencodeeicode.hencode_atom.cencode_big.cencode_bignum.cencode_binary.cencode_boolean.cencode_char.cencode_double.cencode_fun.cencode_list_header.cencode_long.cencode_longlong.cencode_pid.cencode_port.cencode_ref.cencode_string.cencode_trace.cencode_tuple_header.cencode_ulong.cencode_ulonglong.cencode_version.cepmdei_epmd.hepmd_port.cepmd_publish.cepmd_unpublish.cglobalglobal_names.cglobal_register.cglobal_unregister.cglobal_whereis.cmiscei_cmp_nc.cei_compat.cei_decode_term.cei_decode_term.hei_format.cei_format.hei_init.cei_internal.hei_locking.cei_locking.hei_malloc.cei_malloc.hei_portio.cei_portio.hei_printterm.cei_printterm.hei_pthreads.cei_trace.cei_trace.hei_x_encode.cei_x_encode.heidef.heiext.hget_type.cputget.hshow_msg.cshow_msg.hprogei_fake_prog.cerl_call.csrcatomics.erlcounters.erlerl_init.erlerl_prim_loader.erlerl_tracer.erlerlang.erlerts_code_purger.erlerts_dirty_process_signal_handler.erlerts_internal.erlerts_literal_area_collector.erlinit.erlpersistent_term.erlprim_buffer.erlprim_eval.Sprim_eval.erlprim_file.erlprim_inet.erlprim_net.erlprim_socket.erlprim_zip.erlsocket_registry.erlzlib.erlsrceunit.erleunit_autoexport.erleunit_data.erleunit_internal.hrleunit_lib.erleunit_listener.erleunit_proc.erleunit_serial.erleunit_server.erleunit_striptests.erleunit_surefire.erleunit_test.erleunit_tests.erleunit_tty.erlsrcftp.erlftp_app.erlftp_internal.erlftp_progress.erlftp_response.erlftp_sup.erlsrchttp_clienthttpc.erlhttpc_cookie.erlhttpc_handler.erlhttpc_handler_sup.erlhttpc_internal.hrlhttpc_manager.erlhttpc_profile_sup.erlhttpc_request.erlhttpc_response.erlhttpc_sup.erlhttp_libhttp_chunk.erlhttp_internal.hrlhttp_request.erlhttp_response.erlhttp_transport.erlhttp_uri.erlhttp_util.erlhttp_serverhttpd.erlhttpd.hrlhttpd_acceptor.erlhttpd_acceptor_sup.erlhttpd_cgi.erlhttpd_conf.erlhttpd_connection_sup.erlhttpd_custom.erlhttpd_custom_api.erlhttpd_esi.erlhttpd_example.erlhttpd_file.erlhttpd_instance_sup.erlhttpd_internal.hrlhttpd_log.erlhttpd_logger.erlhttpd_manager.erlhttpd_misc_sup.erlhttpd_request.erlhttpd_request_handler.erlhttpd_response.erlhttpd_script_env.erlhttpd_socket.erlhttpd_sup.erlhttpd_util.erlmod_actions.erlmod_alias.erlmod_auth.erlmod_auth.hrlmod_auth_dets.erlmod_auth_mnesia.erlmod_auth_plain.erlmod_auth_server.erlmod_cgi.erlmod_dir.erlmod_disk_log.erlmod_esi.erlmod_get.erlmod_head.erlmod_log.erlmod_range.erlmod_responsecontrol.erlmod_security.erlmod_security_server.erlmod_trace.erlinets_appinets.erlinets_app.erlinets_internal.hrlinets_lib.erlinets_service.erlinets_sup.erlinets_trace.erlsrcapplication.erlapplication_controller.erlapplication_master.erlapplication_master.hrlapplication_starter.erlauth.erlcode.erlcode_server.erldisk_log.erldisk_log.hrldisk_log_1.erldisk_log_server.erldisk_log_sup.erldist_ac.erldist_util.erlerl_boot_server.erlerl_compile_server.erlerl_ddll.erlerl_distribution.erlerl_epmd.erlerl_epmd.hrlerl_erts_errors.erlerl_kernel_errors.erlerl_reply.erlerl_signal_handler.erlerpc.erlerror_handler.erlerror_logger.erlerts_debug.erlfile.erlfile_int.hrlfile_io_server.erlfile_server.erlgen_sctp.erlgen_tcp.erlgen_tcp_socket.erlgen_udp.erlgen_udp_socket.erlglobal.erlglobal_group.erlglobal_search.erlgroup.erlgroup_history.erlheart.erlinet.erlinet6_sctp.erlinet6_tcp.erlinet6_tcp_dist.erlinet6_udp.erlinet_boot.hrlinet_config.erlinet_config.hrlinet_db.erlinet_dns.erlinet_dns.hrlinet_dns_record_adts.hrlinet_epmd_dist.erlinet_epmd_socket.erlinet_gethost_native.erlinet_hosts.erlinet_int.hrlinet_parse.erlinet_res.erlinet_res.hrlinet_sctp.erlinet_tcp.erlinet_tcp_dist.erlinet_udp.erlkernel.erlkernel_config.erlkernel_refc.erllocal_tcp.erllocal_udp.erllogger.erllogger_backend.erllogger_config.erllogger_disk_log_h.erllogger_filters.erllogger_formatter.erllogger_h_common.erllogger_h_common.hrllogger_handler_watcher.erllogger_internal.hrllogger_olp.erllogger_olp.hrllogger_proxy.erllogger_server.erllogger_simple_h.erllogger_std_h.erllogger_sup.erlnet.erlnet_adm.erlnet_kernel.erlos.erlpg.erlpg2.erlprim_tty.erlram_file.erlraw_file_io.erlraw_file_io_compressed.erlraw_file_io_deflate.erlraw_file_io_delayed.erlraw_file_io_inflate.erlraw_file_io_list.erlrpc.erlseq_trace.erlsocket.erlstandard_error.erluser_drv.erluser_sup.erlwrap_log_reader.erlsrcappmegaco.erlmegaco_internal.hrlbinaryMEDIA-GATEWAY-CONTROL-v1.asnMEDIA-GATEWAY-CONTROL-v2.asnMEDIA-GATEWAY-CONTROL-v3.asnmegaco_ber_encoder.erlmegaco_ber_media_gateway_control_v1.erlmegaco_ber_media_gateway_control_v1.hrlmegaco_ber_media_gateway_control_v2.erlmegaco_ber_media_gateway_control_v2.hrlmegaco_ber_media_gateway_control_v3.erlmegaco_ber_media_gateway_control_v3.hrlmegaco_binary_encoder.erlmegaco_binary_encoder_lib.erlmegaco_binary_name_resolver_v1.erlmegaco_binary_name_resolver_v2.erlmegaco_binary_name_resolver_v3.erlmegaco_binary_term_id.erlmegaco_binary_term_id_gen.erlmegaco_binary_transformer_v1.erlmegaco_binary_transformer_v2.erlmegaco_binary_transformer_v3.erlmegaco_per_encoder.erlmegaco_per_media_gateway_control_v1.erlmegaco_per_media_gateway_control_v1.hrlmegaco_per_media_gateway_control_v2.erlmegaco_per_media_gateway_control_v2.hrlmegaco_per_media_gateway_control_v3.erlmegaco_per_media_gateway_control_v3.hrlenginemegaco_config.erlmegaco_config_misc.erlmegaco_digit_map.erlmegaco_edist_compress.erlmegaco_encoder.erlmegaco_erl_dist_encoder.erlmegaco_erl_dist_encoder_mc.erlmegaco_filter.erlmegaco_message_internal.hrlmegaco_messenger.erlmegaco_messenger_misc.erlmegaco_misc_sup.erlmegaco_monitor.erlmegaco_sdp.erlmegaco_stats.erlmegaco_sup.erlmegaco_timer.erlmegaco_trans_sender.erlmegaco_trans_sup.erlmegaco_transport.erlmegaco_user.erlmegaco_user_default.erlflexmegaco_flex_scanner.erlmegaco_flex_scanner_handler.erltcpmegaco_tcp.erlmegaco_tcp.hrlmegaco_tcp_accept.erlmegaco_tcp_accept_sup.erlmegaco_tcp_connection.erlmegaco_tcp_connection_sup.erlmegaco_tcp_sup.erltextmegaco_compact_text_encoder.erlmegaco_compact_text_encoder_v1.erlmegaco_compact_text_encoder_v2.erlmegaco_compact_text_encoder_v3.erlmegaco_pretty_text_encoder.erlmegaco_pretty_text_encoder_v1.erlmegaco_pretty_text_encoder_v2.erlmegaco_pretty_text_encoder_v3.erlmegaco_text_gen_v1.hrlmegaco_text_gen_v2.hrlmegaco_text_gen_v3.hrlmegaco_text_mini_decoder.erlmegaco_text_mini_parser.erlmegaco_text_mini_parser.hrlmegaco_text_mini_parser.yrlmegaco_text_parser_v1.erlmegaco_text_parser_v1.hrlmegaco_text_parser_v1.yrlmegaco_text_parser_v2.erlmegaco_text_parser_v2.hrlmegaco_text_parser_v2.yrlmegaco_text_parser_v3.erlmegaco_text_parser_v3.hrlmegaco_text_parser_v3.yrlmegaco_text_scanner.erlmegaco_text_tokens.hrludpmegaco_udp.erlmegaco_udp.hrlmegaco_udp_server.erlmegaco_udp_sup.erlsrcmnesia.erlmnesia.hrlmnesia_app.erlmnesia_backend_type.erlmnesia_backup.erlmnesia_bup.erlmnesia_checkpoint.erlmnesia_checkpoint_sup.erlmnesia_controller.erlmnesia_dumper.erlmnesia_event.erlmnesia_ext_sup.erlmnesia_frag.erlmnesia_frag_hash.erlmnesia_index.erlmnesia_kernel_sup.erlmnesia_late_loader.erlmnesia_lib.erlmnesia_loader.erlmnesia_locker.erlmnesia_log.erlmnesia_monitor.erlmnesia_recover.erlmnesia_registry.erlmnesia_rpc.erlmnesia_schema.erlmnesia_snmp_hook.erlmnesia_sp.erlmnesia_subscr.erlmnesia_sup.erlmnesia_text.erlmnesia_tm.erlc_srcodbcserver.codbcserver.hsrcodbc.erlodbc_app.erlodbc_internal.hrlodbc_sup.erlsrccpu_sup.ccpu_sup.erldisksup.erlmemsup.cmemsup.erlmemsup.hrlnteventlog.erlos_mon.erlos_mon_mib.erlos_mon_sysinfo.erlos_sup.erlsrcleex.erlyecc.erlyeccparser.erlyeccscan.erlsrcOTP-PUB-KEY.erlPKCS-FRAME.erlpubkey_cert.erlpubkey_cert_records.erlpubkey_crl.erlpubkey_moduli.hrlpubkey_ocsp.erlpubkey_os_cacerts.erlpubkey_pbe.erlpubkey_pem.erlpubkey_policy_tree.erlpubkey_ssh.erlpublic_key.erlsrcappmon_info.erldbg.erldyntrace.erlerts_alloc_config.erlinstrument.erlmsacc.erlobserver_backend.erlruntime_tools.erlruntime_tools_sup.erlscheduler.erlsystem_information.erlttb_autostart.erlsrcalarm_handler.erlerlsrv.erlformat_lib_supp.erlmisc_supp.erlrb.erlrb_format_supp.erlrelease_handler.erlrelease_handler_1.erlsasl.erlsasl_report.erlsasl_report_file_h.erlsasl_report_tty_h.erlsystools.erlsystools.hrlsystools_lib.erlsystools_make.erlsystools_rc.erlsystools_relup.erlsrcagentsnmp_community_mib.erlsnmp_framework_mib.erlsnmp_generic.erlsnmp_generic_mnesia.erlsnmp_index.erlsnmp_notification_mib.erlsnmp_shadow_table.erlsnmp_standard_mib.erlsnmp_target_mib.erlsnmp_user_based_sm_mib.erlsnmp_view_based_acm_mib.erlsnmpa.erlsnmpa_acm.erlsnmpa_agent.erlsnmpa_agent_sup.erlsnmpa_app.erlsnmpa_atl.hrlsnmpa_authentication_service.erlsnmpa_conf.erlsnmpa_discovery_handler.erlsnmpa_discovery_handler_default.erlsnmpa_error.erlsnmpa_error_io.erlsnmpa_error_logger.erlsnmpa_error_report.erlsnmpa_get.erlsnmpa_get_lib.erlsnmpa_get_mechanism.erlsnmpa_internal.hrlsnmpa_local_db.erlsnmpa_mib.erlsnmpa_mib_data.erlsnmpa_mib_data_tttn.erlsnmpa_mib_lib.erlsnmpa_mib_storage.erlsnmpa_mib_storage_dets.erlsnmpa_mib_storage_ets.erlsnmpa_mib_storage_mnesia.erlsnmpa_misc_sup.erlsnmpa_mpd.erlsnmpa_net_if.erlsnmpa_net_if_filter.erlsnmpa_network_interface.erlsnmpa_network_interface_filter.erlsnmpa_notification_delivery_info_receiver.erlsnmpa_notification_filter.erlsnmpa_set.erlsnmpa_set_lib.erlsnmpa_set_mechanism.erlsnmpa_supervisor.erlsnmpa_svbl.erlsnmpa_symbolic_store.erlsnmpa_target_cache.erlsnmpa_trap.erlsnmpa_usm.erlsnmpa_vacm.erlsnmpa_vacm.hrlappsnmp.erlsnmp_app.erlsnmp_app_sup.erlsnmp_internal.hrlcompilersnmpc.erlsnmpc.hrlsnmpc.srcsnmpc_lib.erlsnmpc_lib.hrlsnmpc_mib_gram.erlsnmpc_mib_gram.yrlsnmpc_mib_to_hrl.erlsnmpc_misc.erlsnmpc_misc.hrlsnmpc_tok.erlmanagersnmpm.erlsnmpm_atl.hrlsnmpm_conf.erlsnmpm_config.erlsnmpm_internal.hrlsnmpm_misc_sup.erlsnmpm_mpd.erlsnmpm_net_if.erlsnmpm_net_if_filter.erlsnmpm_net_if_mt.erlsnmpm_network_interface.erlsnmpm_network_interface_filter.erlsnmpm_server.erlsnmpm_server_sup.erlsnmpm_supervisor.erlsnmpm_user.erlsnmpm_user_default.erlsnmpm_user_old.erlsnmpm_usm.erlsnmpm_usm.hrlmiscsnmp_conf.erlsnmp_config.erlsnmp_debug.hrlsnmp_log.erlsnmp_mini_mib.erlsnmp_misc.erlsnmp_note_store.erlsnmp_pdus.erlsnmp_usm.erlsnmp_usm.hrlsnmp_verbosity.erlsnmp_verbosity.hrlsrcssh.erlssh.hrlssh_acceptor.erlssh_acceptor_sup.erlssh_agent.erlssh_agent.hrlssh_app.erlssh_auth.erlssh_auth.hrlssh_bits.erlssh_channel.erlssh_channel_sup.erlssh_cli.erlssh_client_channel.erlssh_client_key_api.erlssh_connect.hrlssh_connection.erlssh_connection_handler.erlssh_daemon_channel.erlssh_dbg.erlssh_file.erlssh_fsm.hrlssh_fsm_kexinit.erlssh_fsm_userauth_client.erlssh_fsm_userauth_server.erlssh_info.erlssh_io.erlssh_lib.erlssh_message.erlssh_no_io.erlssh_options.erlssh_server_channel.erlssh_server_key_api.erlssh_sftp.erlssh_sftpd.erlssh_sftpd_file.erlssh_sftpd_file_api.erlssh_shell.erlssh_subsystem_sup.erlssh_system_sup.erlssh_tcpip_forward_acceptor.erlssh_tcpip_forward_acceptor_sup.erlssh_tcpip_forward_client.erlssh_tcpip_forward_srv.erlssh_transport.erlssh_transport.hrlssh_xfer.erlssh_xfer.hrlsrcdtls_connection.erldtls_connection.hrldtls_connection_sup.erldtls_gen_connection.erldtls_handshake.erldtls_handshake.hrldtls_listener_sup.erldtls_packet_demux.erldtls_record.erldtls_record.hrldtls_server_session_cache_sup.erldtls_server_sup.erldtls_socket.erldtls_sup.erldtls_v1.erlinet6_tls_dist.erlinet_tls_dist.erlssl.erlssl_admin_sup.erlssl_alert.erlssl_alert.hrlssl_api.hrlssl_app.erlssl_certificate.erlssl_cipher.erlssl_cipher.hrlssl_cipher_format.erlssl_client_session_cache_db.erlssl_config.erlssl_connection.hrlssl_connection_sup.erlssl_crl.erlssl_crl_cache.erlssl_crl_cache_api.erlssl_crl_hash_dir.erlssl_dh_groups.erlssl_dist_admin_sup.erlssl_dist_connection_sup.erlssl_dist_sup.erlssl_gen_statem.erlssl_handshake.erlssl_handshake.hrlssl_internal.hrlssl_listen_tracker_sup.erlssl_logger.erlssl_manager.erlssl_pem_cache.erlssl_pkix_db.erlssl_record.erlssl_record.hrlssl_server_session_cache.erlssl_server_session_cache_db.erlssl_server_session_cache_sup.erlssl_session.erlssl_session_cache_api.erlssl_srp.hrlssl_srp_primes.erlssl_sup.erlssl_trace.erlssl_upgrade_server_session_cache_sup.erltls_bloom_filter.erltls_client_connection_1_3.erltls_client_ticket_store.erltls_connection.erltls_connection.hrltls_connection_sup.erltls_dist_server_sup.erltls_dist_sup.erltls_dtls_connection.erltls_dyn_connection_sup.erltls_gen_connection.erltls_gen_connection_1_3.erltls_handshake.erltls_handshake.hrltls_handshake_1_3.erltls_handshake_1_3.hrltls_record.erltls_record.hrltls_record_1_3.erltls_record_1_3.hrltls_sender.erltls_server_connection_1_3.erltls_server_session_ticket.erltls_server_session_ticket_sup.erltls_server_sup.erltls_socket.erltls_sup.erltls_v1.erlsrcargparse.erlarray.erlbase64.erlbeam_lib.erlbinary.erlc.erlcalendar.erldets.erldets.hrldets_server.erldets_sup.erldets_utils.erldets_v9.erldict.erldigraph.erldigraph_utils.erledlin.erledlin_context.erledlin_expand.erledlin_key.erledlin_type_suggestion.erlepp.erlerl_abstract_code.erlerl_anno.erlerl_bits.erlerl_compile.erlerl_error.erlerl_eval.erlerl_expand_records.erlerl_features.erlerl_internal.erlerl_lint.erlerl_parse.erlerl_parse.yrlerl_posix_msg.erlerl_pp.erlerl_scan.erlerl_stdlib_errors.erlerl_tar.erlerl_tar.hrlerror_logger_file_h.erlerror_logger_tty_h.erlescript.erlets.erleval_bits.erlfile_sorter.erlfilelib.erlfilename.erlgb_sets.erlgb_trees.erlgen.erlgen_event.erlgen_fsm.erlgen_server.erlgen_statem.erlio.erlio_lib.erlio_lib_format.erlio_lib_fread.erlio_lib_pretty.erllists.erllog_mf_h.erlmaps.erlmath.erlms_transform.erlorddict.erlordsets.erlotp_internal.erlotp_internal.hrlpeer.erlpool.erlproc_lib.erlproplists.erlqlc.erlqlc_pt.erlqueue.erlrand.erlrandom.erlre.erlsets.erlshell.erlshell_default.erlshell_docs.erlslave.erlsofs.erlstring.erlsupervisor.erlsupervisor_bridge.erlsys.erltimer.erlunicode.erlunicode_util.erluri_string.erlwin32reg.erlzip.erlsrcepp_dodger.erlerl_comment_scan.erlerl_prettypr.erlerl_recomment.erlerl_syntax.erlerl_syntax_lib.erlmerl.erlmerl_transform.erlprettypr.erlsrctftp.erltftp.hrltftp_app.erltftp_binary.erltftp_engine.erltftp_file.erltftp_lib.erltftp_logger.erltftp_sup.erlsrccover.erlcprof.erleprof.erlfprof.erllcnt.erlmake.erltags.erlxref.erlxref.hrlxref_base.erlxref_compiler.erlxref_parser.erlxref_parser.yrlxref_reader.erlxref_scanner.erlxref_utils.erlsrcxmerl.app.srcxmerl.appup.srcxmerl.erlxmerl_b64Bin.erlxmerl_b64Bin.yrlxmerl_b64Bin_scan.erlxmerl_eventp.erlxmerl_html.erlxmerl_internal.hrlxmerl_lib.erlxmerl_otpsgml.erlxmerl_regexp.erlxmerl_sax_old_dom.erlxmerl_sax_old_dom.hrlxmerl_sax_parser.erlxmerl_sax_parser.hrlxmerl_sax_parser_latin1.erlxmerl_sax_parser_list.erlxmerl_sax_parser_utf16be.erlxmerl_sax_parser_utf16le.erlxmerl_sax_parser_utf8.erlxmerl_sax_simple_dom.erlxmerl_scan.erlxmerl_sgml.erlxmerl_simple.erlxmerl_text.erlxmerl_ucs.erlxmerl_uri.erlxmerl_validate.erlxmerl_xlate.erlxmerl_xml.erlxmerl_xpath.erlxmerl_xpath_lib.erlxmerl_xpath_parse.erlxmerl_xpath_parse.yrlxmerl_xpath_pred.erlxmerl_xpath_scan.erlxmerl_xs.erlxmerl_xsd.erlxmerl_xsd_type.erl/usr/lib64/erlang/lib/asn1-5.2.1//usr/lib64/erlang/lib/asn1-5.2.1/c_src//usr/lib64/erlang/lib/asn1-5.2.1/src//usr/lib64/erlang/lib/common_test-1.26//usr/lib64/erlang/lib/common_test-1.26/src//usr/lib64/erlang/lib/compiler-8.4.1//usr/lib64/erlang/lib/compiler-8.4.1/src//usr/lib64/erlang/lib/crypto-5.4//usr/lib64/erlang/lib/crypto-5.4/src//usr/lib64/erlang/lib/edoc-1.2.1//usr/lib64/erlang/lib/edoc-1.2.1/src//usr/lib64/erlang/lib/eldap-1.2.12//usr/lib64/erlang/lib/eldap-1.2.12/src//usr/lib64/erlang/lib/erl_docgen-1.5.2//usr/lib64/erlang/lib/erl_docgen-1.5.2/src//usr/lib64/erlang/lib/erl_interface-5.5//usr/lib64/erlang/lib/erl_interface-5.5/src//usr/lib64/erlang/lib/erl_interface-5.5/src/connect//usr/lib64/erlang/lib/erl_interface-5.5/src/decode//usr/lib64/erlang/lib/erl_interface-5.5/src/encode//usr/lib64/erlang/lib/erl_interface-5.5/src/epmd//usr/lib64/erlang/lib/erl_interface-5.5/src/global//usr/lib64/erlang/lib/erl_interface-5.5/src/misc//usr/lib64/erlang/lib/erl_interface-5.5/src/prog//usr/lib64/erlang/lib/erts-14.2.1//usr/lib64/erlang/lib/erts-14.2.1/src//usr/lib64/erlang/lib/eunit-2.9//usr/lib64/erlang/lib/eunit-2.9/src//usr/lib64/erlang/lib/ftp-1.2.1//usr/lib64/erlang/lib/ftp-1.2.1/src//usr/lib64/erlang/lib/inets-9.1//usr/lib64/erlang/lib/inets-9.1/src//usr/lib64/erlang/lib/inets-9.1/src/http_client//usr/lib64/erlang/lib/inets-9.1/src/http_lib//usr/lib64/erlang/lib/inets-9.1/src/http_server//usr/lib64/erlang/lib/inets-9.1/src/inets_app//usr/lib64/erlang/lib/kernel-9.2//usr/lib64/erlang/lib/kernel-9.2/src//usr/lib64/erlang/lib/megaco-4.5//usr/lib64/erlang/lib/megaco-4.5/src//usr/lib64/erlang/lib/megaco-4.5/src/app//usr/lib64/erlang/lib/megaco-4.5/src/binary//usr/lib64/erlang/lib/megaco-4.5/src/engine//usr/lib64/erlang/lib/megaco-4.5/src/flex//usr/lib64/erlang/lib/megaco-4.5/src/tcp//usr/lib64/erlang/lib/megaco-4.5/src/text//usr/lib64/erlang/lib/megaco-4.5/src/udp//usr/lib64/erlang/lib/mnesia-4.23//usr/lib64/erlang/lib/mnesia-4.23/src//usr/lib64/erlang/lib/odbc-2.14.1//usr/lib64/erlang/lib/odbc-2.14.1/c_src//usr/lib64/erlang/lib/odbc-2.14.1/src//usr/lib64/erlang/lib/os_mon-2.9.1//usr/lib64/erlang/lib/os_mon-2.9.1/src//usr/lib64/erlang/lib/parsetools-2.5//usr/lib64/erlang/lib/parsetools-2.5/src//usr/lib64/erlang/lib/public_key-1.15//usr/lib64/erlang/lib/public_key-1.15/src//usr/lib64/erlang/lib/runtime_tools-2.0.1//usr/lib64/erlang/lib/runtime_tools-2.0.1/src//usr/lib64/erlang/lib/sasl-4.2.1//usr/lib64/erlang/lib/sasl-4.2.1/src//usr/lib64/erlang/lib/snmp-5.15//usr/lib64/erlang/lib/snmp-5.15/src//usr/lib64/erlang/lib/snmp-5.15/src/agent//usr/lib64/erlang/lib/snmp-5.15/src/app//usr/lib64/erlang/lib/snmp-5.15/src/compiler//usr/lib64/erlang/lib/snmp-5.15/src/manager//usr/lib64/erlang/lib/snmp-5.15/src/misc//usr/lib64/erlang/lib/ssh-5.1.1//usr/lib64/erlang/lib/ssh-5.1.1/src//usr/lib64/erlang/lib/ssl-11.1//usr/lib64/erlang/lib/ssl-11.1/src//usr/lib64/erlang/lib/stdlib-5.2//usr/lib64/erlang/lib/stdlib-5.2/src//usr/lib64/erlang/lib/syntax_tools-3.1//usr/lib64/erlang/lib/syntax_tools-3.1/src//usr/lib64/erlang/lib/tftp-1.1.1//usr/lib64/erlang/lib/tftp-1.1.1/src//usr/lib64/erlang/lib/tools-3.6//usr/lib64/erlang/lib/tools-3.6/src//usr/lib64/erlang/lib/xmerl-1.3.34//usr/lib64/erlang/lib/xmerl-1.3.34/src/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:34194/SUSE_SLE-15-SP3_Update/35a51d78cd5d900791f607b03bb3d75a-erlang26.SUSE_SLE-15-SP3_Updatedrpmxz5aarch64-suse-linux    directoryC source, ASCII textASCII textASCII text, with very long linesHTML document, ASCII textHTML document, UTF-8 Unicode textUTF-8 Unicode textexported SGML document, ASCII textmakefile script, ASCII textAlgol 68 source, ASCII texta /usr/bin/env escript script, ASCII text executableJڮ;Ghutf-8826d1a955db0ad8da35031242206071662346301de88ce372164b39f5586ad54? 7zXZ !t/+V]"k%m+&vj7b%ܶIѧ:Eo:'f5I%@X!84h RQAu@r•¹\OB'k ]:'\ ]?]X04tu꬯xCBw5$ oɷ)27bԙ+pv[QA,`Sh? wHv"zhb,hbz6LsR3}1C#" òᝉV݃m!uABӕxш@ .hs 6cqR'>Yߘ97rPt(r&ڛx] dL!qlc.{3gYoХlעa^$"v CPg98w`e = "VhVr9Q)yCyYZhHkDvfk,W,tsTU9R@nĎV_Lf' F|@1fC }]`=PN-Kgs)r}3'rV^@ L[K7HFu: h Oh))Z_5C&CWitВ5?O)ںmNlZT*~CsM~}9cb 9Tܳ0\@>V,M9̔:ƨ%uv'O!~V9iku 6EB6sMεīԉq0Gh}lL.mpcZg;0{u(7)f3QݤG`ffV}'LI6wBzy2z׾+n߷X TGиO不?r@JF] ״׫~-33c!Rk$ŠVLz_"{>r8100@~8]}Aybk㉝m2}#?ݢ\[63)"w>*4!#5uS \2XGha$w Uь)jIW,:D0^_R 1}M n[_DɎE1vhUƢ6WeV?21UL;z,MR'٥gR۪آQa;!81'dSLJ)2iؔ.##S~5ҫ*08n4KcNt%#xCeK7|nxx[\|E&* h+FIѐn38#JZ_$?B?Lu:6_ )ghz{8{o:rؐQh^KBULngfRIKBN= )&̘[:UaqB- ~di|U oa.V4>TcZ%Md 5Y1rqSBI~3ŵـR&'s|%26껁yUg}""bdbt|3 kR]{k/rOCstw`g3n(7駕̐,&!֘7R@W,VK l0A1չg"d{RhoEm4{/a0JפdSIK VE3\{U!lX$"wEPr ̍r"f%ta0IyKiD 8`2"S g/~׭ OEЭ`|I*nܲ[8Oj Տ<{¥o j 017Kv{'w:~g0zJT:F5RoϢ):0P%ylO\P8rs"笰}c9VѰ{e˩Un9 ,<7 ЃOX9ȉlnG'p$N<Is ~q'4,6^8nl/(UyWw3]۩D:rԓ9"u ܭ ~/τ*+ dlx<4 H2 HY[>b36 8rq՘V?-6pa\5dk'f2݁sOƜ&Kԧy-- W$UڨYFqr jPgWe=zma e oלf(ż5EeVDB'@Jk8dTzz,PYt/SWe 8nP({ vEY\R,ߨǓimLxy/n/MaE mn'ڱ Lj4U;$xlnP|gi13pHAJ\`7C\rZ/F<=U,ΘLx1_VZea3e㡦V7m$#>R"%F>tIzluE˝y݅zO] o> HEz=ص2$gѫu }ұxXUݮݗ9?NU.&}· vr":8~dp`ا6d_!gE<V9T JE]d`cGщt֥NB逽}GiKYQ8;td+TyAe]/f"O=#N ]sDmº<:6q[{+%mgo01d"BқC:іЏEjV#Ly@%|3_'rj&v꥗560^{0O8ڐh@)ԑf^UxǢ虲]iCf5H >o`$iBѺe)x_A sBSc'6t[IpƋi/}#,ųg2tK\[r> :3=3v'0Aw$E%6oEc (azQc>'#==iobJ6m+j2pr0-@ϋ:@N'.}zMLʬ2юE+KIH/p@8% XswV6qh ϤBH+k-2 xn^SBwQ9RS 'l8'n$lڜ*[m1N|-n[69>ghCXr!(0 9dP-XL'@w IK"*k)3 wOY$fy@#;!5,R.Az6{ 3q7IP)4$jBQC`ޫ_gp" QQ 3PcZ~QR..dVo( |.֎fViJ/z8;U2/<"LC} 6mn,W6h48uE8 Ms0nK2u_tjLOQ$DXc曯!=wNBtz#fO\ 5ewz泴dcO7W%< ?vctv ҁ&Ƅėu}YɉaN5nt2cEw`TxPB|MFhĮ&j׶7l5 #&J&:r59Zf֔I`ZQ{a/N0sȰ z^AGc%d#5]0\{- o@[-I"9V8Zibnv@V.W]C58w4VN) YZ